Commit Graph
15 Commits
Author SHA1 Message Date
NotBigGhost 2f0b22ccd4 Merge pull request 'Уведомление о бэкапах в тг боте (#83)' (#97) from issue-83-backup-telegram into dev
Reviewed-on: #97
2026-09-30 13:02:05 +03:00
NotBigGhost 89cbb81be7 Merge pull request 'Баг ограничения ресурсов пая (#67)' (#96) from issue-67-pi-memory-cgroup into dev
Reviewed-on: #96
2026-09-30 13:00:43 +03:00
NotBigGhostandClaude Opus 5 5b89dc9d2f Бэкапы: отчёты и команды в Telegram-боте
Каждый run и verify шлёт в чаты BACKUP_TELEGRAM_CHAT_ID одно сообщение: успех
со сводкой (игроки/партии, по репозиторию снимок, число снимков, размер) или
сбой с причиной — в том числе ранний отказ (нет пароля, занят lock, битая БД):
обработчик EXIT берёт текст последнего die. Недоступный Telegram бэкап не ломает.

Бот-слушатель (fs-backup telegram bot, long polling, стартует из entrypoint в
фоне) отвечает на /backups (хранящиеся снимки), /status и /help только чатам из
белого списка; чужие chat id пишет в журнал. telegram chats — узнать свой id,
telegram test — проверить связь. Токен по умолчанию — TELEGRAM_BOT_TOKEN
приложения (тот же бот), BACKUP_TELEGRAM_BOT_TOKEN переопределяет. В образ
добавлен curl. Настройка — deploy/backup/README.md, раздел 10. #83

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
2026-09-19 02:38:49 +03:00
NotBigGhostandClaude Opus 5 00bd3c72b6 Деплой: как включить memory cgroup на Pi, иначе mem_limit не действует
На Pi при каждом `docker compose up` контейнеры пишут «Your kernel does not
support memory limit capabilities…». Причина — прошивка Raspberry Pi добавляет
ядру cgroup_disable=memory: контроллера memory нет, и Docker молча игнорирует
mem_limit (app 512m, tunnel 64m, backup 384m).

deploy/pi/README.md: проверка, дописывание cgroup_enable=memory в cmdline.txt с
бэкапом, перезагрузка и контроль; строка в «Если что-то не так». Пояснения
у mem_limit в compose и в .env.example. #67

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
2026-09-19 02:21:19 +03:00
NotBigGhostandClaude Opus 5 cff48f7cc7 Безопасность: опубликованный dev не стартует с дефолтными секретами
При LOCAL_PUBLIC=vps dev доступен на forbidden-stars.ru, а fail-fast по
SECRET_KEY/ADMIN_PASSWORD работал только в production: снаружи оставались
общеизвестный ключ JWT (подделка любого токена, включая админский) и пароль
админки. Теперь проверка срабатывает при is_published — у прода и у dev на
домене; на нём же cookie_secure.

Dev-инструменты и Swagger на опубликованном dev остаются (решение владельца):
лаунчеры и лог старта перечисляют, что открыто любому посетителю. В .env.example —
что открывает vps и что у dev и prod должны быть разные SECRET_KEY. #69

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
2026-09-18 23:52:25 +03:00
NotBigGhost 101c457f7e удаление test-контура (дополнение) 2026-09-14 20:50:40 +03:00
NotBigGhostandClaude Opus 5 e2d729d339 Бэкап: сервис backup в compose прода и тест-клона, .env.example
docker-compose.yml: сервис backup (образ из реестра, явный environment только с BACKUP_*,
тома данных + backup-data), предупреждение про down -v. docker-compose.test.yml: тот же
образ локальной сборкой, только локальный репозиторий, без расписания, BACKUP_VPS_HOST
принудительно пуст. .env.example: новый блок BACKUP_* (пароль, расписание, хранение,
сжатие, SFTP-пользователь fsbackup — системный backup в Debian/Ubuntu уже занят, ключ
base64, адрес Pi для скриптов ПК); удалены BACKUP_VPS_KEY и BACKUP_KEEP_LOCAL/REMOTE.
build-push: сообщения про третий образ (bake подхватывает сервис сам). #64

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jBxs9nBCk5nBdTLzcGz91
2026-09-14 01:04:12 +03:00
NotBigGhostandClaude Opus 4.8 d81f5d8964 Доки Pi: полная инструкция с нуля под деплой из 2 файлов; ключ туннеля генерируется на Pi
- deploy/pi/README: пошагово от чистого Pi (Docker → SSH-ключ туннеля на самом Pi → 2 файла → up),
  с объяснением назначения ключа и кодирования в base64 (TUNNEL_KEY_B64).
- .env.example/README: PowerShell-команда base64 через Resolve-Path (абсолютный путь — иначе
  [IO.File]::ReadAllBytes искал относительно домашнего каталога .NET и падал).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 22:00:10 +03:00
NotBigGhostandClaude Opus 4.8 029a043bfc Прод на Pi: деплой из 2 файлов (compose + .env), ключ туннеля из .env
Теперь на Pi нужны только docker-compose.yml и .env — без репозитория, сборки и файла ключа.

- docker-compose.yml: pull_policy: always (образы тянутся из реестра, сборка не запускается);
  ключ туннеля больше не монтируется томом — берётся из .env (TUNNEL_KEY_B64, base64);
  у VPS_TUNNEL_HOST убран :? (ломал бы buildx bake на ПК, где переменная не задана) — проверка
  обязательности перенесена в tunnel.sh (рантайм).
- deploy/tunnel/tunnel.sh: приватный ключ из TUNNEL_KEY_B64 (base64) с фолбэком на смонтированный
  /key/id_tunnel (для dev/test, где репозиторий на хосте).
- .env.example: TUNNEL_KEY_B64 + как сгенерировать base64 (Git Bash / PowerShell).
- deploy/pi/README: полный поток «голый Pi → 2 файла»: Docker, curl compose+.env из Gitea, up;
  обновление, автозапуск, бэкап как опция.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 21:48:40 +03:00
NotBigGhostandClaude Opus 4.8 1a61b05923 Прод-деплой через Gitea-реестр: arm64-образы собираются на ПК, Pi делает pull
- docker-compose.yml: image у app и tunnel → путь реестра ${IMAGE_REGISTRY}/...:${IMAGE_TAG}
  (build: оставлен фолбэком для сборки на Pi). Тома/настройки прежние.
- scripts/build-push.sh: buildx bake под linux/arm64 + push обоих образов в реестр (запуск на ПК).
- .env.example: блок ОБРАЗЫ ПРОДА (IMAGE_REGISTRY=gitea.arseniev.info/notbigghost, IMAGE_TAG=latest).
- deploy/pi/README: запуск/обновление через docker compose pull; альтернатива — сборка на Pi;
  заметка про HTTPS-реестр / insecure-registries.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 00:16:04 +03:00
NotBigGhostandClaude Opus 4.8 b3db5a4047 Прод на Pi: качественный единый compose, все настройки в .env
- docker-compose.yml: слот туннеля параметризован (${VPS_TUNNEL_PORT:-9000}), VPS_TUNNEL_HOST
  стал обязательным (${...:?}), лимиты ресурсов из .env (APP_MEM_LIMIT/APP_CPUS),
  stop_grace_period 30s (чек-пойнт WAL SQLite), security_opt no-new-privileges на обоих сервисах;
  healthcheck/логирование/тома сохранены (имена томов не менялись — данные не осиротеют).
- .env.example: VPS_TUNNEL_PORT по умолчанию НЕ задаётся (каждый контур берёт свой слот:
  dev→9001, prod→9000, test→9001); добавлены ADMIN_NICKNAME, DEV/PROD_ACHIEVEMENTS_DIR,
  APP_MEM_LIMIT/APP_CPUS.
- deploy/pi/README: чек-лист .env для Pi; запуск одним `docker compose up -d --build`.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 23:46:33 +03:00
NotBigGhostandClaude Opus 4.8 32c74abc43 Бэкап: полный оффсайт-бэкап прода на VPS (БД + uploads + achievements) + восстановление
- scripts/backup.sh: консистентный снимок SQLite (.backup) + архив fs_<TS>.tar.gz с uploads и
  achievements в backups/, локальная ротация; при заданном BACKUP_VPS_HOST — push на VPS (scp
  отдельным ключом/юзером) с удалённой ротацией. Настройки читаются из .env (BACKUP_*).
- scripts/restore.sh: восстановление архива в прод (stop app → очистка тома → docker cp → start).
- .env.example: блок BACKUP_* (host/user/dir/key/keep). .gitignore: id_backup* (ключ бэкапа).
- deploy/pi/README, deploy/vps/README: настройка ключа и юзера backup, /srv/fs-backups, cron, restore.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 23:36:58 +03:00
NotBigGhost 7e8b748caf Правки локального размещения дева, перенос тунеля в контейнер 2026-06-17 04:27:11 +03:00
NotBigGhost b04fbb2e17 Завершена настройка домена для дева, теста и прода. Соединение через ssh-туннель 2026-06-16 19:15:54 +03:00
NotBigGhost 56b5d09a4d v0.1 - макет интерфейса, аутентификация через логин, аккаунт админа, создание партии в 2 этапа, базовые настройки профиля и группы, переключение между группами, статистика 2026-06-16 17:41:06 +03:00