Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
174 lines
12 KiB
Plaintext
174 lines
12 KiB
Plaintext
---
|
||
title: Миграция с локального на облако
|
||
description: Пошаговое руководство по миграции вашего самостоятельно размещённого экземпляра Twenty в Twenty Cloud.
|
||
---
|
||
|
||
## Обзор
|
||
|
||
В этом руководстве описан процесс переноса ваших данных из самостоятельно размещённого экземпляра Twenty в Twenty Cloud. Процесс включает настройку облачного рабочего пространства, экспорт данных и их повторный импорт.
|
||
|
||
<Note>Представления, рабочие процессы и роли необходимо воссоздать вручную после миграции. Запланируйте время на эту настройку.</Note>
|
||
|
||
## Шаг 1: Создайте облачное рабочее пространство
|
||
|
||
1. Перейдите на [app.twenty.com](https://app.twenty.com) и создайте новое рабочее пространство
|
||
2. Пройдите начальный мастер настройки
|
||
3. Запишите URL нового рабочего пространства
|
||
|
||
## Шаг 2: Воссоздайте модель данных
|
||
|
||
Перед импортом данных воссоздайте ваши пользовательские объекты и поля:
|
||
|
||
1. Перейдите в **Настройки → Модель данных** в вашем облачном экземпляре
|
||
2. Создайте пользовательские объекты, соответствующие вашей конфигурации в самостоятельно размещённом экземпляре
|
||
3. Добавьте пользовательские поля к стандартным и пользовательским объектам
|
||
4. Настройте параметры полей (уникальность, обязательность и т. д.)
|
||
|
||
<Note>Сделайте скриншоты модели данных вашего самостоятельно размещённого экземпляра для справки или держите оба экземпляра открытыми рядом.</Note>
|
||
|
||
## Шаг 3: Пригласите всех пользователей
|
||
|
||
<Warning>
|
||
**Важно: Пригласите пользователей ПЕРЕД импортом данных.**
|
||
|
||
Пользователи должны принять приглашения до импорта любых записей, которые на них ссылаются (например, поля владельца аккаунта). Если пользователи ещё не существуют, эти связи нельзя будет сопоставить.
|
||
</Warning>
|
||
|
||
1. Перейдите в **Настройки → Участники** в вашем облачном экземпляре
|
||
2. Пригласите всех участников команды, у которых были аккаунты в самостоятельно размещённой версии
|
||
3. **Дождитесь, пока все примут** приглашения
|
||
4. Проверьте, что все пользователи отображаются в списке «Участники»
|
||
|
||
## Шаг 4: Экспортируйте данные из самостоятельно размещённой версии
|
||
|
||
Экспортируйте каждый объект из вашего самостоятельно размещённого экземпляра:
|
||
|
||
1. Перейдите к каждому объекту (Компании, Люди, Возможности и т. д.)
|
||
2. Настройте представление так, чтобы отображались **все столбцы**, которые вы хотите перенести
|
||
3. Нажмите **⋮ → Экспорт представления**
|
||
4. Сохраните каждый CSV-файл с понятным именем (например, `companies-export.csv`)
|
||
|
||
**Экспортируйте в следующем порядке** (для справки при импорте):
|
||
|
||
1. Компании
|
||
2. Люди
|
||
3. Возможности
|
||
4. Пользовательские объекты (с учётом зависимостей)
|
||
5. Задачи, заметки
|
||
|
||
## Шаг 5: Обновите ссылки на участников рабочего пространства
|
||
|
||
Экспортированные CSV-файлы содержат идентификаторы пользователей из вашего самостоятельно размещённого экземпляра. Эти идентификаторы не совпадут с облачным экземпляром, поэтому их нужно заменить на адреса электронной почты.
|
||
|
||
**Для каждого CSV-файла со ссылками на пользователей (владелец, исполнитель и т. д.):**
|
||
|
||
1. Откройте CSV в табличном редакторе
|
||
2. Добавьте новый столбец рядом с каждым столбцом идентификатора пользователя (например, `accountOwnerEmail` рядом с `accountOwnerId`)
|
||
3. Укажите **адрес электронной почты** каждого пользователя
|
||
4. Вы можете удалить старый столбец с идентификатором или оставить его (при импорте он будет пропущен)
|
||
|
||
**Пример:**
|
||
|
||
До:
|
||
|
||
```csv
|
||
name,domain,accountOwnerId
|
||
Acme Corp,https://acme.com,old-uuid-123
|
||
```
|
||
|
||
После:
|
||
|
||
```csv
|
||
name,domain,accountOwnerEmail
|
||
Acme Corp,https://acme.com,john@yourcompany.com
|
||
```
|
||
|
||
<Note>Используйте те же адреса электронной почты, которые пользователи использовали для принятия приглашения в облачное рабочее пространство.</Note>
|
||
|
||
## Шаг 6: Спланируйте порядок импорта
|
||
|
||
Импортируйте файлы в правильном порядке, чтобы сохранить связи:
|
||
|
||
1. **Компании** в первую очередь (без зависимостей)
|
||
2. **Люди** во вторую очередь (связь с компаниями)
|
||
3. **Возможности** в третью очередь (связь с компаниями и людьми)
|
||
4. **Пользовательские объекты** (с учётом зависимостей)
|
||
5. **Задачи и заметки** в последнюю очередь (связь с другими записями)
|
||
|
||
См. [как импортировать связи](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) для подробностей о сохранении связей.
|
||
|
||
## Шаг 7: Импорт в облако
|
||
|
||
Для каждого CSV-файла, по порядку:
|
||
|
||
1. Перейдите к объекту в вашем облачном экземпляре
|
||
2. Нажмите **⋮ → Импорт записей**
|
||
3. Загрузите файл CSV
|
||
4. Сопоставьте столбцы с полями:
|
||
* Сопоставьте столбцы с адресами электронной почты пользователей соответствующим полям связей
|
||
* Сопоставьте остальные столбцы как обычно
|
||
5. Проверьте и исправьте любые ошибки
|
||
6. Подтвердите импорт
|
||
7. Проверьте несколько записей, прежде чем переходить к следующему файлу
|
||
|
||
## Шаг 8: Воссоздайте конфигурацию
|
||
|
||
После импорта данных вручную воссоздайте:
|
||
|
||
### Представления
|
||
|
||
* Воссоздайте сохранённые представления с фильтрами, сортировками и настройками столбцов
|
||
* Настройте канбан- и календарные представления
|
||
|
||
### Рабочие процессы
|
||
|
||
* Воссоздайте автоматизации в **Настройки → Рабочие процессы**
|
||
* Протестируйте каждый рабочий процесс, прежде чем полагаться на него
|
||
|
||
### Роли и разрешения
|
||
|
||
* Настройте роли в **Настройки → Участники → Роли**
|
||
* Назначьте пользователям соответствующие роли
|
||
|
||
### Интеграции
|
||
|
||
* Подключите заново синхронизацию почты и календаря для каждого пользователя
|
||
* Перенастройте любые интеграции API с новыми ключами API
|
||
|
||
## Послемиграционный контрольный список
|
||
|
||
<Check>Все данные успешно импортированы</Check>
|
||
<Check>Связи между объектами работают корректно</Check>
|
||
<Check>Назначения пользователей (владелец, исполнитель) сопоставлены корректно</Check>
|
||
<Check>Представления воссозданы</Check>
|
||
<Check>Рабочие процессы воссозданы и протестированы</Check>
|
||
<Check>Роли и разрешения настроены</Check>
|
||
<Check>Синхронизация почты/календаря восстановлена</Check>
|
||
<Check>Интеграции API обновлены новыми ключами</Check>
|
||
|
||
## Часто задаваемые вопросы
|
||
|
||
<AccordionGroup>
|
||
<Accordion title="Можно ли автоматически перенести рабочие процессы?">
|
||
Пока нет. Рабочие процессы необходимо воссоздать вручную в вашем облачном экземпляре.
|
||
</Accordion>
|
||
|
||
<Accordion title="Что насчёт вложений и изображений?">
|
||
Вложения не включаются в экспорт CSV. Вам потребуется повторно загрузить все вложения вручную, перенести их через API или связаться с нашей командой для помощи при крупных миграциях.
|
||
</Accordion>
|
||
|
||
<Accordion title="Можно ли держать оба экземпляра запущенными во время миграции?">
|
||
Да, мы рекомендуем оставлять самостоятельно размещённый экземпляр запущенным, пока вы не убедитесь, что миграция в облако завершена. Просто следите, чтобы не создавать новые данные в обеих системах.
|
||
</Accordion>
|
||
|
||
<Accordion title="Что делать, если пользователь ещё не принял приглашение?">
|
||
Записи, ссылающиеся на этого пользователя, не будут импортированы, либо связь останется пустой. Убедитесь, что все пользователи приняли приглашения перед импортом данных.
|
||
</Accordion>
|
||
</AccordionGroup>
|
||
|
||
## Нужна Помощь?
|
||
|
||
<Tip>
|
||
Мигрируете крупное или сложное рабочее пространство? [Найдите сертифицированного партнёра Twenty](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-migrate-cloud), который возьмёт перенос на себя от начала и до конца. *(Или подключите нашу команду: [contact@twenty.com](mailto:contact@twenty.com).)*
|
||
</Tip>
|