Checkpoint: Ajout des scripts de mise à jour pour le serveur VPS :
1. **backup-before-update.sh** : Script de sauvegarde automatique - Sauvegarde complète des fichiers de l'application - Export de la base de données MySQL - Sauvegarde du fichier .env - Conservation des 10 dernières sauvegardes 2. **update-app.sh** : Script de mise à jour automatique - Création d'une sauvegarde de sécurité - Arrêt/redémarrage du service - Copie des nouveaux fichiers - Installation des dépendances - Application des migrations de base de données - Vérification du bon fonctionnement 3. **create-deployment-package.sh** : Script de création de package - Crée une archive .tar.gz prête à transférer - Inclut tous les fichiers nécessaires - Exclut node_modules, .git, .env 4. **Documentation complète** : - GUIDE_MISE_A_JOUR.md : Guide détaillé avec procédures de mise à jour et rollback - README.md : Documentation des scripts avec exemples d'utilisation 5. **Package de déploiement créé** : - formation-manager-update-20251127_074417.tar.gz (2.6M) - Prêt à être transféré sur le serveur VPS
This commit is contained in:
298
deployment-scripts/GUIDE_MISE_A_JOUR.md
Normal file
298
deployment-scripts/GUIDE_MISE_A_JOUR.md
Normal file
@@ -0,0 +1,298 @@
|
||||
# Guide de Mise à Jour - Formation Manager Itinova
|
||||
|
||||
## 📋 Vue d'ensemble
|
||||
|
||||
Ce guide explique comment mettre à jour l'application Formation Manager Itinova sur votre serveur VPS.
|
||||
|
||||
## ⚠️ Avant de commencer
|
||||
|
||||
### Prérequis
|
||||
|
||||
- Accès SSH au serveur VPS
|
||||
- Droits sudo/root
|
||||
- L'application doit être déjà installée et fonctionnelle
|
||||
- Connexion à la base de données MySQL/TiDB
|
||||
|
||||
### Informations importantes
|
||||
|
||||
- **Temps d'arrêt estimé**: 5-10 minutes
|
||||
- **Sauvegarde automatique**: Oui (10 dernières sauvegardes conservées)
|
||||
- **Rollback possible**: Oui (via les sauvegardes)
|
||||
|
||||
## 🚀 Méthode 1: Mise à jour automatique (Recommandée)
|
||||
|
||||
### Étape 1: Télécharger les fichiers de mise à jour
|
||||
|
||||
Téléchargez le package de mise à jour depuis Manus et transférez-le sur votre serveur:
|
||||
|
||||
```bash
|
||||
# Sur votre machine locale
|
||||
scp formation-manager-update.tar.gz user@votre-serveur:/tmp/
|
||||
|
||||
# Ou utilisez SFTP/WinSCP pour transférer le fichier
|
||||
```
|
||||
|
||||
### Étape 2: Extraire le package
|
||||
|
||||
```bash
|
||||
# Se connecter au serveur
|
||||
ssh user@votre-serveur
|
||||
|
||||
# Extraire le package
|
||||
cd /tmp
|
||||
tar -xzf formation-manager-update.tar.gz
|
||||
cd formation-manager-itinova
|
||||
```
|
||||
|
||||
### Étape 3: Rendre les scripts exécutables
|
||||
|
||||
```bash
|
||||
chmod +x deployment-scripts/*.sh
|
||||
```
|
||||
|
||||
### Étape 4: Lancer la mise à jour
|
||||
|
||||
```bash
|
||||
sudo ./deployment-scripts/update-app.sh
|
||||
```
|
||||
|
||||
Le script va automatiquement:
|
||||
1. ✅ Créer une sauvegarde complète
|
||||
2. ✅ Arrêter le service
|
||||
3. ✅ Sauvegarder la configuration (.env)
|
||||
4. ✅ Copier les nouveaux fichiers
|
||||
5. ✅ Restaurer la configuration
|
||||
6. ✅ Installer les dépendances
|
||||
7. ✅ Appliquer les migrations de base de données
|
||||
8. ✅ Construire l'application
|
||||
9. ✅ Redémarrer le service
|
||||
|
||||
### Étape 5: Vérifier le bon fonctionnement
|
||||
|
||||
```bash
|
||||
# Vérifier le statut du service
|
||||
sudo systemctl status formation-manager
|
||||
|
||||
# Voir les logs en temps réel
|
||||
sudo journalctl -u formation-manager -f
|
||||
|
||||
# Tester l'application dans le navigateur
|
||||
# Ouvrir: http://votre-domaine.com
|
||||
```
|
||||
|
||||
## 🔧 Méthode 2: Mise à jour manuelle
|
||||
|
||||
Si vous préférez contrôler chaque étape:
|
||||
|
||||
### 1. Créer une sauvegarde
|
||||
|
||||
```bash
|
||||
sudo ./deployment-scripts/backup-before-update.sh
|
||||
```
|
||||
|
||||
### 2. Arrêter le service
|
||||
|
||||
```bash
|
||||
sudo systemctl stop formation-manager
|
||||
```
|
||||
|
||||
### 3. Sauvegarder la configuration
|
||||
|
||||
```bash
|
||||
sudo cp /var/www/formation-manager/.env /tmp/.env.backup
|
||||
```
|
||||
|
||||
### 4. Copier les nouveaux fichiers
|
||||
|
||||
```bash
|
||||
cd /var/www/formation-manager
|
||||
sudo find . -mindepth 1 -maxdepth 1 ! -name '.env' ! -name 'node_modules' -exec rm -rf {} +
|
||||
sudo cp -r /tmp/formation-manager-itinova/* .
|
||||
```
|
||||
|
||||
### 5. Restaurer la configuration
|
||||
|
||||
```bash
|
||||
sudo cp /tmp/.env.backup /var/www/formation-manager/.env
|
||||
```
|
||||
|
||||
### 6. Installer les dépendances
|
||||
|
||||
```bash
|
||||
cd /var/www/formation-manager
|
||||
sudo pnpm install --prod
|
||||
```
|
||||
|
||||
### 7. Appliquer les migrations
|
||||
|
||||
```bash
|
||||
sudo pnpm db:push
|
||||
```
|
||||
|
||||
### 8. Redémarrer le service
|
||||
|
||||
```bash
|
||||
sudo systemctl start formation-manager
|
||||
sudo systemctl status formation-manager
|
||||
```
|
||||
|
||||
## 🔄 Restauration d'une sauvegarde (Rollback)
|
||||
|
||||
Si la mise à jour pose problème, vous pouvez restaurer une sauvegarde:
|
||||
|
||||
### 1. Lister les sauvegardes disponibles
|
||||
|
||||
```bash
|
||||
ls -lh /var/backups/formation-manager/
|
||||
```
|
||||
|
||||
### 2. Choisir une sauvegarde
|
||||
|
||||
```bash
|
||||
# Exemple: backup_20240119_143022
|
||||
BACKUP_DIR="/var/backups/formation-manager/backup_20240119_143022"
|
||||
```
|
||||
|
||||
### 3. Arrêter le service
|
||||
|
||||
```bash
|
||||
sudo systemctl stop formation-manager
|
||||
```
|
||||
|
||||
### 4. Restaurer les fichiers
|
||||
|
||||
```bash
|
||||
cd /var/www/formation-manager
|
||||
sudo rm -rf *
|
||||
sudo tar -xzf $BACKUP_DIR/app_files.tar.gz -C .
|
||||
```
|
||||
|
||||
### 5. Restaurer la configuration
|
||||
|
||||
```bash
|
||||
sudo cp $BACKUP_DIR/.env.backup /var/www/formation-manager/.env
|
||||
```
|
||||
|
||||
### 6. Restaurer la base de données (optionnel)
|
||||
|
||||
```bash
|
||||
# Extraire le dump SQL
|
||||
gunzip -c $BACKUP_DIR/database.sql.gz > /tmp/restore.sql
|
||||
|
||||
# Restaurer dans MySQL
|
||||
mysql -h HOST -u USER -p DATABASE < /tmp/restore.sql
|
||||
|
||||
# Nettoyer
|
||||
rm /tmp/restore.sql
|
||||
```
|
||||
|
||||
### 7. Redémarrer le service
|
||||
|
||||
```bash
|
||||
sudo systemctl start formation-manager
|
||||
sudo systemctl status formation-manager
|
||||
```
|
||||
|
||||
## 📝 Nouveautés de cette version
|
||||
|
||||
### Corrections de bugs
|
||||
- ✅ **Décalage horaire**: Les heures s'affichent maintenant correctement dans le formulaire d'édition des séquences (9h00 reste 9h00)
|
||||
- ✅ **Menu navigation**: Ajout du menu latéral sur la page Import Excel
|
||||
|
||||
### Améliorations
|
||||
- ✅ **Réorganisation**: Menu "Import Excel" déplacé dans la section Configuration pour une meilleure organisation
|
||||
|
||||
### Migrations de base de données
|
||||
Aucune migration majeure dans cette version. Le script `pnpm db:push` synchronisera automatiquement le schéma.
|
||||
|
||||
## 🆘 Résolution de problèmes
|
||||
|
||||
### Le service ne démarre pas
|
||||
|
||||
```bash
|
||||
# Voir les logs d'erreur
|
||||
sudo journalctl -u formation-manager -n 100 --no-pager
|
||||
|
||||
# Vérifier les permissions
|
||||
sudo chown -R www-data:www-data /var/www/formation-manager
|
||||
sudo chmod -R 755 /var/www/formation-manager
|
||||
sudo chmod 600 /var/www/formation-manager/.env
|
||||
```
|
||||
|
||||
### Erreur de connexion à la base de données
|
||||
|
||||
```bash
|
||||
# Vérifier le fichier .env
|
||||
sudo cat /var/www/formation-manager/.env | grep DATABASE_URL
|
||||
|
||||
# Tester la connexion MySQL
|
||||
mysql -h HOST -u USER -p -e "SELECT 1;"
|
||||
```
|
||||
|
||||
### Port déjà utilisé
|
||||
|
||||
```bash
|
||||
# Voir quel processus utilise le port 3000
|
||||
sudo lsof -i :3000
|
||||
|
||||
# Tuer le processus si nécessaire
|
||||
sudo kill -9 PID
|
||||
```
|
||||
|
||||
### Problème de permissions
|
||||
|
||||
```bash
|
||||
# Réinitialiser les permissions
|
||||
cd /var/www/formation-manager
|
||||
sudo chown -R www-data:www-data .
|
||||
sudo chmod -R 755 .
|
||||
sudo chmod 600 .env
|
||||
```
|
||||
|
||||
## 📞 Support
|
||||
|
||||
En cas de problème:
|
||||
|
||||
1. **Vérifier les logs**: `sudo journalctl -u formation-manager -f`
|
||||
2. **Consulter la documentation**: Voir les guides dans `/var/www/formation-manager/deployment-package/`
|
||||
3. **Restaurer une sauvegarde**: Suivre la procédure de rollback ci-dessus
|
||||
|
||||
## ✅ Checklist post-mise à jour
|
||||
|
||||
- [ ] Le service est démarré: `sudo systemctl status formation-manager`
|
||||
- [ ] L'application est accessible dans le navigateur
|
||||
- [ ] La connexion fonctionne (test avec un utilisateur admin)
|
||||
- [ ] Les séquences s'affichent correctement
|
||||
- [ ] Le formulaire d'édition affiche les bonnes heures
|
||||
- [ ] Le menu Import Excel est dans la section Configuration
|
||||
- [ ] Les emails de confirmation fonctionnent (test d'inscription)
|
||||
|
||||
## 📊 Commandes utiles
|
||||
|
||||
```bash
|
||||
# Voir les logs en temps réel
|
||||
sudo journalctl -u formation-manager -f
|
||||
|
||||
# Redémarrer le service
|
||||
sudo systemctl restart formation-manager
|
||||
|
||||
# Voir le statut
|
||||
sudo systemctl status formation-manager
|
||||
|
||||
# Voir les dernières erreurs
|
||||
sudo journalctl -u formation-manager -p err -n 50
|
||||
|
||||
# Espace disque
|
||||
df -h
|
||||
|
||||
# Utilisation mémoire
|
||||
free -h
|
||||
|
||||
# Processus Node.js
|
||||
ps aux | grep node
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Date de création**: $(date +%Y-%m-%d)
|
||||
**Version**: 36474438
|
||||
344
deployment-scripts/README.md
Normal file
344
deployment-scripts/README.md
Normal file
@@ -0,0 +1,344 @@
|
||||
# Scripts de Déploiement - Formation Manager Itinova
|
||||
|
||||
## 📁 Contenu du répertoire
|
||||
|
||||
Ce répertoire contient tous les scripts nécessaires pour mettre à jour l'application sur votre serveur VPS.
|
||||
|
||||
### Scripts disponibles
|
||||
|
||||
| Script | Description | Usage |
|
||||
|--------|-------------|-------|
|
||||
| `backup-before-update.sh` | Crée une sauvegarde complète avant mise à jour | `sudo ./backup-before-update.sh` |
|
||||
| `update-app.sh` | Met à jour automatiquement l'application | `sudo ./update-app.sh` |
|
||||
| `create-deployment-package.sh` | Crée un package de déploiement | `./create-deployment-package.sh` |
|
||||
|
||||
### Documentation
|
||||
|
||||
| Fichier | Description |
|
||||
|---------|-------------|
|
||||
| `GUIDE_MISE_A_JOUR.md` | Guide complet de mise à jour avec instructions détaillées |
|
||||
| `README.md` | Ce fichier |
|
||||
|
||||
## 🚀 Utilisation rapide
|
||||
|
||||
### Pour mettre à jour l'application sur le serveur
|
||||
|
||||
```bash
|
||||
# 1. Rendre les scripts exécutables (une seule fois)
|
||||
chmod +x *.sh
|
||||
|
||||
# 2. Lancer la mise à jour automatique
|
||||
sudo ./update-app.sh
|
||||
```
|
||||
|
||||
### Pour créer un package de déploiement
|
||||
|
||||
```bash
|
||||
# Créer un package prêt à transférer
|
||||
./create-deployment-package.sh
|
||||
|
||||
# Le package sera créé dans le répertoire parent
|
||||
# Nom: formation-manager-update-YYYYMMDD_HHMMSS.tar.gz
|
||||
```
|
||||
|
||||
## 📋 Workflow de mise à jour complet
|
||||
|
||||
### 1. Préparation (sur votre machine locale)
|
||||
|
||||
```bash
|
||||
# Créer le package de déploiement
|
||||
cd formation-manager-itinova/deployment-scripts
|
||||
./create-deployment-package.sh
|
||||
|
||||
# Transférer sur le serveur
|
||||
scp ../formation-manager-update-*.tar.gz user@serveur:/tmp/
|
||||
```
|
||||
|
||||
### 2. Installation (sur le serveur)
|
||||
|
||||
```bash
|
||||
# Se connecter au serveur
|
||||
ssh user@serveur
|
||||
|
||||
# Extraire le package
|
||||
cd /tmp
|
||||
tar -xzf formation-manager-update-*.tar.gz
|
||||
cd formation-manager-itinova
|
||||
|
||||
# Rendre les scripts exécutables
|
||||
chmod +x deployment-scripts/*.sh
|
||||
|
||||
# Lancer la mise à jour
|
||||
sudo ./deployment-scripts/update-app.sh
|
||||
```
|
||||
|
||||
### 3. Vérification
|
||||
|
||||
```bash
|
||||
# Vérifier le statut
|
||||
sudo systemctl status formation-manager
|
||||
|
||||
# Voir les logs
|
||||
sudo journalctl -u formation-manager -f
|
||||
|
||||
# Tester dans le navigateur
|
||||
# Ouvrir: http://votre-domaine.com
|
||||
```
|
||||
|
||||
## 🔧 Détails des scripts
|
||||
|
||||
### backup-before-update.sh
|
||||
|
||||
**Fonction**: Crée une sauvegarde complète de l'application et de la base de données
|
||||
|
||||
**Ce qu'il fait**:
|
||||
- Sauvegarde tous les fichiers de l'application dans une archive .tar.gz
|
||||
- Sauvegarde le fichier .env
|
||||
- Exporte la base de données MySQL en SQL compressé
|
||||
- Crée un fichier d'information sur la sauvegarde
|
||||
- Conserve les 10 dernières sauvegardes (supprime les plus anciennes)
|
||||
|
||||
**Emplacement des sauvegardes**: `/var/backups/formation-manager/`
|
||||
|
||||
**Exemple d'utilisation**:
|
||||
```bash
|
||||
sudo ./backup-before-update.sh
|
||||
```
|
||||
|
||||
**Sortie**:
|
||||
```
|
||||
=== Sauvegarde avant mise à jour ===
|
||||
Date: 2024-01-19 14:30:22
|
||||
Répertoire application: /var/www/formation-manager
|
||||
Répertoire sauvegarde: /var/backups/formation-manager
|
||||
|
||||
Création du répertoire de sauvegarde...
|
||||
Sauvegarde des fichiers de l'application...
|
||||
✓ Fichiers de l'application sauvegardés
|
||||
...
|
||||
=== Sauvegarde terminée avec succès ===
|
||||
Emplacement: /var/backups/formation-manager/backup_20240119_143022
|
||||
Taille: 45M
|
||||
```
|
||||
|
||||
### update-app.sh
|
||||
|
||||
**Fonction**: Met à jour automatiquement l'application sur le serveur
|
||||
|
||||
**Ce qu'il fait**:
|
||||
1. Crée une sauvegarde de sécurité
|
||||
2. Arrête le service
|
||||
3. Sauvegarde la configuration (.env)
|
||||
4. Copie les nouveaux fichiers
|
||||
5. Restaure la configuration
|
||||
6. Installe les dépendances (pnpm install)
|
||||
7. Applique les migrations de base de données (pnpm db:push)
|
||||
8. Construit l'application
|
||||
9. Configure les permissions
|
||||
10. Redémarre le service
|
||||
11. Vérifie le bon fonctionnement
|
||||
|
||||
**Prérequis**:
|
||||
- Exécuter avec sudo/root
|
||||
- L'application doit être installée dans `/var/www/formation-manager`
|
||||
- Le service doit s'appeler `formation-manager`
|
||||
|
||||
**Exemple d'utilisation**:
|
||||
```bash
|
||||
sudo ./update-app.sh
|
||||
```
|
||||
|
||||
**Sortie**:
|
||||
```
|
||||
╔════════════════════════════════════════════════════════════╗
|
||||
║ Mise à jour Formation Manager Itinova ║
|
||||
╚════════════════════════════════════════════════════════════╝
|
||||
|
||||
Date: 2024-01-19 14:35:10
|
||||
Répertoire: /var/www/formation-manager
|
||||
|
||||
Voulez-vous continuer avec la mise à jour ? [y/N]: y
|
||||
|
||||
▶ Étape 1/8: Création d'une sauvegarde de sécurité
|
||||
────────────────────────────────────────────────────────────
|
||||
...
|
||||
╔════════════════════════════════════════════════════════════╗
|
||||
║ Mise à jour terminée avec succès ! ║
|
||||
╚════════════════════════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
### create-deployment-package.sh
|
||||
|
||||
**Fonction**: Crée un package de déploiement prêt à transférer
|
||||
|
||||
**Ce qu'il fait**:
|
||||
- Copie tous les fichiers nécessaires (sauf node_modules, .git, .env)
|
||||
- Inclut les scripts de déploiement
|
||||
- Crée un fichier README_DEPLOIEMENT.txt avec les instructions
|
||||
- Crée une archive .tar.gz compressée
|
||||
|
||||
**Exemple d'utilisation**:
|
||||
```bash
|
||||
./create-deployment-package.sh
|
||||
```
|
||||
|
||||
**Sortie**:
|
||||
```
|
||||
╔════════════════════════════════════════════════════════════╗
|
||||
║ Création du package de déploiement ║
|
||||
╚════════════════════════════════════════════════════════════╝
|
||||
|
||||
Nettoyage du répertoire temporaire...
|
||||
Création du répertoire temporaire...
|
||||
Copie des fichiers du projet...
|
||||
✓ Fichiers copiés
|
||||
Création du fichier README...
|
||||
✓ README créé
|
||||
Création de l'archive...
|
||||
|
||||
╔════════════════════════════════════════════════════════════╗
|
||||
║ Package créé avec succès ! ║
|
||||
╚════════════════════════════════════════════════════════════╝
|
||||
|
||||
Fichier: formation-manager-update-20240119_143522.tar.gz
|
||||
Emplacement: /home/ubuntu/formation-manager-itinova/formation-manager-update-20240119_143522.tar.gz
|
||||
Taille: 2.3M
|
||||
|
||||
Prochaines étapes:
|
||||
1. Transférer le package sur le serveur:
|
||||
scp formation-manager-update-20240119_143522.tar.gz user@serveur:/tmp/
|
||||
|
||||
2. Suivre les instructions dans README_DEPLOIEMENT.txt
|
||||
```
|
||||
|
||||
## 🔄 Restauration d'une sauvegarde
|
||||
|
||||
Si vous devez restaurer une sauvegarde après une mise à jour problématique:
|
||||
|
||||
```bash
|
||||
# 1. Lister les sauvegardes
|
||||
ls -lh /var/backups/formation-manager/
|
||||
|
||||
# 2. Arrêter le service
|
||||
sudo systemctl stop formation-manager
|
||||
|
||||
# 3. Restaurer les fichiers
|
||||
cd /var/www/formation-manager
|
||||
sudo rm -rf *
|
||||
sudo tar -xzf /var/backups/formation-manager/backup_YYYYMMDD_HHMMSS/app_files.tar.gz -C .
|
||||
|
||||
# 4. Restaurer .env
|
||||
sudo cp /var/backups/formation-manager/backup_YYYYMMDD_HHMMSS/.env.backup .env
|
||||
|
||||
# 5. Restaurer la base de données (si nécessaire)
|
||||
gunzip -c /var/backups/formation-manager/backup_YYYYMMDD_HHMMSS/database.sql.gz | mysql -h HOST -u USER -p DATABASE
|
||||
|
||||
# 6. Redémarrer
|
||||
sudo systemctl start formation-manager
|
||||
```
|
||||
|
||||
## 📝 Configuration
|
||||
|
||||
### Chemins par défaut
|
||||
|
||||
Les scripts utilisent ces chemins par défaut:
|
||||
|
||||
```bash
|
||||
APP_DIR="/var/www/formation-manager" # Répertoire de l'application
|
||||
BACKUP_DIR="/var/backups/formation-manager" # Répertoire des sauvegardes
|
||||
SERVICE_NAME="formation-manager" # Nom du service systemd
|
||||
```
|
||||
|
||||
### Personnalisation
|
||||
|
||||
Pour modifier ces chemins, éditez les variables au début de chaque script:
|
||||
|
||||
```bash
|
||||
# Ouvrir le script
|
||||
nano update-app.sh
|
||||
|
||||
# Modifier les variables
|
||||
APP_DIR="/votre/chemin/personnalisé"
|
||||
BACKUP_DIR="/votre/chemin/sauvegardes"
|
||||
SERVICE_NAME="votre-service"
|
||||
```
|
||||
|
||||
## ⚠️ Notes importantes
|
||||
|
||||
### Permissions
|
||||
|
||||
- Les scripts de mise à jour doivent être exécutés avec `sudo`
|
||||
- Les scripts de création de package peuvent être exécutés en utilisateur normal
|
||||
- Après mise à jour, les fichiers appartiennent à `www-data:www-data`
|
||||
|
||||
### Sauvegardes
|
||||
|
||||
- Les sauvegardes sont conservées dans `/var/backups/formation-manager/`
|
||||
- Seules les 10 dernières sauvegardes sont conservées
|
||||
- Chaque sauvegarde inclut: fichiers + .env + base de données
|
||||
- Pensez à sauvegarder régulièrement les sauvegardes importantes ailleurs
|
||||
|
||||
### Base de données
|
||||
|
||||
- Les migrations sont appliquées automatiquement avec `pnpm db:push`
|
||||
- La base de données est sauvegardée avant chaque mise à jour
|
||||
- En cas de problème, restaurez la base depuis la sauvegarde
|
||||
|
||||
### Temps d'arrêt
|
||||
|
||||
- Le service est arrêté pendant la mise à jour (5-10 minutes)
|
||||
- Planifiez la mise à jour pendant une période de faible activité
|
||||
- Prévenez les utilisateurs à l'avance
|
||||
|
||||
## 🆘 Dépannage
|
||||
|
||||
### Le script ne s'exécute pas
|
||||
|
||||
```bash
|
||||
# Vérifier les permissions
|
||||
ls -l *.sh
|
||||
|
||||
# Rendre exécutable
|
||||
chmod +x *.sh
|
||||
```
|
||||
|
||||
### Erreur "Permission denied"
|
||||
|
||||
```bash
|
||||
# Exécuter avec sudo
|
||||
sudo ./update-app.sh
|
||||
```
|
||||
|
||||
### Le service ne redémarre pas
|
||||
|
||||
```bash
|
||||
# Voir les logs
|
||||
sudo journalctl -u formation-manager -n 100
|
||||
|
||||
# Vérifier la configuration
|
||||
sudo systemctl status formation-manager
|
||||
|
||||
# Vérifier les permissions
|
||||
sudo chown -R www-data:www-data /var/www/formation-manager
|
||||
```
|
||||
|
||||
### Erreur de base de données
|
||||
|
||||
```bash
|
||||
# Vérifier la connexion
|
||||
mysql -h HOST -u USER -p -e "SELECT 1;"
|
||||
|
||||
# Vérifier le fichier .env
|
||||
cat /var/www/formation-manager/.env | grep DATABASE_URL
|
||||
```
|
||||
|
||||
## 📞 Support
|
||||
|
||||
Pour plus d'informations, consultez:
|
||||
- **Guide complet**: `GUIDE_MISE_A_JOUR.md`
|
||||
- **Documentation de déploiement**: `../deployment-package/`
|
||||
|
||||
---
|
||||
|
||||
**Version**: 36474438
|
||||
**Dernière mise à jour**: $(date +%Y-%m-%d)
|
||||
132
deployment-scripts/backup-before-update.sh
Executable file
132
deployment-scripts/backup-before-update.sh
Executable file
@@ -0,0 +1,132 @@
|
||||
#!/bin/bash
|
||||
|
||||
###############################################################################
|
||||
# Script de sauvegarde avant mise à jour
|
||||
# Formation Manager Itinova
|
||||
#
|
||||
# Ce script crée une sauvegarde complète de l'application et de la base de données
|
||||
# avant d'effectuer une mise à jour
|
||||
###############################################################################
|
||||
|
||||
set -e # Arrêter en cas d'erreur
|
||||
|
||||
# Couleurs pour les messages
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
APP_DIR="/var/www/formation-manager"
|
||||
BACKUP_DIR="/var/backups/formation-manager"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="backup_${TIMESTAMP}"
|
||||
|
||||
echo -e "${GREEN}=== Sauvegarde avant mise à jour ===${NC}"
|
||||
echo "Date: $(date)"
|
||||
echo "Répertoire application: $APP_DIR"
|
||||
echo "Répertoire sauvegarde: $BACKUP_DIR"
|
||||
echo ""
|
||||
|
||||
# Créer le répertoire de sauvegarde s'il n'existe pas
|
||||
echo -e "${YELLOW}Création du répertoire de sauvegarde...${NC}"
|
||||
mkdir -p "$BACKUP_DIR/$BACKUP_NAME"
|
||||
|
||||
# 1. Sauvegarder les fichiers de l'application
|
||||
echo -e "${YELLOW}Sauvegarde des fichiers de l'application...${NC}"
|
||||
if [ -d "$APP_DIR" ]; then
|
||||
tar -czf "$BACKUP_DIR/$BACKUP_NAME/app_files.tar.gz" -C "$APP_DIR" .
|
||||
echo -e "${GREEN}✓ Fichiers de l'application sauvegardés${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ Répertoire application introuvable: $APP_DIR${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. Sauvegarder le fichier .env
|
||||
echo -e "${YELLOW}Sauvegarde du fichier .env...${NC}"
|
||||
if [ -f "$APP_DIR/.env" ]; then
|
||||
cp "$APP_DIR/.env" "$BACKUP_DIR/$BACKUP_NAME/.env.backup"
|
||||
echo -e "${GREEN}✓ Fichier .env sauvegardé${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Fichier .env introuvable (peut être normal)${NC}"
|
||||
fi
|
||||
|
||||
# 3. Sauvegarder la base de données MySQL
|
||||
echo -e "${YELLOW}Sauvegarde de la base de données...${NC}"
|
||||
|
||||
# Lire les informations de connexion depuis .env
|
||||
if [ -f "$APP_DIR/.env" ]; then
|
||||
# Extraire l'URL de la base de données
|
||||
DB_URL=$(grep "^DATABASE_URL=" "$APP_DIR/.env" | cut -d '=' -f2- | tr -d '"' | tr -d "'")
|
||||
|
||||
if [ -n "$DB_URL" ]; then
|
||||
# Parser l'URL de connexion MySQL
|
||||
# Format: mysql://user:password@host:port/database
|
||||
DB_USER=$(echo $DB_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p')
|
||||
DB_PASS=$(echo $DB_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p')
|
||||
DB_HOST=$(echo $DB_URL | sed -n 's/.*@\([^:\/]*\).*/\1/p')
|
||||
DB_NAME=$(echo $DB_URL | sed -n 's/.*\/\([^?]*\).*/\1/p')
|
||||
DB_PORT=$(echo $DB_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p')
|
||||
|
||||
# Port par défaut si non spécifié
|
||||
if [ -z "$DB_PORT" ]; then
|
||||
DB_PORT="3306"
|
||||
fi
|
||||
|
||||
echo "Base de données: $DB_NAME sur $DB_HOST:$DB_PORT"
|
||||
|
||||
# Exporter la base de données
|
||||
mysqldump -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/$BACKUP_NAME/database.sql"
|
||||
|
||||
# Compresser le dump SQL
|
||||
gzip "$BACKUP_DIR/$BACKUP_NAME/database.sql"
|
||||
|
||||
echo -e "${GREEN}✓ Base de données sauvegardée${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ DATABASE_URL non trouvée dans .env${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Impossible de sauvegarder la base de données (fichier .env introuvable)${NC}"
|
||||
fi
|
||||
|
||||
# 4. Créer un fichier d'information sur la sauvegarde
|
||||
echo -e "${YELLOW}Création du fichier d'information...${NC}"
|
||||
cat > "$BACKUP_DIR/$BACKUP_NAME/backup_info.txt" << EOF
|
||||
Sauvegarde Formation Manager Itinova
|
||||
====================================
|
||||
|
||||
Date de création: $(date)
|
||||
Timestamp: $TIMESTAMP
|
||||
Répertoire source: $APP_DIR
|
||||
|
||||
Contenu de la sauvegarde:
|
||||
- app_files.tar.gz: Tous les fichiers de l'application
|
||||
- .env.backup: Fichier de configuration (si présent)
|
||||
- database.sql.gz: Dump de la base de données MySQL (si disponible)
|
||||
|
||||
Pour restaurer cette sauvegarde:
|
||||
1. Arrêter le service: sudo systemctl stop formation-manager
|
||||
2. Extraire les fichiers: tar -xzf app_files.tar.gz -C $APP_DIR
|
||||
3. Restaurer .env: cp .env.backup $APP_DIR/.env
|
||||
4. Restaurer la base: gunzip -c database.sql.gz | mysql -u USER -p DATABASE
|
||||
5. Redémarrer: sudo systemctl start formation-manager
|
||||
EOF
|
||||
|
||||
echo -e "${GREEN}✓ Fichier d'information créé${NC}"
|
||||
|
||||
# 5. Calculer la taille de la sauvegarde
|
||||
BACKUP_SIZE=$(du -sh "$BACKUP_DIR/$BACKUP_NAME" | cut -f1)
|
||||
echo ""
|
||||
echo -e "${GREEN}=== Sauvegarde terminée avec succès ===${NC}"
|
||||
echo "Emplacement: $BACKUP_DIR/$BACKUP_NAME"
|
||||
echo "Taille: $BACKUP_SIZE"
|
||||
echo ""
|
||||
|
||||
# 6. Nettoyer les anciennes sauvegardes (garder les 10 dernières)
|
||||
echo -e "${YELLOW}Nettoyage des anciennes sauvegardes...${NC}"
|
||||
cd "$BACKUP_DIR"
|
||||
ls -t | tail -n +11 | xargs -r rm -rf
|
||||
echo -e "${GREEN}✓ Anciennes sauvegardes nettoyées (conservation des 10 dernières)${NC}"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}Sauvegarde prête pour la mise à jour !${NC}"
|
||||
151
deployment-scripts/create-deployment-package.sh
Executable file
151
deployment-scripts/create-deployment-package.sh
Executable file
@@ -0,0 +1,151 @@
|
||||
#!/bin/bash
|
||||
|
||||
###############################################################################
|
||||
# Script de création du package de déploiement
|
||||
# Formation Manager Itinova
|
||||
#
|
||||
# Ce script crée une archive complète prête à être transférée sur le serveur
|
||||
###############################################################################
|
||||
|
||||
set -e # Arrêter en cas d'erreur
|
||||
|
||||
# Couleurs pour les messages
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
PACKAGE_NAME="formation-manager-update-$(date +%Y%m%d_%H%M%S).tar.gz"
|
||||
TEMP_DIR="/tmp/formation-manager-package"
|
||||
|
||||
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${BLUE}║ Création du package de déploiement ║${NC}"
|
||||
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
|
||||
# Nettoyer le répertoire temporaire s'il existe
|
||||
if [ -d "$TEMP_DIR" ]; then
|
||||
echo -e "${YELLOW}Nettoyage du répertoire temporaire...${NC}"
|
||||
rm -rf "$TEMP_DIR"
|
||||
fi
|
||||
|
||||
# Créer le répertoire temporaire
|
||||
echo -e "${YELLOW}Création du répertoire temporaire...${NC}"
|
||||
mkdir -p "$TEMP_DIR"
|
||||
|
||||
# Copier les fichiers du projet
|
||||
echo -e "${YELLOW}Copie des fichiers du projet...${NC}"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Copier tous les fichiers sauf les exclusions
|
||||
cp -r . "$TEMP_DIR/"
|
||||
|
||||
# Supprimer les répertoires/fichiers à exclure
|
||||
cd "$TEMP_DIR"
|
||||
rm -rf node_modules .git .env .env.local dist build .next coverage .vscode .idea
|
||||
find . -name '*.log' -delete
|
||||
find . -name '.DS_Store' -delete
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
echo -e "${GREEN}✓ Fichiers copiés${NC}"
|
||||
|
||||
# Créer un fichier README pour le package
|
||||
echo -e "${YELLOW}Création du fichier README...${NC}"
|
||||
cat > "$TEMP_DIR/README_DEPLOIEMENT.txt" << 'EOF'
|
||||
╔════════════════════════════════════════════════════════════╗
|
||||
║ Package de Mise à Jour - Formation Manager Itinova ║
|
||||
╚════════════════════════════════════════════════════════════╝
|
||||
|
||||
CONTENU DU PACKAGE
|
||||
==================
|
||||
|
||||
1. deployment-scripts/
|
||||
- update-app.sh: Script de mise à jour automatique
|
||||
- backup-before-update.sh: Script de sauvegarde
|
||||
- GUIDE_MISE_A_JOUR.md: Guide complet de mise à jour
|
||||
|
||||
2. Fichiers de l'application
|
||||
- Tous les fichiers source nécessaires
|
||||
- Configuration package.json
|
||||
- Schéma de base de données
|
||||
|
||||
INSTALLATION RAPIDE
|
||||
===================
|
||||
|
||||
1. Transférer ce package sur le serveur:
|
||||
scp formation-manager-update-*.tar.gz user@serveur:/tmp/
|
||||
|
||||
2. Se connecter au serveur:
|
||||
ssh user@serveur
|
||||
|
||||
3. Extraire le package:
|
||||
cd /tmp
|
||||
tar -xzf formation-manager-update-*.tar.gz
|
||||
cd formation-manager-itinova
|
||||
|
||||
4. Rendre les scripts exécutables:
|
||||
chmod +x deployment-scripts/*.sh
|
||||
|
||||
5. Lancer la mise à jour:
|
||||
sudo ./deployment-scripts/update-app.sh
|
||||
|
||||
IMPORTANT
|
||||
=========
|
||||
|
||||
- Le script créera automatiquement une sauvegarde avant la mise à jour
|
||||
- Le service sera arrêté pendant 5-10 minutes
|
||||
- La configuration (.env) sera préservée
|
||||
- Les migrations de base de données seront appliquées automatiquement
|
||||
|
||||
DOCUMENTATION
|
||||
=============
|
||||
|
||||
Consultez le guide complet dans:
|
||||
deployment-scripts/GUIDE_MISE_A_JOUR.md
|
||||
|
||||
SUPPORT
|
||||
=======
|
||||
|
||||
En cas de problème:
|
||||
1. Vérifier les logs: sudo journalctl -u formation-manager -f
|
||||
2. Consulter le guide de dépannage dans GUIDE_MISE_A_JOUR.md
|
||||
3. Restaurer une sauvegarde si nécessaire
|
||||
|
||||
Version: 36474438
|
||||
Date: $(date)
|
||||
EOF
|
||||
|
||||
echo -e "${GREEN}✓ README créé${NC}"
|
||||
|
||||
# Créer l'archive
|
||||
echo -e "${YELLOW}Création de l'archive...${NC}"
|
||||
cd /tmp
|
||||
tar -czf "$PACKAGE_NAME" formation-manager-package/
|
||||
|
||||
# Déplacer l'archive dans le répertoire du projet
|
||||
mv "$PACKAGE_NAME" "$PROJECT_DIR/"
|
||||
|
||||
# Nettoyer
|
||||
rm -rf "$TEMP_DIR"
|
||||
|
||||
# Calculer la taille
|
||||
PACKAGE_SIZE=$(du -sh "$PROJECT_DIR/$PACKAGE_NAME" | cut -f1)
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${BLUE}║ ${GREEN}Package créé avec succès !${BLUE} ║${NC}"
|
||||
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}Fichier:${NC} $PACKAGE_NAME"
|
||||
echo -e "${GREEN}Emplacement:${NC} $PROJECT_DIR/$PACKAGE_NAME"
|
||||
echo -e "${GREEN}Taille:${NC} $PACKAGE_SIZE"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Prochaines étapes:${NC}"
|
||||
echo "1. Transférer le package sur le serveur:"
|
||||
echo " ${BLUE}scp $PACKAGE_NAME user@serveur:/tmp/${NC}"
|
||||
echo ""
|
||||
echo "2. Suivre les instructions dans README_DEPLOIEMENT.txt"
|
||||
echo ""
|
||||
178
deployment-scripts/update-app.sh
Executable file
178
deployment-scripts/update-app.sh
Executable file
@@ -0,0 +1,178 @@
|
||||
#!/bin/bash
|
||||
|
||||
###############################################################################
|
||||
# Script de mise à jour automatique
|
||||
# Formation Manager Itinova
|
||||
#
|
||||
# Ce script met à jour l'application sur le serveur VPS
|
||||
###############################################################################
|
||||
|
||||
set -e # Arrêter en cas d'erreur
|
||||
|
||||
# Couleurs pour les messages
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
APP_DIR="/var/www/formation-manager"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SERVICE_NAME="formation-manager"
|
||||
|
||||
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${BLUE}║ Mise à jour Formation Manager Itinova ║${NC}"
|
||||
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo "Date: $(date)"
|
||||
echo "Répertoire: $APP_DIR"
|
||||
echo ""
|
||||
|
||||
# Vérifier que le script est exécuté en tant que root ou avec sudo
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo -e "${RED}✗ Ce script doit être exécuté en tant que root ou avec sudo${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Fonction pour afficher une étape
|
||||
step() {
|
||||
echo ""
|
||||
echo -e "${BLUE}▶ $1${NC}"
|
||||
echo "────────────────────────────────────────────────────────────"
|
||||
}
|
||||
|
||||
# Fonction pour confirmer
|
||||
confirm() {
|
||||
read -p "$(echo -e ${YELLOW}$1 [y/N]: ${NC})" -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo -e "${RED}Mise à jour annulée${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 1. Confirmation
|
||||
confirm "Voulez-vous continuer avec la mise à jour ?"
|
||||
|
||||
# 2. Créer une sauvegarde
|
||||
step "Étape 1/8: Création d'une sauvegarde de sécurité"
|
||||
if [ -f "$SCRIPT_DIR/backup-before-update.sh" ]; then
|
||||
bash "$SCRIPT_DIR/backup-before-update.sh"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Script de sauvegarde introuvable, sauvegarde manuelle recommandée${NC}"
|
||||
confirm "Continuer sans sauvegarde automatique ?"
|
||||
fi
|
||||
|
||||
# 3. Arrêter le service
|
||||
step "Étape 2/8: Arrêt du service"
|
||||
if systemctl is-active --quiet $SERVICE_NAME; then
|
||||
systemctl stop $SERVICE_NAME
|
||||
echo -e "${GREEN}✓ Service arrêté${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Service déjà arrêté${NC}"
|
||||
fi
|
||||
|
||||
# 4. Sauvegarder le fichier .env
|
||||
step "Étape 3/8: Sauvegarde de la configuration"
|
||||
if [ -f "$APP_DIR/.env" ]; then
|
||||
cp "$APP_DIR/.env" "/tmp/.env.backup"
|
||||
echo -e "${GREEN}✓ Configuration sauvegardée dans /tmp/.env.backup${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Fichier .env introuvable${NC}"
|
||||
fi
|
||||
|
||||
# 5. Copier les nouveaux fichiers
|
||||
step "Étape 4/8: Copie des nouveaux fichiers"
|
||||
if [ -d "$SCRIPT_DIR/../" ]; then
|
||||
# Supprimer les anciens fichiers (sauf .env et node_modules)
|
||||
cd "$APP_DIR"
|
||||
find . -mindepth 1 -maxdepth 1 ! -name '.env' ! -name 'node_modules' ! -name '.git' -exec rm -rf {} +
|
||||
|
||||
# Copier les nouveaux fichiers
|
||||
cp -r "$SCRIPT_DIR/../"* "$APP_DIR/"
|
||||
cp -r "$SCRIPT_DIR/../".* "$APP_DIR/" 2>/dev/null || true
|
||||
|
||||
echo -e "${GREEN}✓ Nouveaux fichiers copiés${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ Répertoire source introuvable${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 6. Restaurer le fichier .env
|
||||
step "Étape 5/8: Restauration de la configuration"
|
||||
if [ -f "/tmp/.env.backup" ]; then
|
||||
cp "/tmp/.env.backup" "$APP_DIR/.env"
|
||||
rm "/tmp/.env.backup"
|
||||
echo -e "${GREEN}✓ Configuration restaurée${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ Pas de configuration à restaurer${NC}"
|
||||
fi
|
||||
|
||||
# 7. Installer les dépendances
|
||||
step "Étape 6/8: Installation des dépendances"
|
||||
cd "$APP_DIR"
|
||||
|
||||
# Vérifier si pnpm est installé
|
||||
if ! command -v pnpm &> /dev/null; then
|
||||
echo -e "${YELLOW}Installation de pnpm...${NC}"
|
||||
npm install -g pnpm
|
||||
fi
|
||||
|
||||
echo "Installation des dépendances..."
|
||||
pnpm install --prod
|
||||
echo -e "${GREEN}✓ Dépendances installées${NC}"
|
||||
|
||||
# 8. Appliquer les migrations de base de données
|
||||
step "Étape 7/8: Application des migrations de base de données"
|
||||
echo "Synchronisation du schéma de base de données..."
|
||||
pnpm db:push
|
||||
echo -e "${GREEN}✓ Migrations appliquées${NC}"
|
||||
|
||||
# 9. Construire l'application
|
||||
step "Étape 8/8: Construction de l'application"
|
||||
echo "Construction du client..."
|
||||
cd "$APP_DIR"
|
||||
pnpm run build 2>/dev/null || echo -e "${YELLOW}⚠ Pas de build client nécessaire${NC}"
|
||||
echo -e "${GREEN}✓ Application construite${NC}"
|
||||
|
||||
# 10. Définir les permissions correctes
|
||||
echo ""
|
||||
echo -e "${YELLOW}Configuration des permissions...${NC}"
|
||||
chown -R www-data:www-data "$APP_DIR"
|
||||
chmod -R 755 "$APP_DIR"
|
||||
chmod 600 "$APP_DIR/.env" 2>/dev/null || true
|
||||
echo -e "${GREEN}✓ Permissions configurées${NC}"
|
||||
|
||||
# 11. Redémarrer le service
|
||||
echo ""
|
||||
echo -e "${YELLOW}Redémarrage du service...${NC}"
|
||||
systemctl start $SERVICE_NAME
|
||||
sleep 3
|
||||
|
||||
# Vérifier que le service a bien démarré
|
||||
if systemctl is-active --quiet $SERVICE_NAME; then
|
||||
echo -e "${GREEN}✓ Service démarré avec succès${NC}"
|
||||
else
|
||||
echo -e "${RED}✗ Erreur lors du démarrage du service${NC}"
|
||||
echo "Vérifier les logs avec: sudo journalctl -u $SERVICE_NAME -n 50"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 12. Vérifier le statut
|
||||
echo ""
|
||||
systemctl status $SERVICE_NAME --no-pager
|
||||
|
||||
# Résumé final
|
||||
echo ""
|
||||
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${BLUE}║ ${GREEN}Mise à jour terminée avec succès !${BLUE} ║${NC}"
|
||||
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}L'application est maintenant à jour et en cours d'exécution.${NC}"
|
||||
echo ""
|
||||
echo "Commandes utiles:"
|
||||
echo " • Voir les logs: sudo journalctl -u $SERVICE_NAME -f"
|
||||
echo " • Redémarrer: sudo systemctl restart $SERVICE_NAME"
|
||||
echo " • Statut: sudo systemctl status $SERVICE_NAME"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user