add scripts

This commit is contained in:
root
2025-12-14 22:26:17 +01:00
parent 5aa7471f80
commit ddc99b914f
5 changed files with 244 additions and 0 deletions

46
Makefile Normal file
View File

@@ -0,0 +1,46 @@
.PHONY: help up down restart logs ps occ backup restore update health
help:
@echo "Nextcloud Docker - Commandes disponibles:"
@echo " make up - Démarrer les services"
@echo " make down - Arrêter les services"
@echo " make restart - Redémarrer"
@echo " make logs - Voir les logs"
@echo " make ps - Status des containers"
@echo " make occ - Lancer une commande occ"
@echo " make backup - Backup complet"
@echo " make restore - Restaurer un backup"
@echo " make update - Mettre à jour Nextcloud"
@echo " make health - Vérifier la santé du système"
up:
docker-compose up -d
down:
docker-compose down
restart:
docker-compose restart
logs:
docker-compose logs -f --tail=100 nextcloud
ps:
docker-compose ps
occ:
@bash scripts/occ.sh $(filter-out $@,$(MAKECMDGOALS))
backup:
@bash scripts/backup.sh
restore:
@bash scripts/restore.sh
update:
@bash scripts/update.sh
health:
@docker-compose exec nextcloud php occ status
@docker-compose exec nextcloud php occ config:list system
@docker-compose exec db mysql -u$$MYSQL_USER -p$$MYSQL_PASSWORD -e "SELECT 1"

75
scripts/backup.sh Normal file
View File

@@ -0,0 +1,75 @@
#!/bin/bash
# scripts/backup.sh - Backup complet Nextcloud
set -e
source .env
BACKUP_DIR="${BACKUP_DESTINATION:-./backups}"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="nextcloud_backup_$DATE"
BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME"
echo "🔧 Démarrage du backup: $BACKUP_NAME"
# Créer le dossier de backup
mkdir -p "$BACKUP_PATH"
# 1. Activer le mode maintenance
echo "⏸️ Activation du mode maintenance..."
docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --on
# 2. Backup de la base de données
echo "💾 Backup de la base de données..."
docker-compose exec -T db mysqldump \
-u"$MYSQL_USER" \
-p"$MYSQL_PASSWORD" \
"$MYSQL_DATABASE" \
--single-transaction \
--quick \
--lock-tables=false \
> "$BACKUP_PATH/database.sql"
# 3. Backup des fichiers de config
echo "⚙️ Backup de la configuration..."
tar -czf "$BACKUP_PATH/config.tar.gz" \
-C ./data/config .
# 4. Backup des données utilisateurs (optionnel, peut être énorme)
echo "📁 Backup des données utilisateurs..."
# Pour un backup incrémental, utilisez rsync
rsync -a --info=progress2 \
./data/data/ \
"$BACKUP_PATH/data/" \
--exclude 'appdata_*/preview' \
--exclude '*/cache' \
--exclude '*/thumbnails'
# Ou pour un tar compressé (long):
# tar -czf "$BACKUP_PATH/data.tar.gz" \
# --exclude='appdata_*/preview' \
# -C ./data/data .
# 5. Backup des apps
echo "📦 Backup des apps personnalisées..."
if [ -d "./data/custom_apps" ]; then
tar -czf "$BACKUP_PATH/apps.tar.gz" \
-C ./data/custom_apps .
fi
# 6. Désactiver le mode maintenance
echo "▶️ Désactivation du mode maintenance..."
docker-compose exec -T -u www-data nextcloud php occ maintenance:mode --off
# 7. Créer une archive complète
echo "🗜️ Compression finale..."
cd "$BACKUP_DIR"
tar -czf "$BACKUP_NAME.tar.gz" "$BACKUP_NAME/"
rm -rf "$BACKUP_NAME"
# 8. Nettoyer les vieux backups
echo "🧹 Nettoyage des backups > ${BACKUP_RETENTION_DAYS:-30} jours..."
find "$BACKUP_DIR" -name "nextcloud_backup_*.tar.gz" -mtime +${BACKUP_RETENTION_DAYS:-30} -delete
echo "✅ Backup terminé: $BACKUP_DIR/$BACKUP_NAME.tar.gz"
du -h "$BACKUP_DIR/$BACKUP_NAME.tar.gz"

