Delete page "%D0%A0%D0%B0%D0%B7%D0%B2%D1%91%D1%80%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"
@@ -1,117 +0,0 @@
|
||||
# Развёртывание
|
||||
|
||||
Текущий production-like способ запуска GM-Relay **v1.9.9** — Docker Compose из `compose.yaml`.
|
||||
|
||||
## Сервисы Docker Compose
|
||||
|
||||
`db`:
|
||||
|
||||
- образ: `postgres:17-alpine`;
|
||||
- база данных: `gmrelay_db`;
|
||||
- пользователь: `gmrelay`;
|
||||
- пароль: `${POSTGRES_PASSWORD}`;
|
||||
- volume: `pgdata`;
|
||||
- healthcheck: `pg_isready`.
|
||||
|
||||
`bot`:
|
||||
|
||||
- образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.9.9`;
|
||||
- запускается после успешного healthcheck сервиса `db`;
|
||||
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__MiniAppUrl`.
|
||||
|
||||
`web`:
|
||||
|
||||
- образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.9.9`;
|
||||
- запускается после успешного healthcheck сервиса `db`;
|
||||
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`, `Telegram__MiniAppUrl`;
|
||||
- порт: `${GMRELAY_WEB_PORT:-8080}:8080`;
|
||||
- volume: `web_keys` для ключей ASP.NET Data Protection.
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
Обязательные:
|
||||
|
||||
```env
|
||||
TELEGRAM_BOT_TOKEN=...
|
||||
TELEGRAM_BOT_USERNAME=...
|
||||
POSTGRES_PASSWORD=...
|
||||
```
|
||||
|
||||
Опциональные:
|
||||
|
||||
```env
|
||||
GMRELAY_WEB_PORT=8080
|
||||
TELEGRAM_MINI_APP_URL=https://your-domain.example/miniapp
|
||||
POSTGRES_VOLUME_NAME=game_pgdata
|
||||
WEB_KEYS_VOLUME_NAME=gmrelay_web_keys
|
||||
```
|
||||
|
||||
Реальный `.env` нельзя коммитить в репозиторий.
|
||||
|
||||
## Запуск и остановка
|
||||
|
||||
Запустить сервисы:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Посмотреть логи:
|
||||
|
||||
```bash
|
||||
docker compose logs -f bot
|
||||
docker compose logs -f web
|
||||
```
|
||||
|
||||
Остановить сервисы, сохранив volumes:
|
||||
|
||||
```bash
|
||||
docker compose down
|
||||
```
|
||||
|
||||
Остановить сервисы и удалить volumes:
|
||||
|
||||
```bash
|
||||
docker compose down -v
|
||||
```
|
||||
|
||||
## Хранение данных
|
||||
|
||||
- Данные PostgreSQL хранятся в volume `pgdata`.
|
||||
- Ключи web-аутентификации и Data Protection хранятся в volume `web_keys`.
|
||||
|
||||
`web_keys` важен для cookie-аутентификации ASP.NET Data Protection. Если ключи не сохранять между перезапусками контейнера, существующие auth-cookie могут стать недействительными.
|
||||
|
||||
## Требования Telegram
|
||||
|
||||
Для работы в группе:
|
||||
|
||||
- бот должен быть участником группы;
|
||||
- в forum-группах боту нужны права управления темами;
|
||||
- для удаления исходных командных сообщений или forum topics боту нужны достаточные права администратора;
|
||||
- для Telegram Login Widget нужно настроить web-домен в `@BotFather`;
|
||||
- для Telegram Mini App нужно настроить menu button на HTTPS URL `/miniapp`, совпадающий с `TELEGRAM_MINI_APP_URL`.
|
||||
|
||||
## Поведение миграций
|
||||
|
||||
Бот применяет DbUp-миграции при старте до обработки Telegram updates. Начиная с версии `1.8.0` доступна миграция `V010__add_campaign_templates.sql`: она создаёт таблицу `campaign_templates` для Web-шаблонов кампаний и быстрого создания повторяющихся batch-расписаний. Версия `1.9.9` не добавляет новую миграцию: релиз добавляет функциональный smoke-тест Telegram-сценария, обновляет версии образов и не меняет схему БД. После обновления стоит проверить логи `bot`, чтобы убедиться, что миграции применились без ошибок.
|
||||
|
||||
## Безопасность
|
||||
|
||||
- При старте бот логирует 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`.
|
||||
- Доступ к данным групп и сессий проверяется через `group_managers`: owner и co-GM могут управлять расписанием, а назначать co-GM может только owner.
|
||||
|
||||
## Чеклист обновления
|
||||
|
||||
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 страницу группы или сессии до редактирования данных.
|
||||
7. Проверить `/miniapp` из Telegram: пользователь owner/co-GM должен попасть в мобильный dashboard без повторного открытия Mini App после входа; если сработал fallback `/login`, callback Telegram Login Widget должен сразу вернуть пользователя на `/` в текущем WebView.
|
||||
8. На телефоне проверить, что верхняя навигация и карточки dashboard начинаются ниже системного статус-бара и панели Telegram; Mini App использует Telegram `safeAreaInset` / `contentSafeAreaInset` и browser `env(safe-area-inset-*)` fallback.
|
||||
9. Проверить Telegram-группу: новый `/newsession` с фото или `Картинка:` публикует обложку перед расписанием, а основное сообщение содержит только кнопки записи и выхода; GM-действия доступны через `/listsessions`.
|
||||
10. Для регрессионной проверки без внешнего Telegram API выполнить `dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"`: начиная с v1.9.9 набор включает smoke обещаний лендинга для Telegram.
|
||||
Reference in New Issue
Block a user