Compare commits

...

2 Commits

Author SHA1 Message Date
BeauTroll
386f731c2b improve Makefile and secure bash scripts 2025-12-15 11:35:24 +01:00
BeauTroll
2dc57afab4 add backup to gitignore 2025-12-15 11:32:32 +01:00
6 changed files with 88 additions and 75 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
.env .env
data/ data/
db/ db/
backups/

View File

@@ -5,16 +5,16 @@ export
help: help:
@echo "Nextcloud Docker - Commandes disponibles:" @echo "Nextcloud Docker - Commandes disponibles:"
@echo " make up - Démarrer les services" @echo " make up - Démarrer les services"
@echo " make down - Arrêter les services" @echo " make down - Arrêter les services"
@echo " make restart - Redémarrer" @echo " make restart - Redémarrer"
@echo " make logs - Voir les logs" @echo " make logs - Voir les logs"
@echo " make ps - Status des containers" @echo " make ps - Status des containers"
@echo " make occ - Lancer une commande occ" @echo " make occ <cmd> - Lancer une commande occ"
@echo " make backup - Backup complet" @echo " make backup - Backup complet"
@echo " make restore - Restaurer un backup" @echo " make restore <file> - Restaurer un backup"
@echo " make update - Mettre à jour Nextcloud" @echo " make update - Mettre à jour Nextcloud"
@echo " make health - Vérifier la santé du système" @echo " make health - Vérifier la santé du système"
up: up:
docker-compose up -d docker-compose up -d
@@ -38,7 +38,7 @@ backup:
@bash scripts/backup.sh @bash scripts/backup.sh
restore: restore:
@bash scripts/restore.sh @bash scripts/restore.sh $(filter-out $@,$(MAKECMDGOALS))
update: update:
@bash scripts/update.sh @bash scripts/update.sh
@@ -47,3 +47,7 @@ health:
@docker-compose exec nextcloud php occ status @docker-compose exec nextcloud php occ status
@docker-compose exec nextcloud php occ config:list system @docker-compose exec nextcloud php occ config:list system
@docker-compose exec db mysql -u$(MYSQL_USER) -p$(MYSQL_PASSWORD) -e "SELECT 1" 2>/dev/null && echo "✅ Base de données accessible" || echo "❌ Erreur base de données" @docker-compose exec db mysql -u$(MYSQL_USER) -p$(MYSQL_PASSWORD) -e "SELECT 1" 2>/dev/null && echo "✅ Base de données accessible" || echo "❌ Erreur base de données"
# Catch-all target pour permettre les arguments aux commandes occ et restore
%:
@:

37
scripts/backup.sh Normal file → Executable file
View File

