Conception complete (Phase 0) pour formation-hub Acadenice : - 19 docs Merise Agile + UML + GitOps + plans (tests/deploy/ops/api) cf docs/00-readme.md pour l'index complet - Stack Docker compose (Docmost + Baserow + Postgres + Redis + MinIO local FS) compose.yml + compose.staging.yml + compose.prod.yml - CI/CD GitHub Actions skeleton (ci, deploy-staging, deploy-prod) - Bridge service skeleton (Hono + TS + Biome + Vitest + zod + pino) - Templates GitHub : PR + 3 issue types + CODEOWNERS + dependabot.yml - Scripts ops : healthcheck, backup quotidien, smoke-test post-deploy - LICENSE AGPL-3.0 + SECURITY.md + CONTRIBUTING.md + CHANGELOG.md - Diagramme drawIO archi infra (XML importable dans diagrams.net) Decisions structurelles enregistrees : - Scope CFA + Agence avec entite PERSONNE pivot multi-roles (ADR-001) - Stack composite Docmost AGPL + Baserow MIT + bridge custom (ADR-001) - Path B : UX quasi-unified via Tiptap node-views custom (ADR-002) - Monorepo trunk-based development (ADR-003) - Postgres separe Docmost/Baserow (ADR-004) - Bridge stack Node 22 + Hono (ADR-005) - Repo neuf prefere a fork Docmost - Prod-like des le jour 1 (pas MVP)
39 lines
1.3 KiB
Bash
Executable file
39 lines
1.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# scripts/backup.sh — backup quotidien Postgres + files (a appeler par cron)
|
|
set -euo pipefail
|
|
|
|
DATE=$(date +%Y%m%d-%H%M%S)
|
|
BACKUP_DIR="${BACKUP_DIR:-/opt/formation-hub/backups/local}"
|
|
COMPOSE_FILES="${COMPOSE_FILES:--f compose.yml -f compose.prod.yml}"
|
|
RETENTION_DAYS="${RETENTION_DAYS:-30}"
|
|
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
echo "[$(date -Iseconds)] Backup start — DATE=$DATE"
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
echo " Postgres docmost..."
|
|
docker compose $COMPOSE_FILES exec -T docmost-db \
|
|
pg_dump -U docmost docmost | gzip > "$BACKUP_DIR/docmost-db-$DATE.sql.gz"
|
|
|
|
echo " Baserow data..."
|
|
docker compose $COMPOSE_FILES exec -T baserow \
|
|
tar czf - /baserow/data > "$BACKUP_DIR/baserow-data-$DATE.tar.gz"
|
|
|
|
echo " Docmost files..."
|
|
docker compose $COMPOSE_FILES exec -T docmost \
|
|
tar czf - /app/data/storage > "$BACKUP_DIR/docmost-files-$DATE.tar.gz"
|
|
|
|
echo " Sync distant (rclone) — si configure..."
|
|
if command -v rclone >/dev/null 2>&1 && [ -n "${RCLONE_REMOTE:-}" ]; then
|
|
rclone copy "$BACKUP_DIR/" "$RCLONE_REMOTE:" --include "*-$DATE.*"
|
|
else
|
|
echo " (rclone non configure — backup distant skip)"
|
|
fi
|
|
|
|
echo " Cleanup local > ${RETENTION_DAYS}j..."
|
|
find "$BACKUP_DIR" -type f -mtime "+$RETENTION_DAYS" -delete
|
|
|
|
echo "[$(date -Iseconds)] Backup OK"
|
|
ls -lh "$BACKUP_DIR/"*-$DATE.*
|