infra: автодеплой бота на VPS vobot #12

Closed
opened 2026-10-12 19:34:01 +03:00 by Eleboba · 0 comments
Owner

Описание

CD бота по ARCHITECTURE §6, по образцу meditron (/srv/ptsr, ptsr-deploy). Хост — vobot (72.56.247.166), рядом прод Vobot: ресурсы ограничены (~1,9 ГБ RAM свободно).

Желаемый результат

  • Пользователь tgit-deploy (группа docker), каталог /srv/tgit с .env только на сервере.
  • infra/deploy/deploy.sh [ref] — тот же скрипт руками и из CI; хост — DEPLOY_HOST.
  • Workflow deploy в .sourcecraft/ci.yaml на push в main после check; smoke — healthcheck контейнера.
  • Деплой на другой сервер = другой DEPLOY_HOST, без правки кода.

Подзадачи

  • Подготовка хоста: пользователь, каталог, ключ CI в authorized_keys
  • infra/deploy/deploy.sh (git archive → scp → атомарная замена → compose up → healthcheck → REVISION, ретраи SSH)
  • infra/deploy/docker-compose.server.yml — лимиты, restart: unless-stopped, ротация логов
  • Секреты DEPLOY_SSH_KEY, DEPLOY_HOST в репозитории (через API)
  • Workflow deploy
  • docs/dev/DEPLOY.md — как развернуть руками и откатиться

Анализ

Затрагиваемые файлы

Файл Что меняется
infra/deploy/ новый
.sourcecraft/ci.yaml workflow deploy
docs/dev/DEPLOY.md новый

Ограничения и риски

Не трогать контейнеры и nginx Vobot/meditron. Compose-проект строго -p tgit. Хост режет часть SSH — ретраи обязательны.

Как проверить

Мерж в main → CI деплоит → ssh vobot docker ps | grep tgit → бот отвечает; cat /srv/tgit/app/REVISION = sha.


Лог выполнения

Перенесено из SourceCraft: https://sourcecraft.dev/rogachevegorushka/tgit/issues/12

2026-10-16

  • Цель уточнена: CD на Gitea Actions (.gitea/workflows/deploy.yml, как в Vobot/meditron), SourceCraft отложен. dev → /srv/tgit/dev, main → /srv/tgit/prod (prod — когда появится свой токен бота; один токен = один polling).
  • Репозиторий загрузок на сервере — временно HSE/tgit-uploads в Gitea (deploy key бота добавляется через API); при возврате к SourceCraft меняется только GIT_UPLOADS_URL.
  • Сделано: пользователь tgit-deploy (docker) на хосте Vobot, /srv/tgit/dev + серверный .env (секреты только там), CI-ключ tgit-cd@gitea в authorized_keys и в секретах Gitea (DEPLOY_SSH_KEY, DEPLOY_HOST).
  • infra/deploy/deploy.sh <env> [ref] + remote.sh (атомарная замена app/, app.old для отката, ожидание healthy, REVISION; окружение без .env пропускается). .gitea/workflows/deploy.yml — push dev/main, guard «актуален ли пуш», ключ через env:.
  • Грабли: с сервера api.telegram.org недоступен (ни v4, ни v6) → TELEGRAM_PROXY_URL (тот же прокси, что у meditron; aiohttp-socks). Бот в простое ~190 МБ → лимит 256m → 384m.
  • Ручной деплой: bot healthy @ 526eb56 (dev), Run polling for bot @tgit_duemon_bot. Бот работает с сервера.
  • Репозиторий загрузок на сервере — HSE/tgit-uploads (Gitea), deploy key бота добавлен через API; запись проверена ключом бота с -F /dev/null.
  • docs/dev/DEPLOY.md, ADR-015. Автодеплой по мержу проверится на первом пуше в dev после мержа.
