일일 검증형 DB 백업 사이드카를 정식 스택에 추가

This commit is contained in:
Yun Chan 2026-09-01 12:34:14 +09:00
parent c75fda2385
commit b98eecbb36

View file

@ -50,6 +50,47 @@ services:
com.vignette.data-role: database-ssot com.vignette.data-role: database-ssot
networks: [backend] networks: [backend]
db-backup:
# 매일 검증형 custom dump를 ./backups/auto 에 원자적으로 남기고 보존기간을 넘긴
# 파일만 지운다. DB에는 읽기만 수행하며 실패 시 해당 회차 파일을 남기지 않는다.
image: ${VIGNETTE_NAS_POSTGRES_IMAGE:?Immutable NAS PostgreSQL image ID is required}
restart: unless-stopped
depends_on:
db: { condition: service_healthy }
entrypoint:
- sh
- -ceu
- |
while true; do
ts=$$(date +%Y%m%d-%H%M%S)
tmp="/backups/auto/.partial-$${ts}.dump"
out="/backups/auto/vignette-$${ts}.dump"
if PGPASSWORD="$${POSTGRES_PASSWORD}" pg_dump -h db -U "$${POSTGRES_USER}" -d "$${POSTGRES_DB}" -Fc -f "$$tmp" \
&& PGPASSWORD="$${POSTGRES_PASSWORD}" pg_restore -l "$$tmp" > /dev/null; then
mv "$$tmp" "$$out"
echo "backup ok: $$out ($$(wc -c < "$$out") bytes)"
else
rm -f "$$tmp"
echo "backup FAILED at $$ts" >&2
fi
find /backups/auto -name 'vignette-*.dump' -mtime +${VIGNETTE_BACKUP_RETENTION_DAYS:-14} -delete
sleep 86400
done
environment:
POSTGRES_USER: ${POSTGRES_USER:-vignette_owner}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?NAS PostgreSQL owner password is required}
POSTGRES_DB: ${POSTGRES_DB:-vignette}
volumes:
- type: bind
source: ./backups/auto
target: /backups/auto
security_opt:
- no-new-privileges:true
labels:
<<: *production-labels
com.vignette.data-role: database-backup
networks: [backend]
engine: engine:
<<: *api-image <<: *api-image
command: command: