- backup/Dockerfile: Alpine 3.21 + postgresql-client + dcron - backup/backup.sh: pg_dump -> MD5-Checksum-Vergleich (skip bei unveränderter DB) -> gzip-komprimiertes Backup mit Timestamp -> Rotation: älteste .sql.gz löschen bis Gesamtgröße < 1 GB - docker-compose.yml: neuer Service 'backup', Volume 'backup_data' - Cronjob: täglich 03:00 UTC
14 lines
437 B
Docker
14 lines
437 B
Docker
FROM alpine:3.21
|
|
|
|
# Install PostgreSQL client and dcron (lightweight cron daemon)
|
|
RUN apk add --no-cache postgresql-client dcron
|
|
|
|
COPY backup.sh /usr/local/bin/backup.sh
|
|
RUN chmod +x /usr/local/bin/backup.sh
|
|
|
|
# Crontab: run backup daily at 03:00 UTC
|
|
RUN echo "0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1" \
|
|
> /etc/crontabs/root
|
|
|
|
# crond -f: run in foreground; -l 2: log level notice
|
|
CMD ["crond", "-f", "-l", "2"]
|