# Инструкция по сборке единого 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
```

