8
Развёртывание
Toutsu edited this page 2026-04-27 14:58:56 +03:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Развёртывание

Текущий 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.

Чеклист обновления

  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 страницу группы или сессии до редактирования данных.