Restructure project following production-ready standards

- Add comprehensive docker-compose configuration with health checks
- Create Makefile with 16 utility commands for easy management
- Implement robust backup/restore/update scripts with error handling
- Add optimized PostgreSQL configuration for Gitea workload
- Enhance .env.example with clear dev/prod sections and documentation
- Create comprehensive README with installation, configuration, and maintenance guides
- Improve .gitignore to exclude all sensitive and generated files
- Add Redis persistence (AOF) and memory limits
- Configure service dependencies with health conditions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
BeauTroll
2025-12-16 19:12:43 +01:00
parent 7b6ba15d8f
commit 6cb3d4239e
9 changed files with 1231 additions and 12 deletions

121
scripts/backup.sh Executable file
View File

@@ -0,0 +1,121 @@
#!/bin/bash
# ============================================
# Script de sauvegarde Gitea
# ============================================
# Ce script crée une sauvegarde complète de:
# - Base de données PostgreSQL
# - Dépôts Git
# - Configuration Gitea
# - Données utilisateur
set -e # Arrêter en cas d'erreur
# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Charger les variables d'environnement
if [ -f .env ]; then
source .env
else
echo -e "${RED}Erreur: Fichier .env non trouvé${NC}"
exit 1
fi
# Variables
BACKUP_DIR="./backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="gitea_backup_${TIMESTAMP}"
TEMP_DIR="${BACKUP_DIR}/${BACKUP_NAME}"
RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7}
# Vérifier que les variables nécessaires sont définies
if [ -z "$POSTGRES_DATABASE" ] || [ -z "$POSTGRES_USER" ] || [ -z "$POSTGRES_PASSWORD" ]; then
echo -e "${RED}Erreur: Variables PostgreSQL non définies dans .env${NC}"
exit 1
fi
# Fonction de nettoyage en cas d'erreur
cleanup() {
if [ -d "$TEMP_DIR" ]; then
echo -e "${YELLOW}Nettoyage des fichiers temporaires...${NC}"
rm -rf "$TEMP_DIR"
fi
}
# Piège pour nettoyer en cas d'erreur
trap cleanup EXIT
echo -e "${GREEN}=== Début de la sauvegarde Gitea ===${NC}"
echo "Timestamp: $TIMESTAMP"
# Créer les répertoires si nécessaire
mkdir -p "$BACKUP_DIR"
mkdir -p "$TEMP_DIR"
# Vérifier que les conteneurs sont en cours d'exécution
if ! docker compose ps | grep -q "gitea.*running"; then
echo -e "${RED}Erreur: Le conteneur Gitea n'est pas en cours d'exécution${NC}"
exit 1
fi
echo -e "${YELLOW}[1/4] Sauvegarde de la base de données PostgreSQL...${NC}"
# Exporter la base de données
export PGPASSWORD="$POSTGRES_PASSWORD"
docker compose exec -T db pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DATABASE" \
--format=custom \
--compress=9 \
--no-owner \
--no-acl \
> "${TEMP_DIR}/database.dump"
if [ ! -s "${TEMP_DIR}/database.dump" ]; then
echo -e "${RED}Erreur: Le dump de la base de données est vide${NC}"
exit 1
fi
echo -e "${GREEN}✓ Base de données sauvegardée${NC}"
echo -e "${YELLOW}[2/4] Sauvegarde des dépôts Git et données...${NC}"
# Créer une archive des dépôts et données
docker compose exec -T gitea tar czf - \
-C /data \
--exclude='./log' \
--exclude='./cache' \
--exclude='./tmp' \
--exclude='./sessions' \
. > "${TEMP_DIR}/gitea_data.tar.gz"
if [ ! -s "${TEMP_DIR}/gitea_data.tar.gz" ]; then
echo -e "${RED}Erreur: L'archive des données est vide${NC}"
exit 1
fi
echo -e "${GREEN}✓ Dépôts et données sauvegardés${NC}"
echo -e "${YELLOW}[3/4] Création de l'archive finale...${NC}"
# Créer l'archive finale
cd "$BACKUP_DIR"
tar czf "${BACKUP_NAME}.tar.gz" "${BACKUP_NAME}/"
if [ ! -s "${BACKUP_NAME}.tar.gz" ]; then
echo -e "${RED}Erreur: L'archive finale est vide${NC}"
exit 1
fi
# Supprimer le répertoire temporaire
rm -rf "${BACKUP_NAME}"
cd - > /dev/null
BACKUP_SIZE=$(du -h "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" | cut -f1)
echo -e "${GREEN}✓ Archive créée: ${BACKUP_NAME}.tar.gz (${BACKUP_SIZE})${NC}"
echo -e "${YELLOW}[4/4] Nettoyage des anciennes sauvegardes (>$RETENTION_DAYS jours)...${NC}"
# Supprimer les sauvegardes plus anciennes que RETENTION_DAYS
find "$BACKUP_DIR" -name "gitea_backup_*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete
REMAINING_BACKUPS=$(find "$BACKUP_DIR" -name "gitea_backup_*.tar.gz" -type f | wc -l)
echo -e "${GREEN}✓ Sauvegardes restantes: $REMAINING_BACKUPS${NC}"
echo -e "${GREEN}=== Sauvegarde terminée avec succès ===${NC}"
echo "Fichier: ${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"
echo "Taille: $BACKUP_SIZE"