From b53af72040321f58234f9210dde19c44117411a3 Mon Sep 17 00:00:00 2001 From: Toutsu Date: Thu, 21 May 2026 18:46:31 +0300 Subject: [PATCH] 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" --- ...%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.md | 117 ------------------ 1 file changed, 117 deletions(-) delete mode 100644 %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.md diff --git a/%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.md b/%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.md deleted file mode 100644 index 163a84c..0000000 --- a/%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.md +++ /dev/null @@ -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.