Каждый 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
35 lines
2.0 KiB
Docker
35 lines
2.0 KiB
Docker
# Контейнер бэкапов: restic (дедупликация, шифрование, сжатие zstd) + расписание supercronic.
|
|
# Снимает консистентную копию SQLite и файлы томов приложения, хранит снимки локально (том
|
|
# backup-data) и на VPS (SFTP). Управление — команда fs-backup (см. deploy/backup/README.md).
|
|
FROM restic/restic:0.19.1
|
|
|
|
# sqlite — консистентная копия и проверка БД; supercronic — cron для контейнера без root;
|
|
# tini — корректные сигналы; curl — отчёты и бот в Telegram (#83).
|
|
# jq, openssh-client, busybox (wget, flock, tar) уже есть в базе.
|
|
RUN apk add --no-cache sqlite supercronic tini curl
|
|
|
|
# Тот же uid, что у appuser в образе приложения (10001): файлы после restore получают
|
|
# правильного владельца, а -wal/-shm SQLite никогда не достаются root.
|
|
RUN addgroup -g 10001 fsbackup \
|
|
&& adduser -D -u 10001 -G fsbackup -h /home/fsbackup fsbackup \
|
|
&& mkdir -p /fs/uploads /fs/achievements /fs-db /backup/repo /backup/state /backup/cache /import \
|
|
&& chown -R 10001:10001 /fs /fs-db /backup /import /home/fsbackup
|
|
|
|
COPY fs-backup.sh /usr/local/bin/fs-backup
|
|
COPY entrypoint.sh /usr/local/bin/fs-backup-entrypoint
|
|
RUN sed -i 's/\r$//' /usr/local/bin/fs-backup /usr/local/bin/fs-backup-entrypoint \
|
|
&& chmod 755 /usr/local/bin/fs-backup /usr/local/bin/fs-backup-entrypoint
|
|
|
|
ENV HOME=/home/fsbackup \
|
|
RESTIC_CACHE_DIR=/backup/cache \
|
|
TZ=Europe/Moscow
|
|
|
|
USER 10001:10001
|
|
WORKDIR /home/fsbackup
|
|
|
|
# Здоров = последний успешный бэкап свежее BACKUP_MAX_AGE_HOURS (в каждом репозитории).
|
|
HEALTHCHECK --interval=10m --timeout=60s --start-period=2h --retries=1 \
|
|
CMD ["fs-backup", "health"]
|
|
|
|
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/fs-backup-entrypoint"]
|