Files
forkmessager/DOKPLOY.md
Халимов Рустам a6c0ffc35b TURN
2026-03-11 00:27:11 +03:00

91 lines
6.3 KiB
Markdown
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.
# Развертывание 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`.