Files
upstream-twenty/packages/twenty-docs/l/ru/developers/self-host/capabilities/docker-compose.mdx
upstream-mirror e7da97194a
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
snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
2026-09-17 23:28:13 +05:00

263 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Docker Compose
icon: docker
---
<Warning>
Контейнеры Docker предназначены для продакшен-хостинга или саморазмещения. Для участия в разработке см. [Локальная настройка](/l/ru/developers/contribute/capabilities/local-setup).
</Warning>
## Обзор
Это руководство предоставляет пошаговые инструкции по установке и настройке приложения Twenty с помощью Docker Compose. Цель заключается в том, чтобы сделать процесс простым и избежать распространенных ошибок, которые могут привести к сбоям в настройке.
**Важно:** изменяйте только те настройки, которые явно упоминаются в этом руководстве. Изменение других конфигураций может привести к проблемам.
См. [Настройка переменных окружения](/l/ru/developers/self-host/capabilities/setup) для расширенной конфигурации. Все переменные окружения должны быть задекларированы в файле `docker-compose.yml` на уровне сервера и/или воркера, в зависимости от переменной.
## Системные требования
* ОЗУ: Убедитесь, что в вашей среде не менее 2 ГБ ОЗУ. Недостаток памяти может вызвать сбой процессов.
* Docker и Docker Compose: убедитесь, что оба установлены и обновлены.
## Вариант 1: Скрипт с одной строкой
Установите последнюю стабильную версию Twenty одной командой:
```bash
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
Для установки конкретной версии или ветки:
```bash
VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
* Замените x.y.z на желаемый номер версии.
* Замените branch-name на имя ветки, которую вы хотите установить.
## Вариант 2: Ручные шаги
Выполните следующие шаги для ручной настройки.
### Шаг 1: Настройте файл среды
1. **Создайте файл .env**
Скопируйте пример файла окружения в новый .env файл в вашем рабочем каталоге:
```bash
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
```
2. **Сгенерируйте ключ шифрования**
Выполните следующую команду для генерации уникальной случайной строки:
```bash
openssl rand -base64 32
```
**Внимание:** держите это значение в секрете / не делитесь им. Потеря `ENCRYPTION_KEY` означает потерю доступа ко всем секретам, хранящимся в базе данных (OAuth-токены, переменные приложения, TOTP-секреты и т. д.).
3. **Обновите файл `.env`**
Замените значение плейсхолдера в вашем файле .env на сгенерированный токен:
```ini
ENCRYPTION_KEY=random_string
```
См. [руководство по ротации ключей](/l/ru/developers/self-host/capabilities/key-rotation) для получения инструкций по их ротации без простоя.
4. **Установите пароль для Postgres**
Обновите значение `PG_DATABASE_PASSWORD` в файле .env, используя надежный пароль без специальных символов.
```ini
PG_DATABASE_PASSWORD=my_strong_password
```
### Шаг 2: Получите файл Docker Compose
Скачайте файл `docker-compose.yml` в ваш рабочий каталог:
```bash
curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
```
### Шаг 3: Запустите приложение
Запустите Docker-контейнеры:
```bash
docker compose up -d
```
### Шаг 4: Доступ к приложению
Если вы размещаете twentyCRM на своем компьютере, откройте ваш браузер и перейдите на [http://localhost:3000](http://localhost:3000).
Если вы размещаете это на сервере, убедитесь, что сервер запущен и что все в порядке с
```bash
curl http://localhost:3000
```
## Конфигурация
### Открыть доступ к Twenty из внешней сети
По умолчанию Twenty работает на `localhost` на порту `3000`. Пользовательский интерфейс определяет API из источника самого браузера, поэтому он загружается с любого имени хоста, который обращается к контейнеру, — но всё равно укажите `SERVER_URL` как ваш публичный URL: сервер использует его для сгенерированных ссылок (email‑сообщений, OAuth‑обратных вызовов) и для определения HTTPS для защищённых cookie.
#### Понимание `SERVER_URL`
* **Протокол:** используйте `http` или `https` в зависимости от вашей настройки.
* Используйте `http`, если SSL не настроен.
* Используйте `https`, если SSL настроен.
* **Домен/IP:** это имя домена или IP-адрес, где ваше приложение доступно.
* **Порт:** указывайте номер порта, если вы не используете порты по умолчанию (`80` для `http`, `443` для `https`).
### Требования к SSL
SSL (HTTPS) требуется для правильной работы некоторых функций браузера. Хотя эти функции могут работать во время разработки на локальном компьютере (поскольку браузеры обрабатывают localhost иначе), правильная настройка SSL необходима при размещении Twenty на регулярном домене.
Например, API буфера обмена может потребовать защищенный контекст - некоторые функции, такие как кнопки копирования в приложении, могут не работать без включения HTTPS.
Мы настоятельно рекомендуем настроить Twenty за обратным прокси-сервером с прекращением SSL для оптимальной безопасности и функциональности.
#### Настройка `SERVER_URL`
1. **Определите ваш URL-адрес доступа**
* **Без обратного прокси (Прямой доступ):**
Если вы получаете доступ к приложению напрямую без использования обратного прокси:
```ini
SERVER_URL=http://your-domain-or-ip:3000
```
* **С обратным прокси (Стандартные порты):**
Если вы используете обратный прокси, такой как Nginx или Traefik, и у вас настроен SSL:
```ini
SERVER_URL=https://your-domain-or-ip
```
* **С обратным прокси (Не стандартные порты):**
Если вы используете нестандартные порты:
```ini
SERVER_URL=https://your-domain-or-ip:custom-port
```
2. **Обновите файл `.env`**
Откройте ваш файл `.env` и обновите `SERVER_URL`:
```ini
SERVER_URL=http(s)://your-domain-or-ip:your-port
```
**Примеры:**
* Прямой доступ без SSL:
```ini
SERVER_URL=http://123.45.67.89:3000
```
* Доступ через домен с SSL:
```ini
SERVER_URL=https://mytwentyapp.com
```
3. **Перезапустите приложение**
Для применения изменений перезапустите контейнеры Docker:
```bash
docker compose down
docker compose up -d
```
#### Рассмотрения
* **Конфигурация обратного прокси:**
Убедитесь, что ваш обратный прокси передаёт запросы на правильный внутренний порт (`3000` по умолчанию). Настройте завершение SSL и все необходимые заголовки.
* **Настройки брандмауэра:**
Откройте необходимые порты в вашем брандмауэре для обеспечения внешнего доступа.
* **Последовательность:**
Значение `SERVER_URL` должно соответствовать тому, как пользователи обращаются к вашему приложению в своих браузерах.
#### Сохранение данных
* **Тома данных:**
Конфигурация Docker Compose использует тома для сохранения данных базы данных и хранилища сервера.
* **Среды без состояния:**
Если развёртывание осуществляется в бесстатном окружении (например, некоторых облачных сервисах), настройте внешнее хранилище для сохранения данных.
## Резервное копирование и восстановление
Регулярные резервные копии защищают данные вашей CRM от потери.
### Создание резервной копии базы данных
```bash
docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
```
### Автоматизируйте ежедневное резервное копирование
Добавьте в свой crontab (`crontab -e`):
```bash
0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
```
### Восстановление из резервной копии
1. Остановите приложение:
```bash
docker compose stop server worker
```
2. Восстановите базу данных:
```bash
docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
```
3. Перезапустите службы:
```bash
docker compose up -d
```
### Лучшие практики резервного копирования
* **Регулярно проверяйте восстановление** — убедитесь, что резервные копии действительно работают
* **Храните резервные копии вне площадки** — используйте облачное хранилище (S3, GCS и т. д.)
* **Шифруйте конфиденциальные данные** — защищайте резервные копии с помощью шифрования
* **Храните несколько копий** — сохраняйте ежедневные, еженедельные и ежемесячные резервные копии
## Устранение неполадок
Если у вас возникли проблемы, проверьте [Устранение неполадок](/l/ru/developers/self-host/capabilities/troubleshooting) для получения решений.
## Управляемый хостинг
<Tip>
Не хотите запускать и поддерживать Twenty самостоятельно? [Найдите сертифицированного партнёра по хостингу Twenty](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-docker-compose), который развернёт, разместит и полностью возьмёт на себя управление вашим экземпляром. *(Или свяжитесь с нашей командой: [contact@twenty.com](mailto:contact@twenty.com).)*
</Tip>