Replace deprecated `docker compose ps | grep` patterns with the more reliable `docker compose ps --status running --services | grep` command. This ensures consistent container status checking across backup, restore, and update scripts. Also fix regex pattern in update.sh for French "oui" validation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
178 lines
5.7 KiB
Bash
Executable File
178 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================
|
|
# Script de mise à jour Gitea
|
|
# ============================================
|
|
# Ce script met à jour Gitea de manière sécurisée
|
|
# avec une sauvegarde automatique avant la mise à jour
|
|
|
|
set -euo pipefail # Arrêter en cas d'erreur, variables non définies, erreurs dans pipes
|
|
|
|
# Couleurs pour l'affichage
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Charger les variables d'environnement de manière sécurisée
|
|
if [ -f .env ]; then
|
|
set -a
|
|
source .env
|
|
set +a
|
|
else
|
|
echo -e "${RED}Erreur: Fichier .env non trouvé${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Variables
|
|
LOG_DIR="./logs"
|
|
LOG_FILE="${LOG_DIR}/update_$(date +%Y%m%d_%H%M%S).log"
|
|
|
|
# Créer le répertoire de logs
|
|
mkdir -p "$LOG_DIR"
|
|
|
|
# Fonction de logging
|
|
log() {
|
|
echo -e "$@" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
# Fonction de nettoyage en cas d'erreur
|
|
cleanup() {
|
|
local exit_code=$?
|
|
if [ $exit_code -ne 0 ]; then
|
|
log "${RED}Erreur lors de la mise à jour (code: $exit_code)${NC}"
|
|
log "${YELLOW}Vérifiez l'état des services: docker compose ps${NC}"
|
|
log "Pour revenir à l'état précédent, utilisez la dernière sauvegarde:"
|
|
LATEST_BACKUP=$(ls -t backups/gitea_backup_*.tar.gz 2>/dev/null | head -n 1)
|
|
if [ -n "$LATEST_BACKUP" ]; then
|
|
log " make restore FILE=$LATEST_BACKUP"
|
|
fi
|
|
log "Log: $LOG_FILE"
|
|
fi
|
|
}
|
|
|
|
trap cleanup EXIT INT TERM
|
|
|
|
log "${GREEN}=== Mise à jour de Gitea ===${NC}"
|
|
log "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')] Début de la mise à jour${NC}"
|
|
log ""
|
|
|
|
# Sauvegarder la version actuelle
|
|
CURRENT_VERSION=""
|
|
if docker compose ps --status running --services | grep -q '^gitea$'; then
|
|
CURRENT_VERSION=$(docker compose exec -T gitea gitea --version 2>/dev/null | head -n 1 || echo "Inconnue")
|
|
log "Version actuelle: $CURRENT_VERSION"
|
|
fi
|
|
|
|
# Vérifier que les services tournent
|
|
if ! docker compose ps --status running --services | grep -q '^gitea$'; then
|
|
log "${YELLOW}Avertissement: Gitea ne semble pas être en cours d'exécution${NC}"
|
|
read -p "Continuer quand même? (oui/non) " -r
|
|
if [[ ! $REPLY =~ ^[Oo][Uu][Ui]$ ]]; then
|
|
log "Mise à jour annulée par l'utilisateur."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
log "${YELLOW}[1/7] Sauvegarde du docker-compose.yml...${NC}"
|
|
# Sauvegarder docker-compose.yml au cas où
|
|
COMPOSE_BACKUP="docker-compose.yml.backup.$(date +%Y%m%d_%H%M%S)"
|
|
if [ -f docker-compose.yml ]; then
|
|
cp docker-compose.yml "$COMPOSE_BACKUP"
|
|
log "${GREEN}✓ docker-compose.yml sauvegardé: $COMPOSE_BACKUP${NC}"
|
|
else
|
|
log "${YELLOW}Avertissement: docker-compose.yml non trouvé${NC}"
|
|
fi
|
|
|
|
log "${YELLOW}[2/7] Création d'une sauvegarde de sécurité...${NC}"
|
|
if ! bash scripts/backup.sh 2>&1 | tee -a "$LOG_FILE"; then
|
|
log "${RED}Erreur: La sauvegarde a échoué. Mise à jour annulée.${NC}"
|
|
exit 1
|
|
fi
|
|
log "${GREEN}✓ Sauvegarde créée${NC}"
|
|
|
|
log "${YELLOW}[3/7] Téléchargement des nouvelles images...${NC}"
|
|
if ! docker compose pull 2>&1 | tee -a "$LOG_FILE"; then
|
|
log "${RED}Erreur: Échec du téléchargement des images${NC}"
|
|
exit 1
|
|
fi
|
|
log "${GREEN}✓ Images téléchargées${NC}"
|
|
|
|
log "${YELLOW}[4/7] Arrêt des services...${NC}"
|
|
if ! docker compose down 2>&1 | tee -a "$LOG_FILE"; then
|
|
log "${YELLOW}Avertissement: Erreur lors de l'arrêt des services${NC}"
|
|
fi
|
|
log "${GREEN}✓ Services arrêtés${NC}"
|
|
|
|
log "${YELLOW}[5/7] Démarrage avec les nouvelles versions...${NC}"
|
|
if ! docker compose up -d 2>&1 | tee -a "$LOG_FILE"; then
|
|
log "${RED}Erreur: Échec du démarrage des services${NC}"
|
|
exit 1
|
|
fi
|
|
log "${GREEN}✓ Services démarrés${NC}"
|
|
|
|
log "${YELLOW}[6/7] Attente du démarrage complet et health check...${NC}"
|
|
sleep 10
|
|
|
|
# Attendre que Gitea soit prêt (utiliser curl au lieu de wget)
|
|
MAX_TRIES=60
|
|
COUNTER=0
|
|
until docker compose exec -T gitea curl -sf http://localhost:3000/api/healthz >/dev/null 2>&1; do
|
|
COUNTER=$((COUNTER + 1))
|
|
if [ $COUNTER -gt $MAX_TRIES ]; then
|
|
log "${RED}Erreur: Gitea ne répond pas après la mise à jour${NC}"
|
|
log "Vérifiez les logs: docker compose logs gitea"
|
|
log "${YELLOW}Tentative de restauration automatique...${NC}"
|
|
|
|
# Essayer de restaurer le docker-compose.yml
|
|
if [ -f "$COMPOSE_BACKUP" ]; then
|
|
cp "$COMPOSE_BACKUP" docker-compose.yml
|
|
log "docker-compose.yml restauré"
|
|
fi
|
|
|
|
exit 1
|
|
fi
|
|
log "En attente de Gitea... ($COUNTER/$MAX_TRIES)"
|
|
sleep 2
|
|
done
|
|
log "${GREEN}✓ Gitea répond et est opérationnel${NC}"
|
|
|
|
log "${YELLOW}[7/7] Vérification de l'état et de la version...${NC}"
|
|
|
|
# Obtenir la nouvelle version
|
|
NEW_VERSION=$(docker compose exec -T gitea gitea --version 2>/dev/null | head -n 1 || echo "Inconnue")
|
|
log "Nouvelle version: $NEW_VERSION"
|
|
|
|
# Afficher les versions des images
|
|
log ""
|
|
log "Images Docker:"
|
|
docker compose images 2>&1 | tee -a "$LOG_FILE"
|
|
|
|
log ""
|
|
log "État des services:"
|
|
docker compose ps 2>&1 | tee -a "$LOG_FILE"
|
|
|
|
# Supprimer l'ancien backup docker-compose.yml si tout s'est bien passé
|
|
if [ -f "$COMPOSE_BACKUP" ]; then
|
|
rm -f "$COMPOSE_BACKUP"
|
|
log "Backup temporaire docker-compose.yml supprimé"
|
|
fi
|
|
|
|
log ""
|
|
log "${GREEN}=== Mise à jour terminée avec succès ===${NC}"
|
|
log ""
|
|
log "Vérifications recommandées:"
|
|
log " 1. Accéder à l'interface web: http://localhost:3000"
|
|
log " 2. Vérifier les dépôts existants"
|
|
log " 3. Tester les fonctionnalités principales"
|
|
log " 4. Consulter les logs: docker compose logs -f gitea"
|
|
log ""
|
|
log "En cas de problème, restaurez la sauvegarde:"
|
|
LATEST_BACKUP=$(ls -t backups/gitea_backup_*.tar.gz 2>/dev/null | head -n 1)
|
|
if [ -n "$LATEST_BACKUP" ]; then
|
|
log " make restore FILE=$LATEST_BACKUP"
|
|
fi
|
|
log ""
|
|
log "Log de mise à jour: $LOG_FILE"
|
|
log "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')] Mise à jour terminée${NC}"
|