Бэкап: сервис 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
This commit is contained in:
2026-09-14 01:04:12 +03:00
co-authored by Claude Opus 5
parent f73316f37f
commit e2d729d339
5 changed files with 107 additions and 15 deletions
+33 -9
View File
@@ -90,16 +90,40 @@ IMAGE_TAG=latest
#APP_MEM_LIMIT=512m
#APP_CPUS=1.5
# ─── БЭКАП (оффсайт-копия на VPS; читает scripts/backup.sh на хосте Pi) ───────
# Полный бэкап (БД + uploads + achievements) кладётся локально в backups/, и — если задан
# BACKUP_VPS_HOST — копируется на VPS (Pi → VPS push, т.к. Pi за CGNAT). Пусто = только локально.
# Ключ бэкапа — deploy/backup/id_backup (в git НЕ идёт); его pubkey → authorized_keys у backup@VPS.
# ─── БЭКАПЫ (контейнер backup: restic; подробно — deploy/backup/README.md) ────
# Снимки БД + uploads + achievements по расписанию: локально на Pi (том backup-data) и —
# если задан BACKUP_VPS_HOST — на VPS по SFTP. Шифрование, дедупликация, сжатие — restic.
#
# Пароль шифрования репозиториев. ПОТЕРЯЕТЕ ПАРОЛЬ — НИ ОДИН БЭКАП НЕ ПРОЧИТАТЬ.
# Сохраните его в менеджер паролей. Пусто = бэкапы отключены. Без символа '$'.
# Сгенерировать: python -c "import secrets;print(secrets.token_urlsafe(32))"
BACKUP_PASSWORD=
# Когда делать бэкап и проверку данных (cron: минута час день месяц день_недели; TZ ниже).
BACKUP_SCHEDULE="0 4 * * *"
BACKUP_VERIFY_SCHEDULE="30 5 * * 0"
BACKUP_TZ=Europe/Moscow
# Сколько хранить: последний снимок каждого дня / недели / месяца.
# Именованные снимки (fs-backup run --tag …) и страховочные pre-restore не удаляются.
BACKUP_KEEP_DAILY=14
BACKUP_KEEP_WEEKLY=8
BACKUP_KEEP_MONTHLY=12
# Сжатие restic: auto (быстрее) | max (плотнее) | off.
BACKUP_COMPRESSION=max
# Контейнер помечается unhealthy, если последний успешный бэкап старше стольких часов.
BACKUP_MAX_AGE_HOURS=30
# Оффсайт-копия на VPS (SFTP). Пусто = только локальная копия на Pi.
BACKUP_VPS_HOST=
BACKUP_VPS_USER=backup
BACKUP_VPS_DIR=/srv/fs-backups
BACKUP_VPS_KEY=deploy/backup/id_backup
BACKUP_KEEP_LOCAL=14
BACKUP_KEEP_REMOTE=30
BACKUP_VPS_USER=fsbackup
BACKUP_VPS_PORT=22
BACKUP_VPS_DIR=/srv/fs-backups/restic
# Приватный SSH-ключ для VPS в base64 одной строкой (как TUNNEL_KEY_B64). На ПК ключ лежит
# в deploy/backup/id_backup (в git НЕ идёт), pubkey — в authorized_keys у fsbackup@VPS.
# PowerShell: [Convert]::ToBase64String([IO.File]::ReadAllBytes((Resolve-Path "deploy\backup\id_backup")))
BACKUP_SSH_KEY_B64=
# Только для ПК (scripts/fs-backup.ps1 / .sh): как зайти на Pi по SSH и где там лежит
# docker-compose.yml прода.
BACKUP_PI_SSH=pi@192.168.1.10
BACKUP_PI_DIR=~/forbidden-stars
# ─── ПРОЧЕЕ ───────────────────────────────────────────────────────────────────
# Часовой пояс приложения (фикс. смещение в часах; МСК = 3)