6
scripts/occ.sh Normal file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
# scripts/occ.sh - Wrapper pour commandes OCC
set -e
docker-compose exec -u www-data nextcloud php occ "$@"

70
scripts/restore.sh Normal file
View File

@@ -0,0 +1,70 @@
#!/bin/bash
# scripts/restore.sh - Restauration d'un backup
set -e
if [ -z "$1" ]; then
echo "Usage: $0 <backup_file.tar.gz>"
exit 1
fi
BACKUP_FILE="$1"
if [ ! -f "$BACKUP_FILE" ]; then
echo "❌ Fichier introuvable: $BACKUP_FILE"
exit 1
fi
echo "⚠️ ATTENTION: Cette opération va écraser les données actuelles !"
read -p "Continuer? (yes/no): " confirm
if [ "$confirm" != "yes" ]; then
echo "Annulé."
exit 0
fi
# Extraire le backup
TEMP_DIR=$(mktemp -d)
echo "📂 Extraction vers $TEMP_DIR..."
tar -xzf "$BACKUP_FILE" -C "$TEMP_DIR"
BACKUP_DIR=$(ls -1 "$TEMP_DIR" | head -n1)
# Arrêter les services
echo "⏹️ Arrêt des services..."
docker-compose down
# Restaurer la base de données
echo "💾 Restauration de la base de données..."
docker-compose up -d db
sleep 10
docker-compose exec -T db mysql \
-u"$MYSQL_USER" \
-p"$MYSQL_PASSWORD" \
"$MYSQL_DATABASE" \
< "$TEMP_DIR/$BACKUP_DIR/database.sql"
# Restaurer les fichiers
echo "📁 Restauration des fichiers..."
tar -xzf "$TEMP_DIR/$BACKUP_DIR/config.tar.gz" -C ./data/config
tar -xzf "$TEMP_DIR/$BACKUP_DIR/data.tar.gz" -C ./data/data
if [ -f "$TEMP_DIR/$BACKUP_DIR/apps.tar.gz" ]; then
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
# Réparer et scanner
echo "🔧 Réparation..."
sleep 30
docker-compose exec -u www-data nextcloud php occ maintenance:repair
docker-compose exec -u www-data nextcloud php occ files:scan --all
# Nettoyer
rm -rf "$TEMP_DIR"
echo "✅ Restauration terminée !"

47
scripts/update.sh Normal file
View File

@@ -0,0 +1,47 @@
#!/bin/bash
# scripts/update.sh - Mise à jour Nextcloud
set -e
echo "🔄 Mise à jour de Nextcloud"
# Backup avant update
echo "💾 Backup de sécurité..."
bash scripts/backup.sh
# Mode maintenance
echo "⏸️ Mode maintenance activé"
docker-compose exec -u www-data nextcloud php occ maintenance:mode --on
# Pull nouvelle image
echo "📥 Téléchargement de la nouvelle version..."
docker-compose pull nextcloud
# Restart
echo "🔄 Redémarrage..."
docker-compose up -d --force-recreate nextcloud cron
# Attendre que Nextcloud soit prêt
echo "⏳ Attente du démarrage..."
sleep 30
# Upgrade via OCC
echo "⬆️ Lancement de l'upgrade..."
docker-compose exec -u www-data nextcloud php occ upgrade
# Scan et indices
echo "🔍 Scan des fichiers..."
docker-compose exec -u www-data nextcloud php occ files:scan --all
echo "📊 Ajout des indices manquants..."
docker-compose exec -u www-data nextcloud php occ db:add-missing-indices
echo "🔧 Conversion des colonnes..."
docker-compose exec -u www-data nextcloud php occ db:convert-filecache-bigint --no-interaction
# Désactiver maintenance
echo "▶️ Désactivation du mode maintenance"
docker-compose exec -u www-data nextcloud php occ maintenance:mode --off
echo "✅ Mise à jour terminée !"
docker-compose exec -u www-data nextcloud php occ status