Развёртывание
Текущий production-like способ запуска GM-Relay v1.7.0 — 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.7.0; - запускается после успешного healthcheck сервиса
db; - переменные окружения:
ConnectionStrings__gmrelaydb,Telegram__BotToken.
web:
- образ:
git.codeanddice.ru/toutsu/gmrelay-web:1.7.0; - запускается после успешного healthcheck сервиса
db; - переменные окружения:
ConnectionStrings__gmrelaydb,Telegram__BotToken,Telegram__BotUsername; - порт:
${GMRELAY_WEB_PORT:-8080}:8080; - volume:
web_keysдля ключей ASP.NET Data Protection.
Переменные окружения
Обязательные:
TELEGRAM_BOT_TOKEN=...
TELEGRAM_BOT_USERNAME=...
POSTGRES_PASSWORD=...
Опциональные:
GMRELAY_WEB_PORT=8080
POSTGRES_VOLUME_NAME=game_pgdata
WEB_KEYS_VOLUME_NAME=gmrelay_web_keys
Реальный .env нельзя коммитить в репозиторий.
Запуск и остановка
Запустить сервисы:
docker compose up -d
Посмотреть логи:
docker compose logs -f bot
docker compose logs -f web
Остановить сервисы, сохранив volumes:
docker compose down
Остановить сервисы и удалить volumes:
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.
Поведение миграций
Бот применяет DbUp-миграции при старте до обработки Telegram updates. В версии 1.7.0 добавлена миграция V009__add_multi_option_reschedule_votes.sql: она создаёт таблицы вариантов и голосов для переноса сессии, а также дедлайн и выбранный вариант в reschedule_proposals. После обновления стоит проверить логи 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.
Чеклист обновления
- Обновить теги образов в
compose.yaml. - Проверить, что в
.envесть все обязательные переменные. - Выполнить
docker compose pull, если образы опубликованы в registry. - Выполнить
docker compose up -d. - Проверить
docker compose logs -f bot: миграции, подключение к БД и старт Telegram polling. - Проверить вход в Web-панель и одну read-only страницу группы или сессии до редактирования данных.