Update wiki page 'Deployment' in Russian

2026-04-24 11:05:49 +03:00
parent a43c12e52d
commit cb028513d5
+47 -47
@@ -2,34 +2,34 @@
Текущий production-like способ запуска — Docker Compose из `compose.yaml`. Текущий production-like способ запуска — Docker Compose из `compose.yaml`.
## Сервисы Compose ## Сервисы Docker Compose
`db`: `db`:
- image: `postgres:17-alpine`; - образ: `postgres:17-alpine`;
- database: `gmrelay_db`; - база данных: `gmrelay_db`;
- user: `gmrelay`; - пользователь: `gmrelay`;
- password: `${POSTGRES_PASSWORD}`; - пароль: `${POSTGRES_PASSWORD}`;
- volume: `pgdata`; - volume: `pgdata`;
- healthcheck: `pg_isready`. - healthcheck: `pg_isready`.
`bot`: `bot`:
- image: `git.codeanddice.ru/toutsu/gmrelay-bot:1.1.5`; - образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.1.5`;
- depends on healthy `db`; - запускается после успешного healthcheck сервиса `db`;
- env: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`. - переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`.
`web`: `web`:
- image: `git.codeanddice.ru/toutsu/gmrelay-web:1.1.5`; - образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.1.5`;
- depends on healthy `db`; - запускается после успешного healthcheck сервиса `db`;
- env: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`; - переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`;
- port: `${GMRELAY_WEB_PORT:-8080}:8080`; - порт: `${GMRELAY_WEB_PORT:-8080}:8080`;
- volume: `web_keys` for ASP.NET Data Protection keys. - volume: `web_keys` для ключей ASP.NET Data Protection.
## Environment variables ## Переменные окружения
Required: Обязательные:
```env ```env
TELEGRAM_BOT_TOKEN=... TELEGRAM_BOT_TOKEN=...
@@ -37,7 +37,7 @@ TELEGRAM_BOT_USERNAME=...
POSTGRES_PASSWORD=... POSTGRES_PASSWORD=...
``` ```
Optional: Опциональные:
```env ```env
GMRELAY_WEB_PORT=8080 GMRELAY_WEB_PORT=8080
@@ -45,69 +45,69 @@ POSTGRES_VOLUME_NAME=game_pgdata
WEB_KEYS_VOLUME_NAME=gmrelay_web_keys WEB_KEYS_VOLUME_NAME=gmrelay_web_keys
``` ```
Do not commit real `.env` files. Реальный `.env` нельзя коммитить в репозиторий.
## Start and stop ## Запуск и остановка
Start: Запустить сервисы:
```bash ```bash
docker compose up -d docker compose up -d
``` ```
View logs: Посмотреть логи:
```bash ```bash
docker compose logs -f bot docker compose logs -f bot
docker compose logs -f web docker compose logs -f web
``` ```
Stop services but keep volumes: Остановить сервисы, сохранив volumes:
```bash ```bash
docker compose down docker compose down
``` ```
Stop and remove data volumes only when intentionally resetting the environment: Остановить сервисы и удалить volumes стоит только при осознанном сбросе окружения:
```bash ```bash
docker compose down -v docker compose down -v
``` ```
## Data persistence ## Хранение данных
- PostgreSQL data is stored in the `pgdata` volume. - Данные PostgreSQL хранятся в volume `pgdata`.
- Web authentication/data-protection keys are stored in the `web_keys` volume. - Ключи 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; - в forum-группах боту нужны права управления темами;
- for deleting source command messages or forum topics, bot needs sufficient admin permissions; - для удаления исходных командных сообщений или forum topics боту нужны достаточные права администратора;
- for Telegram Login Widget, configure the web domain in `@BotFather`. - для 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. - При старте бот логирует PostgreSQL connection string через `SecretRedactor`, чтобы не раскрывать пароль.
- Web cookies are `HttpOnly`, `SecurePolicy.Always`, `SameSite.Strict`, with 7-day sliding expiration. - Web-cookie настроены как `HttpOnly`, `SecurePolicy.Always`, `SameSite.Strict`, со sliding expiration на 7 дней.
- Web responses add `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy`, and `Permissions-Policy` headers. - Web-ответы добавляют заголовки `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy` и `Permissions-Policy`.
- Access control for group/session data is enforced by Telegram ID comparison with `game_groups.gm_telegram_id`. - Доступ к данным групп и сессий проверяется сравнением Telegram ID пользователя с `game_groups.gm_telegram_id`.
## Upgrade checklist ## Чеклист обновления
1. Update image tags in `compose.yaml`. 1. Обновить теги образов в `compose.yaml`.
2. Confirm `.env` still has required variables. 2. Проверить, что в `.env` есть все обязательные переменные.
3. Run `docker compose pull` if images are available remotely. 3. Выполнить `docker compose pull`, если образы опубликованы в registry.
4. Run `docker compose up -d`. 4. Выполнить `docker compose up -d`.
5. Check `docker compose logs -f bot` for migrations and Telegram startup. 5. Проверить `docker compose logs -f bot`: миграции, подключение к БД и старт Telegram polling.
6. Check web login and one read-only group/session page before using edits. 6. Проверить вход в web-панель и одну read-only страницу группы или сессии до редактирования данных.