# Deploy Runbook

Короткая инструкция по выкладке проекта на сервер.

## 1. Подготовка сервера

- Установить `git`, `docker`, `docker compose`.
- Открыть наружу только порты `80` и `443`.
- Закрыть наружу `5432`, `6379`, `3000`, `4000`, `4010`, `8080`.
- Создать каталог проекта, например:

```bash
mkdir -p ~/alpinbet-parser
cd ~/alpinbet-parser
```

## 2. Получение кода

Если репозиторий уже инициализирован:

```bash
git remote -v
git pull
```

Если это первый деплой:

```bash
git clone git@gitlab.com:talorr/alpinbet-parser.git ~/alpinbet-parser
cd ~/alpinbet-parser
```

## 3. Настройка секретов

Скопировать шаблон env:

```bash
cp .env.example .env
```

Заполнить в `.env`:

- `POSTGRES_DB`
- `POSTGRES_USER`
- `POSTGRES_PASSWORD`
- `JWT_SECRET`
- `PARSER_INTERNAL_SECRET`
- `NUXT_PUBLIC_API_BASE`
- `APP_PUBLIC_URL`
- `CORS_ORIGIN`
- `SMTP_*`
- `VAPID_*`
- `FIREBASE_*`

Важно:

- Не оставлять `change_me_*`.
- Использовать длинные случайные значения для `JWT_SECRET` и `PARSER_INTERNAL_SECRET`.
- `adminer` и `dockmon` должны оставаться закомментированными в `docker-compose.yml`.

## 4. Доступ к Traefik Dashboard

Создать файл с логином и паролем:

```bash
mkdir -p traefik/secrets
cp traefik/secrets/dashboard-users.example traefik/secrets/dashboard-users
```

Сгенерировать `htpasswd`:

```bash
htpasswd -nb admin 'CHANGE_ME_STRONG_PASSWORD' > traefik/secrets/dashboard-users
```

## 5. Проверка конфига

Перед запуском проверить итоговый compose:

```bash
docker compose config
```

Если здесь ошибка, не запускать деплой, пока она не исправлена.

## 6. Первый запуск

Собрать и поднять стек:

```bash
docker compose up -d --build
```

Применить схему базы:

```bash
docker compose exec backend npx prisma db push
```

Проверить статус:

```bash
docker compose ps
docker compose logs --tail=100 backend
docker compose logs --tail=100 frontend
docker compose logs --tail=100 parser
```

## 7. Smoke Check После Деплоя

Проверить:

```bash
curl https://api.antigol.ru/health
```

И вручную в браузере:

- `https://antigol.ru`
- логин
- открытие сигналов
- админка, если нужна

## 8. Бэкап Базы

Создать sql-бэкап:

```bash
docker compose exec -T postgres pg_dump -U postgres -d betting_signals > backup_$(date +%F_%H-%M-%S).sql
```

Или сразу архив:

```bash
docker compose exec -T postgres pg_dump -U postgres -d betting_signals | gzip > backup_$(date +%F_%H-%M-%S).sql.gz
```

Если имена БД и пользователя другие, подставить свои значения из `.env`.

Скачать бэкап на локальную машину:

```bash
scp root@your-server:~/alpinbet-parser/backup_2026-03-25_20-30-00.sql.gz .
```

## 9. Обновление Проекта

Обычный порядок после `git pull`:

```bash
git pull
docker compose build backend frontend parser forecast-ocr
docker compose up -d
docker compose exec backend npx prisma db push
```

Если менялись только env или Traefik:

```bash
docker compose up -d
```

## 10. Полезные Команды

Логи:

```bash
docker compose logs -f backend
docker compose logs -f parser
docker compose logs -f traefik
```

Перезапуск одного сервиса:

```bash
docker compose restart backend
docker compose restart parser
```

Остановить проект:

```bash
docker compose down
```

## 11. Минимальный Продовый Чеклист

- `.env` заполнен реальными значениями
- `dashboard-users` создан
- `docker compose config` проходит без ошибок
- наружу открыты только `80` и `443`
- `adminer` и `dockmon` не включены
- после запуска проходит `/health`
- сделан свежий backup БД
