бекапирование sqlite в minio

services:
  sqlite_backup:
    image: git.realmanual.ru/pub/sqlite-backup-s3
    container_name: sqlite_backup
    restart: always
    volumes:
      - ./var/lib/data/:/data
    environment:
      - DB_FILE
      - CRONTAB
      - DELETE_AFTER
      - TZ
      - MINIO_PATH
      - MINIO_ACCOUNT_ID
      - MINIO_APPLICATION_KEY
      - MINIO_ENDPOINT
      - MINIO_LOCATION
      - HEALTHCHECK_URL
      - HEALTHCHECK_UUID

пример .env

DB_FILE=/data/db.sqlite
CRONTAB="00 06 * * *"
DELETE_AFTER=10
TZ=Asia/Novosibirsk
MINIO_PATH=myminio://sqlite/master/
MINIO_ACCOUNT_ID=account
MINIO_APPLICATION_KEY=key
MINIO_ENDPOINT=https://s3.domain.ru
MINIO_LOCATION=ru-nsk

# необязательно: пинг в healthchecks.io (в т.ч. self-hosted)
HEALTHCHECK_URL=https://hc.domain.ru/ping
HEALTHCHECK_UUID=00000000-0000-0000-0000-000000000000
  1. myminio - системно! не менять
  2. проверьте настройки локации, не должно быть пусто
  3. DELETE_AFTER - в днях

Healthchecks

Если HEALTHCHECK_URL пуст — пинги не отправляются, бекап работает как обычно.

Итоговый адрес: ${HEALTHCHECK_URL}/${HEALTHCHECK_UUID}

Момент Запрос
старт бекапа .../${HEALTHCHECK_UUID}/start
дамп снят, проверен PRAGMA integrity_check, запакован, залит в s3, размер в s3 сверен с локальным, старое удалено .../${HEALTHCHECK_UUID}
любая ошибка на любом шаге .../${HEALTHCHECK_UUID}/fail

Для self-hosted инстанса HEALTHCHECK_URL — это адрес его ping-эндпоинта, например https://hc.domain.ru/ping.

Как передаётся окружение в cron

crond из busybox запускает джобы с пустым окружением, поэтому entrypoint.sh сохраняет env контейнера в /tmp/container.env (права 600), а cron-запись вызывает /scripts/backup.sh --from-cron, который его подгружает. Ручной запуск (docker exec ... /scripts/backup.sh) использует то окружение, с которым его вызвали.

S
Description
backup any db sqlite to s3 (minio) for cron
Readme
112 KiB
Languages
Shell 95%
Dockerfile 5%