# Контейнер бэкапов: 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 — корректные сигналы. jq, openssh-client, busybox (wget, flock, tar) уже есть в базе.
RUN apk add --no-cache sqlite supercronic tini

# Тот же 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"]
