Déploiement par Git + Docker : script deploy.sh et guide DEPLOY.md

- deploy.sh : met à jour depuis Gitea (branche master) et ne reconstruit
  les conteneurs (docker compose up -d --build) que si une nouvelle
  version existe ; option --force ; vérifie git/docker/compose/.env ;
  pull --ff-only ; compatible Compose v2 et v1
- DEPLOY.md : guide de premier déploiement (prérequis, git clone, .env
  depuis .env.example), mises à jour, persistance SQLite, dépannage
- design.md : note renvoyant vers DEPLOY.md et la procédure Git + Docker
  (abandon de la copie d'archive)
This commit is contained in:
2026-10-12 12:54:43 +02:00
parent f6445d66af
commit d857ccb879
3 changed files with 205 additions and 0 deletions
Executable
+70
View File
@@ -0,0 +1,70 @@
#!/usr/bin/env bash
# Déploiement / mise à jour de SchotzIAD KM Tracker via Git + Docker Compose.
#
# Récupère la dernière version depuis Gitea (branche master) et ne reconstruit
# les conteneurs QUE si une nouvelle version est disponible. À exécuter sur le
# serveur, dans le dépôt cloné (voir DEPLOY.md pour le premier déploiement).
#
# Usage :
# ./deploy.sh Met à jour puis rebuild uniquement si nouveau commit.
# ./deploy.sh --force Rebuild même sans nouveau commit (ex. après édition du .env).
#
# Codes de sortie : 0 = succès (ou déjà à jour), 1 = erreur de prérequis/déploiement.
set -uo pipefail
RACINE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$RACINE"
BRANCHE="master"
FORCER=0
[[ "${1:-}" == "--force" ]] && FORCER=1
echo "→ Déploiement SchotzIAD (dépôt : $RACINE, branche : $BRANCHE)"
# --- 1. Prérequis -----------------------------------------------------------
erreur() { echo "✗ $1" >&2; exit 1; }
command -v git >/dev/null 2>&1 || erreur "git n'est pas installé (voir DEPLOY.md)."
command -v docker >/dev/null 2>&1 || erreur "docker n'est pas installé (voir DEPLOY.md)."
# Docker Compose v2 (plugin « docker compose ») ou v1 (« docker-compose »).
if docker compose version >/dev/null 2>&1; then
COMPOSE="docker compose"
elif command -v docker-compose >/dev/null 2>&1; then
COMPOSE="docker-compose"
else
erreur "docker compose introuvable (ni le plugin v2, ni docker-compose v1)."
fi
[[ -f "$RACINE/.env" ]] || erreur "Fichier .env absent. Copiez .env.example vers .env et renseignez-le (voir DEPLOY.md)."
# --- 2. Détection d'une nouvelle version ------------------------------------
echo "→ Récupération des références distantes (git fetch)…"
git fetch --quiet origin "$BRANCHE" || erreur "git fetch a échoué (accès à Gitea ?)."
LOCAL="$(git rev-parse "$BRANCHE")"
DISTANT="$(git rev-parse "origin/$BRANCHE")"
if [[ "$LOCAL" == "$DISTANT" && "$FORCER" -eq 0 ]]; then
echo "✓ Déjà à jour (commit ${LOCAL:0:8}). Aucun rebuild."
echo " (Utilisez ./deploy.sh --force pour reconstruire malgré tout.)"
exit 0
fi
# --- 3. Mise à jour du code -------------------------------------------------
if [[ "$LOCAL" != "$DISTANT" ]]; then
echo "→ Nouvelle version détectée : ${LOCAL:0:8} → ${DISTANT:0:8}. Mise à jour…"
git pull --ff-only origin "$BRANCHE" || erreur "git pull --ff-only a échoué (historique divergent ? voir DEPLOY.md)."
else
echo "→ Pas de nouveau commit, mais --force demandé : reconstruction."
fi
# --- 4. (Re)construction et démarrage ---------------------------------------
echo "→ Construction et démarrage des conteneurs ($COMPOSE up -d --build)…"
$COMPOSE up -d --build || erreur "Le déploiement Docker a échoué."
echo "→ État des conteneurs :"
$COMPOSE ps
echo "✓ Déploiement terminé (version ${DISTANT:0:8})."