## Описание CD бота по [ARCHITECTURE §6](docs/ARCHITECTURE.md), по образцу meditron (`/srv/ptsr`, `ptsr-deploy`). Хост — `vobot` (72.56.247.166), рядом прод Vobot: ресурсы ограничены (~1,9 ГБ RAM свободно). ## Желаемый результат - Пользователь `tgit-deploy` (группа docker), каталог `/srv/tgit` с `.env` только на сервере. - `infra/deploy/deploy.sh [ref]` — тот же скрипт руками и из CI; хост — `DEPLOY_HOST`. - Workflow `deploy` в `.sourcecraft/ci.yaml` на push в `main` после `check`; smoke — healthcheck контейнера. - Деплой на другой сервер = другой `DEPLOY_HOST`, без правки кода. ## Подзадачи - [x] Подготовка хоста: пользователь, каталог, ключ CI в `authorized_keys` - [x] `infra/deploy/deploy.sh` (git archive → scp → атомарная замена → compose up → healthcheck → REVISION, ретраи SSH) - [x] `infra/deploy/docker-compose.server.yml` — лимиты, `restart: unless-stopped`, ротация логов - [x] Секреты `DEPLOY_SSH_KEY`, `DEPLOY_HOST` в репозитории (через API) - [x] Workflow `deploy` - [x] `docs/dev/DEPLOY.md` — как развернуть руками и откатиться ## Анализ ### Затрагиваемые файлы | Файл | Что меняется | |------|--------------| | `infra/deploy/` | новый | | `.sourcecraft/ci.yaml` | workflow deploy | | `docs/dev/DEPLOY.md` | новый | ### Ограничения и риски Не трогать контейнеры и nginx Vobot/meditron. Compose-проект строго `-p tgit`. Хост режет часть SSH — ретраи обязательны. ## Как проверить Мерж в `main` → CI деплоит → `ssh vobot docker ps | grep tgit` → бот отвечает; `cat /srv/tgit/app/REVISION` = sha. --- ## Лог выполнения > Перенесено из SourceCraft: https://sourcecraft.dev/rogachevegorushka/tgit/issues/12 ### 2026-10-16 - Цель уточнена: CD на **Gitea Actions** (`.gitea/workflows/deploy.yml`, как в Vobot/meditron), SourceCraft отложен. `dev` → `/srv/tgit/dev`, `main` → `/srv/tgit/prod` (prod — когда появится свой токен бота; один токен = один polling). - Репозиторий загрузок на сервере — временно `HSE/tgit-uploads` в Gitea (deploy key бота добавляется через API); при возврате к SourceCraft меняется только `GIT_UPLOADS_URL`. - Сделано: пользователь `tgit-deploy` (docker) на хосте Vobot, `/srv/tgit/dev` + серверный `.env` (секреты только там), CI-ключ `tgit-cd@gitea` в `authorized_keys` и в секретах Gitea (`DEPLOY_SSH_KEY`, `DEPLOY_HOST`). - `infra/deploy/deploy.sh <env> [ref]` + `remote.sh` (атомарная замена `app/`, `app.old` для отката, ожидание healthy, `REVISION`; окружение без `.env` пропускается). `.gitea/workflows/deploy.yml` — push `dev`/`main`, guard «актуален ли пуш», ключ через `env:`. - **Грабли:** с сервера `api.telegram.org` недоступен (ни v4, ни v6) → `TELEGRAM_PROXY_URL` (тот же прокси, что у meditron; `aiohttp-socks`). Бот в простое ~190 МБ → лимит 256m → 384m. - Ручной деплой: `bot healthy @ 526eb56 (dev)`, `Run polling for bot @tgit_duemon_bot`. Бот работает с сервера. - Репозиторий загрузок на сервере — `HSE/tgit-uploads` (Gitea), deploy key бота добавлен через API; запись проверена ключом бота с `-F /dev/null`. - `docs/dev/DEPLOY.md`, ADR-015. Автодеплой по мержу проверится на первом пуше в `dev` после мержа.
Eleboba added this to the M2 · CD и мониторинг milestone 2026-10-12 19:34:01 +03:00
Eleboba added the infrafeaturesize/1 labels 2026-10-12 19:34:01 +03:00
Eleboba self-assigned this 2026-10-12 19:34:01 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: HSE/tgit#12