195 lines
4.3 KiB
Markdown
195 lines
4.3 KiB
Markdown
# 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 БД
|