Deploy stack su Proxmox / deploy (push) Failing after 3s
Monorepo npm con apps/public (Angular SSR), apps/private (Angular SPA), apps/api (Fastify), packages/shared e packages/styles; Medusa 2.21 in medusa/; infrastruttura Docker (Postgres PostGIS+pgvector, Redis, Caddy, backup) e workflow Gitea Actions per il deploy via SSH a ogni push su master. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018jQyT6dR9czzGwqb7FkG6u
45 lines
1.8 KiB
Bash
45 lines
1.8 KiB
Bash
#!/bin/sh
|
|
# Backup giornaliero di produzione: dump dei due database + archivi dei file caricati, con rotazione.
|
|
# Gira nel container "backup" (profilo tools) di docker-compose.prod.yml:
|
|
# docker compose -f docker-compose.prod.yml run --rm backup (oppure: npm run backup:prod)
|
|
# Risultato in BACKUP_DIR (host) → <AAAAMMGGTHHMMSSZ>/
|
|
# app.dump, medusa.dump pg_dump formato custom (pg_restore), proprietari inclusi
|
|
# uploads.tar.gz volume uploads dell'API (public/ e private/)
|
|
# medusa-files.tar.gz file caricati dal dashboard Medusa (immagini prodotto)
|
|
# SHA256SUMS verificati dal ripristino
|
|
# Tiene gli ultimi BACKUP_KEEP_DAYS backup (default 14). Redis non serve: cache, sessioni e code.
|
|
set -eu
|
|
umask 077
|
|
|
|
KEEP="${BACKUP_KEEP_DAYS:-14}"
|
|
STAMP="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
TMP="/backups/.tmp-$STAMP"
|
|
DEST="/backups/$STAMP"
|
|
|
|
log() { echo "[backup $(date -u +%H:%M:%S)] $*"; }
|
|
|
|
rm -rf /backups/.tmp-*
|
|
mkdir -p "$TMP"
|
|
|
|
log "dump $APP_DB_NAME"
|
|
pg_dump --format=custom --dbname="$APP_DB_NAME" --file="$TMP/app.dump"
|
|
log "dump $MEDUSA_DB_NAME"
|
|
pg_dump --format=custom --dbname="$MEDUSA_DB_NAME" --file="$TMP/medusa.dump"
|
|
|
|
log "archivio uploads"
|
|
tar -C /data/uploads -czf "$TMP/uploads.tar.gz" .
|
|
log "archivio medusa-files"
|
|
tar -C /data/medusa-files -czf "$TMP/medusa-files.tar.gz" .
|
|
|
|
(cd "$TMP" && sha256sum app.dump medusa.dump uploads.tar.gz medusa-files.tar.gz > SHA256SUMS)
|
|
# Rinomina solo a backup completo: una cartella con il timestamp è sempre un backup integro
|
|
mv "$TMP" "$DEST"
|
|
log "completato: $DEST ($(du -sh "$DEST" | cut -f1))"
|
|
|
|
# Rotazione: i nomi sono ordinabili, si tengono gli ultimi $KEEP
|
|
OLD="$(ls -1d /backups/[0-9]*T*Z 2>/dev/null | sort | head -n "-$KEEP")"
|
|
for d in $OLD; do
|
|
log "rimosso $d"
|
|
rm -rf "$d"
|
|
done
|