diff --git a/DOKPLOY.md b/DOKPLOY.md new file mode 100644 index 0000000..f7b9b40 --- /dev/null +++ b/DOKPLOY.md @@ -0,0 +1,78 @@ +# Развертывание 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` + +## Запуск в локальной сети (без домена / по 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`. diff --git a/docker-compose.yml b/docker-compose.yml index 07a8ea2..f2162b5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,10 +19,10 @@ services: container_name: vortex-server restart: always environment: - DATABASE_URL: postgresql://${POSTGRES_USER:-vortex}:${POSTGRES_PASSWORD:-vortex_pass}@db:5432/${POSTGRES_DB:-vortex_db} + DATABASE_URL: ${DATABASE_URL:-postgresql://${POSTGRES_USER:-vortex}:${POSTGRES_PASSWORD:-vortex_pass}@db:5432/${POSTGRES_DB:-vortex_db}} PORT: 3001 JWT_SECRET: ${JWT_SECRET:-your-secure-random-secret-key-here} - CORS_ORIGINS: http://localhost,http://localhost:80,http://localhost:5173 + CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost,http://localhost:80,http://localhost:5173} ENCRYPTION_KEY: ${ENCRYPTION_KEY:-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef} depends_on: - db