@@ -22,6 +22,7 @@ DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="nextcloud_backup_$DATE" BACKUP_NAME="nextcloud_backup_$DATE"
BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME" BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME"
MAINTENANCE_ENABLED=false MAINTENANCE_ENABLED=false
BACKUP_RETENTION_DAYS=7
# Fonction de nettoyage en cas d'erreur # Fonction de nettoyage en cas d'erreur
cleanup() { cleanup() {
@@ -69,36 +70,32 @@ if ! docker-compose exec -T db sh -c "MYSQL_PWD=\"\$MYSQL_PASSWORD\" mysqldump \
\"\$MYSQL_DATABASE\" \ \"\$MYSQL_DATABASE\" \
--single-transaction \ --single-transaction \
--quick \ --quick \
--lock-tables=false" > "$BACKUP_PATH/database.sql"; then --lock-tables=false" >"$BACKUP_PATH/database.sql"; then
echo "❌ Erreur lors du backup de la base de données" echo "❌ Erreur lors du backup de la base de données"
exit 1 exit 1
fi fi
# 3. Backup des fichiers de config # 3. Backup des fichiers de config
echo "⚙️ Backup de la configuration..." echo "⚙️ Backup de la configuration..."
tar -czf "$BACKUP_PATH/config.tar.gz" \ docker-compose exec -T -u www-data nextcloud tar -czf - -C /var/www/html/config . > "$BACKUP_PATH/config.tar.gz"
-C ./data/config .
# 4. Backup des données utilisateurs (optionnel, peut être énorme) # 4. Backup des données utilisateurs (peut être volumineux)
echo "📁 Backup des données utilisateurs..." echo "📁 Backup des données utilisateurs..."
# Pour un backup incrémental, utilisez rsync # Utiliser tar avec compression et exclusions depuis le container
rsync -a --info=progress2 \ docker-compose exec -T -u www-data nextcloud tar -czf - \
./data/data/ \ -C /var/www/html/data \
"$BACKUP_PATH/data/" \ --exclude='appdata_*/preview' \
--exclude 'appdata_*/preview' \ --exclude='*/cache' \
--exclude '*/cache' \ --exclude='*/thumbnails' \
--exclude '*/thumbnails' . > "$BACKUP_PATH/data.tar.gz"
# Ou pour un tar compressé (long): # 5. Backup des apps personnalisées
# tar -czf "$BACKUP_PATH/data.tar.gz" \
# --exclude='appdata_*/preview' \
# -C ./data/data .
# 5. Backup des apps
echo "📦 Backup des apps personnalisées..." echo "📦 Backup des apps personnalisées..."
if [ -d "./data/custom_apps" ]; then if docker-compose exec -T nextcloud [ -d /var/www/html/custom_apps ]; then
tar -czf "$BACKUP_PATH/apps.tar.gz" \ docker-compose exec -T -u www-data nextcloud tar -czf - \
-C ./data/custom_apps . -C /var/www/html/custom_apps . > "$BACKUP_PATH/apps.tar.gz"
else
echo " Pas d'apps personnalisées à sauvegarder"
fi fi
# 6. Désactiver le mode maintenance # 6. Désactiver le mode maintenance

0
scripts/occ.sh Normal file → Executable file
View File

76
scripts/restore.sh Normal file → Executable file
View File

@@ -120,36 +120,8 @@ if ! docker-compose exec -T db sh -c "MYSQL_PWD=\"\$MYSQL_PASSWORD\" mysql \
exit 1 exit 1
fi fi
# Restaurer les fichiers # Redémarrer tous les services d'abord
echo "📁 Restauration des fichiers..." echo "▶️ Démarrage des services..."
# Vérifier et créer les répertoires si nécessaire
mkdir -p ./data/config ./data/data
if ! tar -xzf "$TEMP_DIR/$BACKUP_DIR/config.tar.gz" -C ./data/config; then
echo "❌ Erreur lors de la restauration de la configuration"
exit 1
fi
# Restaurer les données si elles existent dans l'archive
if [ -f "$TEMP_DIR/$BACKUP_DIR/data.tar.gz" ]; then
if ! tar -xzf "$TEMP_DIR/$BACKUP_DIR/data.tar.gz" -C ./data/data; then
echo "❌ Erreur lors de la restauration des données"
exit 1
fi
elif [ -d "$TEMP_DIR/$BACKUP_DIR/data" ]; then
# Si les données sont dans un dossier (backup rsync)
rsync -a "$TEMP_DIR/$BACKUP_DIR/data/" ./data/data/
fi
# Restaurer les apps personnalisées si présentes
if [ -f "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" ]; then
mkdir -p ./data/custom_apps
tar -xzf "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" -C ./data/custom_apps
fi
# Redémarrer
echo "▶️ Redémarrage des services..."
docker-compose up -d docker-compose up -d
# Attendre que Nextcloud soit prêt # Attendre que Nextcloud soit prêt
@@ -160,15 +132,49 @@ for i in {1..60}; do
break break
fi fi
if [ "$i" -eq 60 ]; then if [ "$i" -eq 60 ]; then
echo "⚠️ Warning: Nextcloud met du temps à démarrer, on continue..." echo "❌ Timeout: Nextcloud n'est pas prêt"
break exit 1
fi fi
sleep 1 sleep 1
done done
# Réparer et scanner # Restaurer les fichiers via le container pour éviter les problèmes de permissions
echo "📁 Restauration des fichiers..."
# Restaurer la configuration
if ! docker-compose exec -T -u www-data nextcloud tar -xzf - -C /var/www/html/config < "$TEMP_DIR/$BACKUP_DIR/config.tar.gz"; then
echo "❌ Erreur lors de la restauration de la configuration"
exit 1
fi
# Restaurer les données
if [ -f "$TEMP_DIR/$BACKUP_DIR/data.tar.gz" ]; then
echo "📦 Restauration des données utilisateurs..."
if ! docker-compose exec -T -u www-data nextcloud tar -xzf - -C /var/www/html/data < "$TEMP_DIR/$BACKUP_DIR/data.tar.gz"; then
echo "❌ Erreur lors de la restauration des données"
exit 1
fi
elif [ -d "$TEMP_DIR/$BACKUP_DIR/data" ]; then
echo "⚠️ Format de backup rsync détecté, copie manuelle nécessaire"
echo " Utilisez: docker cp pour copier $TEMP_DIR/$BACKUP_DIR/data/ vers le container"
fi
# Restaurer les apps personnalisées si présentes
if [ -f "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" ]; then
echo "📦 Restauration des apps personnalisées..."
docker-compose exec -T -u www-data nextcloud tar -xzf - -C /var/www/html/custom_apps < "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" || echo " Pas d'apps à restaurer"
fi
# Réparer
echo "🔧 Réparation..." echo "🔧 Réparation..."
docker-compose exec -u www-data nextcloud php occ maintenance:repair || echo "⚠️ Erreur lors de la réparation" docker-compose exec -T -u www-data nextcloud php occ maintenance:repair || echo "⚠️ Erreur lors de la réparation"
docker-compose exec -u www-data nextcloud php occ files:scan --all || echo "⚠️ Erreur lors du scan"
# Désactiver le mode maintenance avant le scan
echo "▶️ Désactivation du mode maintenance..."
docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off || echo "⚠️ Impossible de désactiver le mode maintenance"
# Scanner les fichiers
echo "🔍 Scan des fichiers..."
docker-compose exec -T -u www-data nextcloud php occ files:scan --all || echo "⚠️ Erreur lors du scan"
echo "✅ Restauration terminée !" echo "✅ Restauration terminée !"

23
scripts/update.sh Normal file → Executable file
View File

@@ -34,7 +34,14 @@ if ! bash scripts/backup.sh; then
exit 1 exit 1
fi fi
# Mode maintenance # Pull nouvelle image
echo "📥 Téléchargement de la nouvelle version..."
if ! docker-compose pull nextcloud; then
echo "❌ Erreur lors du téléchargement de l'image"
exit 1
fi
# Mode maintenance avant le restart
echo "⏸️ Mode maintenance activé" echo "⏸️ Mode maintenance activé"
if docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --on; then if docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --on; then
MAINTENANCE_ENABLED=true MAINTENANCE_ENABLED=true
@@ -43,13 +50,6 @@ else
exit 1 exit 1
fi fi
# Pull nouvelle image
echo "📥 Téléchargement de la nouvelle version..."
if ! docker-compose pull nextcloud; then
echo "❌ Erreur lors du téléchargement de l'image"
exit 1
fi
# Restart # Restart
echo "🔄 Redémarrage..." echo "🔄 Redémarrage..."
docker-compose up -d --force-recreate nextcloud cron docker-compose up -d --force-recreate nextcloud cron
@@ -68,7 +68,12 @@ for i in {1..60}; do
sleep 1 sleep 1
done done
# Upgrade via OCC # Désactiver temporairement le mode maintenance pour permettre l'upgrade
echo "▶️ Préparation de l'upgrade..."
docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off || true
MAINTENANCE_ENABLED=false
# Upgrade via OCC (qui activera son propre mode maintenance)
echo "⬆️ Lancement de l'upgrade..." echo "⬆️ Lancement de l'upgrade..."
if ! docker-compose exec -T -u www-data nextcloud php occ upgrade; then if ! docker-compose exec -T -u www-data nextcloud php occ upgrade; then
echo "❌ Erreur lors de l'upgrade" echo "❌ Erreur lors de l'upgrade"