Compare commits
2 Commits
517e337a25
...
386f731c2b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
386f731c2b | ||
|
|
2dc57afab4 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
.env
|
.env
|
||||||
data/
|
data/
|
||||||
db/
|
db/
|
||||||
|
backups/
|
||||||
|
|||||||
10
Makefile
10
Makefile
@@ -10,9 +10,9 @@ help:
|
|||||||
@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"
|
||||||
|
|
||||||
@@ -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
37
scripts/backup.sh
Normal file → Executable 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
0
scripts/occ.sh
Normal file → Executable file
76
scripts/restore.sh
Normal file → Executable file
76
scripts/restore.sh
Normal file → Executable 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
23
scripts/update.sh
Normal file → Executable 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"
|
||||||
|
|||||||
Reference in New Issue
Block a user