diff --git a/Deployment.md b/Deployment.md index 89d51dd..77701c8 100644 --- a/Deployment.md +++ b/Deployment.md @@ -2,34 +2,34 @@ Текущий production-like способ запуска — Docker Compose из `compose.yaml`. -## Сервисы Compose +## Сервисы Docker Compose `db`: -- image: `postgres:17-alpine`; -- database: `gmrelay_db`; -- user: `gmrelay`; -- password: `${POSTGRES_PASSWORD}`; +- образ: `postgres:17-alpine`; +- база данных: `gmrelay_db`; +- пользователь: `gmrelay`; +- пароль: `${POSTGRES_PASSWORD}`; - volume: `pgdata`; - healthcheck: `pg_isready`. `bot`: -- image: `git.codeanddice.ru/toutsu/gmrelay-bot:1.1.5`; -- depends on healthy `db`; -- env: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`. +- образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.1.5`; +- запускается после успешного healthcheck сервиса `db`; +- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`. `web`: -- image: `git.codeanddice.ru/toutsu/gmrelay-web:1.1.5`; -- depends on healthy `db`; -- env: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`; -- port: `${GMRELAY_WEB_PORT:-8080}:8080`; -- volume: `web_keys` for ASP.NET Data Protection keys. +- образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.1.5`; +- запускается после успешного healthcheck сервиса `db`; +- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`; +- порт: `${GMRELAY_WEB_PORT:-8080}:8080`; +- volume: `web_keys` для ключей ASP.NET Data Protection. -## Environment variables +## Переменные окружения -Required: +Обязательные: ```env TELEGRAM_BOT_TOKEN=... @@ -37,7 +37,7 @@ TELEGRAM_BOT_USERNAME=... POSTGRES_PASSWORD=... ``` -Optional: +Опциональные: ```env GMRELAY_WEB_PORT=8080 @@ -45,69 +45,69 @@ POSTGRES_VOLUME_NAME=game_pgdata WEB_KEYS_VOLUME_NAME=gmrelay_web_keys ``` -Do not commit real `.env` files. +Реальный `.env` нельзя коммитить в репозиторий. -## Start and stop +## Запуск и остановка -Start: +Запустить сервисы: ```bash docker compose up -d ``` -View logs: +Посмотреть логи: ```bash docker compose logs -f bot docker compose logs -f web ``` -Stop services but keep volumes: +Остановить сервисы, сохранив volumes: ```bash docker compose down ``` -Stop and remove data volumes only when intentionally resetting the environment: +Остановить сервисы и удалить volumes стоит только при осознанном сбросе окружения: ```bash docker compose down -v ``` -## Data persistence +## Хранение данных -- PostgreSQL data is stored in the `pgdata` volume. -- Web authentication/data-protection keys are stored in the `web_keys` volume. +- Данные PostgreSQL хранятся в volume `pgdata`. +- Ключи web-аутентификации и Data Protection хранятся в volume `web_keys`. -The `web_keys` volume matters because cookie auth uses ASP.NET Data Protection. Without persistent keys, existing auth cookies may become invalid after container recreation. +`web_keys` важен для cookie-аутентификации ASP.NET Data Protection. Если ключи не сохранять между пересозданиями контейнера, существующие auth-cookie могут стать недействительными. -## Telegram requirements +## Требования Telegram -For group usage: +Для работы в группах: -- bot must be a member of the group; -- for forum groups, bot needs topic management rights; -- for deleting source command messages or forum topics, bot needs sufficient admin permissions; -- for Telegram Login Widget, configure the web domain in `@BotFather`. +- бот должен быть участником группы; +- в forum-группах боту нужны права управления темами; +- для удаления исходных командных сообщений или forum topics боту нужны достаточные права администратора; +- для Telegram Login Widget нужно настроить web-домен в `@BotFather`. -## Migration behavior +## Поведение миграций -The bot applies DbUp migrations on startup before processing Telegram updates. Because migrations are embedded resources in `GmRelay.Bot`, image upgrades can include schema changes. +Бот применяет DbUp-миграции при старте до обработки Telegram updates. Миграции встроены в `GmRelay.Bot` как embedded resources, поэтому обновление Docker-образа может одновременно обновлять и схему БД. -Operationally, check bot logs after an upgrade to verify migration success. +После обновления стоит проверить логи `bot`, чтобы убедиться, что миграции применились без ошибок. -## Security notes +## Безопасность -- Startup logging uses `SecretRedactor` for PostgreSQL connection strings in bot startup logs. -- Web cookies are `HttpOnly`, `SecurePolicy.Always`, `SameSite.Strict`, with 7-day sliding expiration. -- Web responses add `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy`, and `Permissions-Policy` headers. -- Access control for group/session data is enforced by Telegram ID comparison with `game_groups.gm_telegram_id`. +- При старте бот логирует PostgreSQL connection string через `SecretRedactor`, чтобы не раскрывать пароль. +- Web-cookie настроены как `HttpOnly`, `SecurePolicy.Always`, `SameSite.Strict`, со sliding expiration на 7 дней. +- Web-ответы добавляют заголовки `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy` и `Permissions-Policy`. +- Доступ к данным групп и сессий проверяется сравнением Telegram ID пользователя с `game_groups.gm_telegram_id`. -## Upgrade checklist +## Чеклист обновления -1. Update image tags in `compose.yaml`. -2. Confirm `.env` still has required variables. -3. Run `docker compose pull` if images are available remotely. -4. Run `docker compose up -d`. -5. Check `docker compose logs -f bot` for migrations and Telegram startup. -6. Check web login and one read-only group/session page before using edits. \ No newline at end of file +1. Обновить теги образов в `compose.yaml`. +2. Проверить, что в `.env` есть все обязательные переменные. +3. Выполнить `docker compose pull`, если образы опубликованы в registry. +4. Выполнить `docker compose up -d`. +5. Проверить `docker compose logs -f bot`: миграции, подключение к БД и старт Telegram polling. +6. Проверить вход в web-панель и одну read-only страницу группы или сессии до редактирования данных. \ No newline at end of file