Déploiement : ne plus effacer les rapports GoAccess, ne plus sauter le restart

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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KtgiPNG3inkbM8k7suMtjL
This commit is contained in:
Alpinux 2026-09-20 09:05:29 +02:00
parent bd4f4c62ae
commit 8655c250ec
2 changed files with 35 additions and 9 deletions

View file

@ -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

View file

@ -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,6 +98,11 @@ fi
# ── 4. Service systemd ───────────────────────────────────────────────
echo -e "${CYAN}[4/4] Déploiement du service systemd…${RESET}"
# 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
@ -100,6 +111,16 @@ ssh "$REMOTE_HOST" bash <<'ENDSSH'
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=<chemin vers infra> $0"
fi
ssh "$REMOTE_HOST" bash <<'ENDSSH'
set -e
if systemctl is-active --quiet static-cdn; then
sudo systemctl restart static-cdn
echo "Service redémarré."