91 lines
6.3 KiB
Markdown
91 lines
6.3 KiB
Markdown
# Развертывание Vortex в Dokploy
|
||
|
||
Dokploy — это мощная self-hosted PaaS платформа, которая упрощает деплой Docker-приложений. Есть два способа развернуть Vortex в Dokploy.
|
||
|
||
## Способ 1: С использованием Docker Compose (Самый простой)
|
||
|
||
Этот метод объединяет базу данных и приложения в один стек.
|
||
|
||
1. **Создайте проект**: В панели Dokploy создайте новый "Project".
|
||
2. **Добавьте Compose сервис**:
|
||
* Нажмите "Add Service" -> "Compose".
|
||
* Подключите ваш GitHub/GitLab репозиторий.
|
||
* Выберите нужную ветку (например, `main`).
|
||
3. **Настройте переменные окружения**:
|
||
* Во вкладке "Environment" добавьте следующие переменные:
|
||
* `JWT_SECRET`: Длинная случайная строка (ключ для авторизации).
|
||
* `CORS_ORIGINS`: `https://vortex.your-domain.com` (замените на ваш реальный домен).
|
||
* `ENCRYPTION_KEY`: 64-символьная HEX-строка (например, `0123...`).
|
||
4. **Укажите домен**:
|
||
* Перейдите во вкладку "Domains".
|
||
* Dokploy автоматически настроит Traefik для основного сервиса `web`, если вы укажете домен здесь.
|
||
5. **Деплой**: Нажмите кнопку "Deploy".
|
||
|
||
## Способ 2: Нативный метод Dokploy (Рекомендуется для Production)
|
||
|
||
Этот метод использует встроенные базы данных Dokploy для лучшего управления бэкапами и производительностью.
|
||
|
||
### 1. Создайте базу данных
|
||
* В Dokploy перейдите в "Databases" -> "PostgreSQL".
|
||
* Создайте новую базу данных.
|
||
* После создания перейдите во вкладку "Internal Connection", чтобы получить `DATABASE_URL`.
|
||
|
||
### 2. Создайте приложение для Сервера (Backend)
|
||
* Add Service -> "Application".
|
||
* Подключите репозиторий.
|
||
* **Настройки сборки (Build Settings)**:
|
||
* Docker Context: `.`
|
||
* Dockerfile Path: `Dockerfile.server`
|
||
* **Переменные окружения (Environment Variables)**:
|
||
* `DATABASE_URL`: (Вставьте URL из шага 1)
|
||
* `PORT`: `3001`
|
||
* `JWT_SECRET`: (Случайная строка)
|
||
* `ENCRYPTION_KEY`: (64 символа hex)
|
||
* `CORS_ORIGINS`: `https://vortex.your-domain.com`
|
||
* **Сеть (Networking)**:
|
||
* Port: `3001`
|
||
|
||
### 3. Создайте приложение для Веб-интерфейса (Frontend)
|
||
* Add Service -> "Application".
|
||
* Подключите репозиторий.
|
||
* **Настройки сборки (Build Settings)**:
|
||
* Docker Context: `.`
|
||
* Dockerfile Path: `Dockerfile.web`
|
||
* **Домены**:
|
||
* Добавьте ваш домен (например, `vortex.example.com`).
|
||
* **Сеть (Networking)**:
|
||
* Port: `80`
|
||
|
||
## Важные настройки
|
||
|
||
### 1. Постоянное хранение файлов (Persistence)
|
||
Если вы используете Способ 2, не забудьте настроить **Volumes** для приложения сервера, чтобы аватарки и файлы не удалялись при каждом обновлении кода:
|
||
* Путь в контейнере: `/app/apps/server/uploads`
|
||
* Путь на хосте: `/var/lib/dokploy/vortex/uploads`
|
||
|
||
## Настройка звонков (TURN сервер)
|
||
|
||
Для того чтобы звонки работали через интернет (вне локальной сети), обязателен TURN-сервер. Я добавил его в `docker-compose.yml`.
|
||
|
||
**Важно:** Чтобы звонки заработали, вам НУЖНО открыть следующие порты на вашем сервере/роутере:
|
||
1. `3478` (TCP и UDP) — основной порт TURN.
|
||
2. `49152-49170` (UDP) — диапазон портов для передачи медиа-трафика.
|
||
|
||
В Dokploy убедитесь, что в переменных окружения прописан ваш домен:
|
||
* `DOMAIN`: `mess.khomegeneric.keenetic.pro`
|
||
* `TURN_SECRET`: `dcf1c1827c0c520d45130e282ea26991`
|
||
|
||
## Запуск в локальной сети (без домена / по IP)
|
||
|
||
Если вы хотите пользоваться мессенджером прямо сейчас по IP-адресу или в локальной сети:
|
||
|
||
1. **Настройка CORS**: В переменных окружения `CORS_ORIGINS` укажите IP вашего сервера:
|
||
* Пример: `http://192.168.1.50,http://localhost`
|
||
2. **Домен в Dokploy**:
|
||
* При добавлении домена в Dokploy можно указать локальный IP или временное имя.
|
||
* Если Dokploy требует обязательный домен для SSL, а у вас его нет, вы можете обращаться к сервису по порту напрямую (по умолчанию 80-й порт веб-интерфейса проброшен на хост).
|
||
3. **Важное ограничение (WebRTC)**:
|
||
* **Звонки и микрофон** в браузерах работают только через `https://` или на `localhost`.
|
||
* При доступе по обычному IP (например, `http://192.168.1.50`) браузер **заблокирует** доступ к камере и микрофону из соображений безопасности.
|
||
* **Решение**: Для полноценной работы звонков в локальной сети рекомендуется использовать самоподписанный сертификат или настроить в браузере флаг `unsafely-treat-insecure-origin-as-secure`.
|