#!/bin/bash # Met en ligne presentations.alpinux.org depuis le dépôt alpinux-presentations. # Appelé par le service webhook après chaque push sur main, ou à la main en secours. # Calqué sur deploy-wiki.sh : le serveur exécute sa copie, posée par deploy/installer.sh. set -e REPO_DIR="/opt/presentations-alpinux/repo" STAGING="/opt/presentations-alpinux/staging" TARGET="/var/www/clients/client1/web22/web" NODE_BIN="/opt/presentations-alpinux/node/bin" LOG="/var/log/presentations-deploy.log" export PATH="$NODE_BIN:$PATH" # Deux push rapprochés : le second déploiement attend la fin du premier au lieu de # construire dans le même staging. exec 9> "/tmp/presentations-deploy.lock" flock 9 echo "[$(date '+%Y-%m-%d %H:%M:%S')] Deploy started" >> "$LOG" trap 'echo "[$(date "+%Y-%m-%d %H:%M:%S")] ABANDON : le site en ligne est inchangé" >> "$LOG"' ERR cd "$REPO_DIR" git pull origin main >> "$LOG" 2>&1 # --ignore-scripts : aucune dépendance n'a besoin d'exécuter du code à l'installation, # et aucune n'en a donc le droit. npm ci --ignore-scripts --no-audit --no-fund >> "$LOG" 2>&1 # Build dans un répertoire de staging : le site en ligne reste intact si le build # échoue (front matter invalide, image manquante, ressource externe). node scripts/build.mjs "$STAGING" >> "$LOG" 2>&1 # Bascule vers le DocumentRoot une fois le build valide. Les deux dossiers exclus # appartiennent à ISPConfig (pages d'erreur, statistiques) : --delete les épargne. rsync -rltD --no-perms --omit-dir-times --delete \ --exclude=/error/ --exclude=/stats/ \ "$STAGING/" "$TARGET/" >> "$LOG" 2>&1 echo "[$(date '+%Y-%m-%d %H:%M:%S')] Deploy done" >> "$LOG"