--- services: pgbackup: image: postgres:18-alpine container_name: pgbackup restart: always environment: PGPASSWORD: ${POSTGRES_ADMIN_PASSWORD} POSTGRES_HOST: postgres POSTGRES_USER: ${POSTGRES_ADMIN_USER} DB_LIST: ${BKP_DB_LIST} TIMEZONE: ${TIMEZONE} volumes: - ./backups:/backups - ./scripts/backup/pg-dump.sh:/pg-dump.sh - ./scripts/backup/pg-dump.cron:/etc/crontabs/root entrypoint: ["/bin/sh", "-c", "# map host /backups ownership to container backup user\nHOST_UID=$$(stat -c '%u' /backups 2>/dev/null || echo 1000) && HOST_GID=$$(stat -c '%g' /backups 2>/dev/null || echo 1000) && addgroup -g \"$$HOST_GID\" backup 2>/dev/null || true && adduser -D -u \"$$HOST_UID\" -G backup backup 2>/dev/null || true && mkdir -p /var/log /backups && chown -R \"$$HOST_UID\":\"$$HOST_GID\" /var/log /backups 2>/dev/null || true && chmod +x /pg-dump.sh && chown root:root /etc/crontabs/root 2>/dev/null || true && crond -f"] backup-manager: image: alpine:latest container_name: backup-manager restart: always depends_on: - pgbackup environment: BACKUP_RETENTION_COUNT: ${BKP_RETENTION_COUNT} BACKUP_RETENTION_DAYS: ${BKP_RETENTION_DAYS} TIMEZONE: ${TIMEZONE} volumes: - ./backups:/backups - type: volume source: odoo-db-data target: /odoo_db_data read_only: true - type: volume source: odoo-config target: /odoo_config read_only: true - type: volume source: gitea_data target: /gitea_data read_only: true - type: volume source: opencloud-data target: /opencloud_data read_only: true - type: volume source: opencloud-config target: /opencloud_config read_only: true - ./scripts/backup/manage-backups.sh:/manage-backups.sh - ./scripts/backup/backup-manager.cron:/etc/crontabs/root entrypoint: ["/bin/sh", "-c", "# install bsdtar for xattr-aware archives\napk add --no-cache libarchive-tools attr >/dev/null \n# map host /backups ownership to container backup user\nHOST_UID=$$(stat -c '%u' /backups 2>/dev/null || echo 1000) && HOST_GID=$$(stat -c '%g' /backups 2>/dev/null || echo 1000) && addgroup -g \"$$HOST_GID\" backup 2>/dev/null || true && adduser -D -u \"$$HOST_UID\" -G backup backup 2>/dev/null || true && mkdir -p /var/log /backups && chown -R \"$$HOST_UID\":\"$$HOST_GID\" /var/log /backups 2>/dev/null || true && chmod +x /manage-backups.sh && chown root:root /etc/crontabs/root 2>/dev/null || true && crond -f"]