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