# Девопсу — ревью и деплой neon-bar86.ru Прод: VPS `neon-bar86.ru`, каталог `/opt/apps/neon-bar86.ru`, контейнеры `neon-site` (8080) / `neon-crm` (47613) / `neon-db` (PostgreSQL). Наружу смотрит Caddy: `neon-bar86.ru` → 8080, `crm.neon-bar86.ru` → 47613. ## Ревью фичи 1. Разработчик пушит ветку `feature/*` — CI автоматически гоняет тесты (репо → **Действия**). 2. Ревью: PR в Gitea (**Запросы на слияние**), либо локально: ```bash git fetch origin git diff main origin/feature/<имя> ``` 3. Слияние — через кнопку в PR, либо локально: ```bash git switch main && git pull git merge --no-ff origin/feature/<имя> git push ``` **Пуш в `main` = автодеплой.** ## Что делает пайплайн при пуше в main 1. Тесты CRM (SQLite, изолированный каталог данных). 2. На VPS по шагам: - **pg_dump бэкап БД** → `backups/` (хранится 7 последних) — данные обратимы всегда; - `git fetch` + `git reset --hard origin/main` — код с сервера = код в репо (`.env`, `crm/media`, `crm/data`, `backups` защищены `.gitignore` и не трогаются); - pre-flight `docker compose config -q` — сломанный compose/env падает ДО троганья контейнеров; - `docker compose up -d --build`; - health-check `/api/healthz` через сайт — не поднялось, прогон красный. БД живёт в docker-томе `pgdata` — деплой кода её не касается ни при каком исходе. ## Проверка после деплоя ```bash curl -s https://neon-bar86.ru/api/healthz # {"ok": true} # сайт и CRM открываются, логин в панель работает ssh neon@neon-bar86.ru "docker ps" # три контейнера Up (healthy) ``` ## Ручной передеплой (без изменений кода) ```bash git commit --allow-empty -m "redeploy" && git push ``` ## Откат - **Код**: `git revert && git push` — пайплайн задеплоит старую версию. - **Данные** (дампы на VPS, `backups/`): ```bash gunzip -c backups/<файл>.sql.gz | docker exec -i neon-db psql -U $POSTGRES_USER -d $POSTGRES_DB ``` ⚠ Перезаписывает базу — сначала диагностика и стоп, затем восстановление. ## Диагностика на VPS ```bash ssh neon@neon-bar86.ru docker ps # статусы контейнеров docker logs neon-crm --tail 30 # почему не поднялся CRM df -h / # диск ~82% — следить docker image prune -f # чистка dangling-образов ``` Лог деплоев — репо → **Действия**; лог CRM/Caddy — на сервере. Секреты только в `.env` на VPS и в secrets репозитория (Действия не печатают их в лог).