Update wiki page 'Deployment' in Russian
+47
-47
@@ -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.
|
||||
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 страницу группы или сессии до редактирования данных.
|
||||
Reference in New Issue
Block a user