From 8655c250ec50973ae21c6aa9725394c19620bda3 Mon Sep 17 00:00:00 2001 From: Alpinux Date: Sun, 20 Sep 2026 09:05:29 +0200 Subject: [PATCH] =?UTF-8?q?D=C3=A9ploiement=20:=20ne=20plus=20effacer=20le?= =?UTF-8?q?s=20rapports=20GoAccess,=20ne=20plus=20sauter=20le=20restart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trois défauts vus en déployant la création de dossier en production. Le rsync --delete emportait goaccess.html et goaccess.json, générés sur le serveur chaque nuit — la même famille que #51 et #48, jamais refermée. Le dry-run les montrait en suppression. L'unit systemd était cherchée à ../../infra/services/, chemin relatif qui visait org.alpinux.owni/infra quand le dépôt y vivait encore ; depuis le déménagement il pointe dans le vide. Il passe par INFRA_DIR, surchargeable. Surtout, cette copie d'unit et le redémarrage partageaient un bloc set -e : l'unit introuvable a emporté le restart. Le script s'est arrêté après avoir copié les fichiers, le service a continué de servir le code de juillet. Les deux sont maintenant séparés — le restart a lieu même sans dépôt infra. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01KtgiPNG3inkbM8k7suMtjL --- app/CHANGELOG.md | 7 ++++++- scripts/deploy-app.sh | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/CHANGELOG.md b/app/CHANGELOG.md index 1c15ff4..a295e04 100644 --- a/app/CHANGELOG.md +++ b/app/CHANGELOG.md @@ -1,11 +1,16 @@ # Changelog — Alpinux Static -## [2.1.0] — 2026-09-05 +## [2.1.0] — 2026-09-20 ### Ajouté - **Parcourir** : bouton « 📁 Nouveau dossier » à droite du fil d'Ariane — saisie en ligne (Entrée pour valider, Échap pour annuler), le dossier est créé dans le répertoire affiché - Nouveau endpoint `POST /mkdir` : réservé aux admins, nom nettoyé par `secure_filename`, refus des noms réservés/cachés, des traversées de chemin et des doublons (409) +### Corrigé +- **Déploiement** : `goaccess.html` et `goaccess.json` exclus du rsync `--delete` — les rapports GoAccess générés sur le serveur ne sont plus effacés à chaque déploiement (même famille que #51 et #48) +- **Déploiement** : l'unit systemd était cherchée dans `infra/` par un chemin relatif, cassé depuis que le dépôt a quitté `org.alpinux.owni/` — résolu via `INFRA_DIR`, surchargeable +- **Déploiement** : le redémarrage du service est désormais séparé de la copie de l'unit. Ils étaient dans le même bloc `set -e` : une unit introuvable emportait le restart, et le déploiement se terminait avec les fichiers à jour mais l'ancien code toujours en mémoire + --- ## [2.0.0] — 2026-05-06 diff --git a/scripts/deploy-app.sh b/scripts/deploy-app.sh index ebf2c32..09f6990 100755 --- a/scripts/deploy-app.sh +++ b/scripts/deploy-app.sh @@ -23,7 +23,10 @@ source "$ENV_FILE" REMOTE_HOST="${STATIC_HOST:?Variable STATIC_HOST manquante dans .env}" REMOTE_DEST="/opt/static-cdn" -SERVICE_FILE="$SCRIPT_DIR/../../infra/services/static-cdn.service" +# L'unit systemd vit dans le dépôt alpinux-infra, à côté de celui-ci. +# Surchargeable : INFRA_DIR=/chemin/vers/infra ./deploy-app.sh +INFRA_DIR="${INFRA_DIR:-$SCRIPT_DIR/../../org.alpinux.owni/infra}" +SERVICE_FILE="$INFRA_DIR/services/static-cdn.service" DRY_RUN=false for arg in "$@"; do @@ -38,11 +41,14 @@ echo "" # ── 1. Rsync de l'app ──────────────────────────────────────────────── echo -e "${CYAN}[1/4] Synchronisation des fichiers…${RESET}" +# Tout ce que le serveur produit lui-même doit être exclu du --delete, sinon +# un déploiement l'efface : rapports GoAccess, IPs ignorées, cache RIPE. RSYNC_OPTS=(-rlcz --delete --human-readable --exclude='.env' --exclude='__pycache__/' --exclude='*.pyc' --exclude='venv/' --exclude='.env.example' --exclude='ignored_ips.json' - --exclude='as_cache/') + --exclude='as_cache/' + --exclude='goaccess.html' --exclude='goaccess.json') if $DRY_RUN; then rsync --dry-run --itemize-changes "${RSYNC_OPTS[@]}" "$APP_DIR/" "$REMOTE_HOST:$REMOTE_DEST/" @@ -92,14 +98,29 @@ fi # ── 4. Service systemd ─────────────────────────────────────────────── echo -e "${CYAN}[4/4] Déploiement du service systemd…${RESET}" -scp "$SERVICE_FILE" "$REMOTE_HOST:/tmp/static-cdn.service" + +# L'unit change rarement ; le redémarrage doit avoir lieu à chaque fois. Les +# séparer évite qu'un dépôt infra introuvable emporte silencieusement le restart +# et laisse l'ancien code tourner en mémoire alors que les fichiers sont à jour. +if [ -f "$SERVICE_FILE" ]; then + scp "$SERVICE_FILE" "$REMOTE_HOST:/tmp/static-cdn.service" + ssh "$REMOTE_HOST" bash <<'ENDSSH' + set -e + sudo mkdir -p /var/log/static-cdn + sudo chown static-cdn:static-cdn /var/log/static-cdn + sudo cp /tmp/static-cdn.service /etc/systemd/system/static-cdn.service + sudo systemctl daemon-reload + sudo systemctl enable static-cdn +ENDSSH + echo -e " ${GREEN}✓ Unit systemd à jour${RESET}" +else + echo -e " ${RED}Unit introuvable : $SERVICE_FILE${RESET}" + echo " L'unit déjà installée sur le serveur est conservée." + echo " Pour la redéployer : INFRA_DIR= $0" +fi + ssh "$REMOTE_HOST" bash <<'ENDSSH' set -e - sudo mkdir -p /var/log/static-cdn - sudo chown static-cdn:static-cdn /var/log/static-cdn - sudo cp /tmp/static-cdn.service /etc/systemd/system/static-cdn.service - sudo systemctl daemon-reload - sudo systemctl enable static-cdn if systemctl is-active --quiet static-cdn; then sudo systemctl restart static-cdn echo "Service redémarré."