일일 검증형 DB 백업 사이드카를 정식 스택에 추가
This commit is contained in:
parent
c75fda2385
commit
b98eecbb36
1 changed files with 41 additions and 0 deletions
|
|
@ -50,6 +50,47 @@ services:
|
|||
com.vignette.data-role: database-ssot
|
||||
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:
|
||||
<<: *api-image
|
||||
command:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue