3 Commits

Author SHA1 Message Date
Matthieu THOLOT
c22146b098 feat(backup): zip and rotate uploads for inventory/sirh/lesstime
All checks were successful
Auto Tag / tag (push) Successful in 6s
Aligns the repo with the version that was running in prod.
Adds INVENTORY/SIRH/LESSTIME_DOCS_DIR variables, zips each upload
directory next to the DB dumps, keeps the 3 most recent zips, and
splits the Discord summary into BDD/Documents sections.
2026-05-19 08:21:58 +00:00
Matthieu THOLOT
edd622a9d7 feat(backup): include starseed_prod in daily dumps
All checks were successful
Auto Tag / tag (push) Successful in 8s
2026-05-19 08:09:15 +00:00
Matthieu
93a4dfedb4 feat : add Adminer service on port 8083
All checks were successful
Auto Tag / tag (push) Successful in 5s
- Adminer web UI for PostgreSQL management
- Port 8083 (8080 taken by sirh-app)
- Nginx reverse proxy on adminer-prod.malio-dev.fr (HTTP)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 12:03:35 +02:00
2 changed files with 53 additions and 7 deletions

View File

@@ -7,7 +7,10 @@ cd "$(dirname "$0")"
source .env source .env
BACKUP_DIR="./backups" BACKUP_DIR="./backups"
DATABASES=("sirh_prod" "inventory_prod" "lesstime_prod") DATABASES=("sirh_prod" "inventory_prod" "lesstime_prod" "starseed_prod")
INVENTORY_DOCS_DIR="/var/www/inventory/storage"
SIRH_DOCS_DIR="/var/www/sirh/uploads"
LESSTIME_DOCS_DIR="/var/www/lesstime/uploads"
DATE=$(date +%Y-%m-%d_%H%M%S) DATE=$(date +%Y-%m-%d_%H%M%S)
LOG_FILE="${BACKUP_DIR}/backup.log" LOG_FILE="${BACKUP_DIR}/backup.log"
WEBHOOK_URL="${DISCORD_WEBHOOK_URL:-}" WEBHOOK_URL="${DISCORD_WEBHOOK_URL:-}"
@@ -30,7 +33,7 @@ discord() {
fail() { fail() {
log "ERROR: $1" log "ERROR: $1"
discord 16711680 "Backup PostgreSQL - ECHEC" "$1" discord 16711680 "Backup - ECHEC" "$1"
exit 1 exit 1
} }
@@ -39,10 +42,15 @@ command -v docker &>/dev/null || fail "docker n'est pas installe"
# Supprimer les anciens backups (on ne garde que le dernier) # Supprimer les anciens backups (on ne garde que le dernier)
rm -f "${BACKUP_DIR}"/*.sql rm -f "${BACKUP_DIR}"/*.sql
# Garder les 3 derniers zips de documents, supprimer les plus anciens
for PREFIX in inventory_docs sirh_docs lesstime_docs; do
ls -t "${BACKUP_DIR}"/${PREFIX}-*.zip 2>/dev/null | tail -n +4 | xargs -r rm -f || true
done
log "Debut backup PostgreSQL" log "Debut backup PostgreSQL"
DETAILS="" DB_DETAILS=""
DOC_DETAILS=""
ERRORS=0 ERRORS=0
for DB in "${DATABASES[@]}"; do for DB in "${DATABASES[@]}"; do
@@ -50,17 +58,44 @@ for DB in "${DATABASES[@]}"; do
if docker compose exec -T postgres pg_dump -U admin "$DB" > "${BACKUP_DIR}/${DB}-${DATE}.sql" 2>/dev/null; then if docker compose exec -T postgres pg_dump -U admin "$DB" > "${BACKUP_DIR}/${DB}-${DATE}.sql" 2>/dev/null; then
SIZE=$(du -h "${BACKUP_DIR}/${DB}-${DATE}.sql" | cut -f1) SIZE=$(du -h "${BACKUP_DIR}/${DB}-${DATE}.sql" | cut -f1)
log "${DB} sauvegarde (${SIZE})" log "${DB} sauvegarde (${SIZE})"
DETAILS="${DETAILS}\\n- **${DB}** : ${SIZE}" DB_DETAILS="${DB_DETAILS}\\n- **${DB}** : ${SIZE}"
else else
log "ERREUR sur ${DB}" log "ERREUR sur ${DB}"
DETAILS="${DETAILS}\\n- **${DB}** : ERREUR" DB_DETAILS="${DB_DETAILS}\\n- **${DB}** : ERREUR"
((ERRORS++)) ((ERRORS++))
fi fi
done done
# Backup des documents (Inventory, SIRH, LessTime)
declare -A DOC_DIRS=(
["inventory_docs"]="$INVENTORY_DOCS_DIR"
["sirh_docs"]="$SIRH_DOCS_DIR"
["lesstime_docs"]="$LESSTIME_DOCS_DIR"
)
for NAME in "${!DOC_DIRS[@]}"; do
DIR="${DOC_DIRS[$NAME]}"
if [[ -d "$DIR" ]]; then
log "Zipping ${NAME}..."
ZIP_FILE="${BACKUP_DIR}/${NAME}-${DATE}.zip"
if zip -rq "$ZIP_FILE" "$DIR" 2>/dev/null; then
SIZE=$(du -h "$ZIP_FILE" | cut -f1)
log "${NAME} sauvegarde (${SIZE})"
DOC_DETAILS="${DOC_DETAILS}\\n- **${NAME}** : ${SIZE}"
else
log "ERREUR sur ${NAME}"
DOC_DETAILS="${DOC_DETAILS}\\n- **${NAME}** : ERREUR"
((ERRORS++))
fi
else
log "WARN: Dossier ${NAME} introuvable ($DIR)"
DOC_DETAILS="${DOC_DETAILS}\\n- **${NAME}** : dossier introuvable"
fi
done
if [[ $ERRORS -gt 0 ]]; then if [[ $ERRORS -gt 0 ]]; then
fail "Backup termine avec ${ERRORS} erreur(s) :${DETAILS}" fail "Backup termine avec ${ERRORS} erreur(s) :\\n\\n**BDD :**${DB_DETAILS}\\n\\n**Documents :**${DOC_DETAILS}"
fi fi
log "Backup termine avec succes" log "Backup termine avec succes"
discord 65280 "Backup PostgreSQL - OK" "Backup **${DATE}** termine\\n${DETAILS}" discord 65280 "Backup - OK" "Backup **${DATE}**\\n\\n**BDD :**${DB_DETAILS}\\n\\n**Documents (3 derniers conserves) :**${DOC_DETAILS}"

View File

@@ -8,3 +8,14 @@ services:
volumes: volumes:
- ./data:/var/lib/postgresql/data - ./data:/var/lib/postgresql/data
restart: unless-stopped restart: unless-stopped
adminer:
image: adminer:latest
container_name: adminer
ports:
- "8083:8080"
environment:
ADMINER_DEFAULT_SERVER: postgres
restart: unless-stopped
depends_on:
- postgres