# Инструкция по сборке единого Docker образа Этот проект содержит единый Dockerfile для сборки frontend и backend в один образ. ## Структура - `Dockerfile` - единый Dockerfile для сборки frontend и backend - `nginx-unified.conf` - конфигурация nginx для единого образа - `supervisord.conf` - конфигурация supervisor для запуска nginx и backend - `build-and-save.sh` - скрипт для сборки и сохранения в tar (Linux/Mac) - `build-and-save.ps1` - скрипт для сборки и сохранения в tar (Windows PowerShell) ## Сборка образа ### Linux/Mac: ```bash ./build-and-save.sh ``` ### Windows PowerShell: ```powershell .\build-and-save.ps1 ``` ### Вручную: ```bash # Сборка образа docker build -t play-life-unified:latest . # Сохранение в tar docker save play-life-unified:latest -o play-life-unified.tar ``` ## Загрузка образа на другой машине ```bash docker load -i play-life-unified.tar ``` ## Запуск контейнера ```bash docker run -d \ -p 80:80 \ --env-file .env \ --name play-life \ play-life-unified:latest ``` ## Переменные окружения Создайте файл `.env` на основе `env.example` с необходимыми переменными: - `DB_HOST` - хост базы данных (по умолчанию: localhost) - `DB_PORT` - порт базы данных (по умолчанию: 5432) - `DB_USER` - пользователь БД - `DB_PASSWORD` - пароль БД - `DB_NAME` - имя БД - `WEBHOOK_BASE_URL` - базовый URL для webhook (опционально) - Bot Token и Chat ID настраиваются через UI приложения в разделе "Интеграции" -> "Telegram" - `TODOIST_WEBHOOK_SECRET` - секрет для Todoist webhook (опционально) **Важно:** Backend внутри контейнера всегда работает на порту 8080. Nginx проксирует запросы с порта 80 на backend. ## Проверка работы После запуска контейнера: - Frontend доступен по адресу: `http://localhost` - API доступен через nginx: `http://localhost/api/...` - Admin панель: `http://localhost/admin.html` ## Логи Логи доступны через supervisor: ```bash docker exec play-life cat /var/log/supervisor/backend.out.log docker exec play-life cat /var/log/supervisor/nginx.out.log ```