# Развёртывание Клонируем репозиторий и поднимаем контур Compose-ом. Контуры `test` и `prod` разделяются именем проекта (`-p`) и файлом окружения (`--env-file`) — у каждого свои БД и volume'ы, на одной машине не пересекаются. ## 1. Клонировать ```bash git clone ssh://git@:2222/mpakobecex/DispelEvilBot.git cd DispelEvilBot ``` ## 2. Подготовить окружение ```bash cp env/test.env.example env/test.env # заполнить: BOT_TOKEN, DB_PASSWORD, тестовые чаты (TEST_CHAT_ID/PROD_CHAT_ID), ADMIN_IDS ``` ## 3. Логин в registry (если пакет приватный) ```bash docker login git.mpakosrv.ru -u mpakobecex -p <ТОКЕН с read:package> ``` Если пакет сделать публичным — логин не нужен. ## 4. Запуск ```bash # тестовый контур docker compose -p test --env-file env/test.env -f docker-compose.prod.yml up -d # прод (когда понадобится) cp env/prod.env.example env/prod.env docker compose -p prod --env-file env/prod.env -f docker-compose.prod.yml up -d ``` Логи: ```bash docker compose -p test --env-file env/test.env -f docker-compose.prod.yml logs -f ``` ## Что происходит при старте 1. `postgres` поднимается и проходит healthcheck; 2. `migrate` (**Flyway**) накатывает миграции из `sql/` — для пустой БД с нуля; 3. `bot` стартует (`Запуск DispelEvilBot v<версия> (APP_ENV=...)`). ## Обновление и откат ```bash # обновление: поменять IMAGE_TAG в env/<контур>.env, затем docker compose -p <контур> --env-file env/<контур>.env -f docker-compose.prod.yml pull docker compose -p <контур> --env-file env/<контур>.env -f docker-compose.prod.yml up -d ``` Откат — вернуть предыдущий `IMAGE_TAG` (например, commit-sha) и повторить. ## Контуры | Контур | env-файл | БД | APP_ENV | Бот | | --- | --- | --- | --- | --- | | test | `env/test.env` | `dispel_evil_test` | `dev` | тестовый | | prod | `env/prod.env` | `dispel_evil` | `prod` | боевой | ## Переменные окружения См. `env/prod.env.example` / `env/test.env.example`. ## Перенос данных на прод (позже, короткое окно простоя) 1. Остановить старого бота. 2. `pg_dump -Fc -f dump.pgc <старая_бд>`. 3. Поднять прод-контур (миграции создадут чистую схему). 4. Загрузить данные: `pg_restore --data-only --disable-triggers -d dispel_evil dump.pgc`. 5. Сверить: число пользователей, `SUM(money.amount)`, число сообщений. 6. Переключить бота, проверить команды. Бэкап старой БД обязателен. Дубли в `tg_users`/`de_users`/`unsubscribe` при загрузке нужно устранить до создания PK (миграция `V12` делает дедуп, но при загрузке поверх миграций дедуп — вручную).