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é."