465 lines
10 KiB
Markdown
465 lines
10 KiB
Markdown
# Guide de Déploiement - Gestion des Formations Manager Itinova
|
|
|
|
## Table des matières
|
|
|
|
1. [Prérequis](#prérequis)
|
|
2. [Installation locale](#installation-locale)
|
|
3. [Configuration](#configuration)
|
|
4. [Déploiement en production](#déploiement-en-production)
|
|
5. [Migration de base de données](#migration-de-base-de-données)
|
|
6. [Maintenance](#maintenance)
|
|
7. [Dépannage](#dépannage)
|
|
|
|
---
|
|
|
|
## Prérequis
|
|
|
|
### Environnement de développement
|
|
|
|
- **Node.js** : version 22.13.0 ou supérieure
|
|
- **pnpm** : gestionnaire de paquets (installé avec Node.js)
|
|
- **Base de données** : MySQL 8.0+ ou TiDB (compatible MySQL)
|
|
- **Git** : pour le contrôle de version
|
|
|
|
### Services externes (optionnels)
|
|
|
|
- **Resend** : pour l'envoi d'emails (clé API requise)
|
|
- **Plateforme Manus** : pour l'authentification OAuth (déjà configuré)
|
|
|
|
---
|
|
|
|
## Installation locale
|
|
|
|
### 1. Cloner le projet
|
|
|
|
```bash
|
|
# Si vous avez accès au dépôt Git
|
|
git clone <url-du-depot>
|
|
cd formation-manager-itinova
|
|
|
|
# Sinon, extraire l'archive
|
|
unzip formation-manager-itinova.zip
|
|
cd formation-manager-itinova
|
|
```
|
|
|
|
### 2. Installer les dépendances
|
|
|
|
```bash
|
|
pnpm install
|
|
```
|
|
|
|
### 3. Configurer les variables d'environnement
|
|
|
|
Créer un fichier `.env` à la racine du projet :
|
|
|
|
```env
|
|
# Base de données
|
|
DATABASE_URL=mysql://user:password@localhost:3306/formation_manager
|
|
|
|
# JWT Secret (générer une clé aléatoire sécurisée)
|
|
JWT_SECRET=votre_cle_secrete_tres_longue_et_aleatoire
|
|
|
|
# OAuth Manus (déjà configuré sur la plateforme)
|
|
OAUTH_SERVER_URL=https://api.manus.im
|
|
VITE_OAUTH_PORTAL_URL=https://login.manus.im
|
|
VITE_APP_ID=votre_app_id
|
|
|
|
# Propriétaire
|
|
OWNER_OPEN_ID=votre_open_id
|
|
OWNER_NAME=Nom du propriétaire
|
|
|
|
# Application
|
|
VITE_APP_TITLE=Gestion des Formations Manager Itinova
|
|
VITE_APP_LOGO=/logo.svg
|
|
|
|
# APIs Manus (optionnel)
|
|
BUILT_IN_FORGE_API_URL=https://forge.manus.im
|
|
BUILT_IN_FORGE_API_KEY=votre_cle_api
|
|
VITE_FRONTEND_FORGE_API_KEY=votre_cle_frontend
|
|
VITE_FRONTEND_FORGE_API_URL=https://forge.manus.im
|
|
|
|
# Analytics (optionnel)
|
|
VITE_ANALYTICS_ENDPOINT=https://analytics.manus.im
|
|
VITE_ANALYTICS_WEBSITE_ID=votre_website_id
|
|
```
|
|
|
|
### 4. Initialiser la base de données
|
|
|
|
```bash
|
|
# Créer la base de données
|
|
mysql -u root -p -e "CREATE DATABASE formation_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
|
|
|
# Appliquer les migrations
|
|
pnpm db:push
|
|
```
|
|
|
|
### 5. Créer l'utilisateur administrateur
|
|
|
|
L'utilisateur administrateur est créé automatiquement au premier lancement :
|
|
|
|
- **Identifiant** : `adminServFormation`
|
|
- **Mot de passe** : `Itinova69!`
|
|
- **Email** : `admin@formation.local` (modifiable)
|
|
|
|
### 6. Lancer l'application en développement
|
|
|
|
```bash
|
|
pnpm dev
|
|
```
|
|
|
|
L'application sera accessible à l'adresse : `http://localhost:3000`
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
### Configuration SMTP (Resend)
|
|
|
|
1. Créer un compte sur [Resend](https://resend.com)
|
|
2. Générer une clé API
|
|
3. Se connecter à l'application avec l'utilisateur admin
|
|
4. Aller dans **Configuration SMTP**
|
|
5. Saisir :
|
|
- **Clé API Resend** : votre clé API
|
|
- **Email expéditeur** : votre email vérifié sur Resend
|
|
- **Nom de l'expéditeur** : Itinova Formation
|
|
6. Activer le mode **Production**
|
|
7. Tester l'envoi
|
|
|
|
### Personnalisation des templates d'emails
|
|
|
|
1. Se connecter en tant qu'administrateur
|
|
2. Aller dans **Templates d'emails**
|
|
3. Modifier les templates selon vos besoins :
|
|
- Email de confirmation d'inscription
|
|
- Email teaser
|
|
- Email de rappel J-7
|
|
|
|
### Gestion des utilisateurs
|
|
|
|
1. Se connecter en tant qu'administrateur
|
|
2. Aller dans **Utilisateurs**
|
|
3. Créer de nouveaux utilisateurs avec identifiant et mot de passe
|
|
4. Attribuer le rôle **admin** ou **user**
|
|
|
|
**Note** : L'utilisateur `adminServFormation` ne peut pas être supprimé et garantit un accès permanent à l'administration.
|
|
|
|
---
|
|
|
|
## Déploiement en production
|
|
|
|
### Option 1 : Déploiement sur la plateforme Manus (recommandé)
|
|
|
|
L'application est déjà configurée pour la plateforme Manus. Pour déployer :
|
|
|
|
1. Se connecter à l'interface de gestion Manus
|
|
2. Créer un checkpoint via le bouton **Save Checkpoint**
|
|
3. Cliquer sur le bouton **Publish** dans l'en-tête
|
|
4. Configurer le domaine personnalisé si nécessaire
|
|
5. Publier l'application
|
|
|
|
**Avantages** :
|
|
- Déploiement automatique
|
|
- SSL/TLS automatique
|
|
- Scaling automatique
|
|
- Base de données TiDB incluse
|
|
- Pas de configuration serveur nécessaire
|
|
|
|
### Option 2 : Déploiement manuel sur serveur VPS
|
|
|
|
#### Prérequis serveur
|
|
|
|
- Ubuntu 22.04 LTS ou supérieur
|
|
- 2 CPU, 4 GB RAM minimum
|
|
- Node.js 22.13.0+
|
|
- MySQL 8.0+ ou MariaDB 10.6+
|
|
- Nginx (reverse proxy)
|
|
- Certbot (SSL/TLS)
|
|
|
|
#### Étapes de déploiement
|
|
|
|
1. **Préparer le serveur**
|
|
|
|
```bash
|
|
# Mettre à jour le système
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Installer Node.js 22
|
|
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
|
sudo apt install -y nodejs
|
|
|
|
# Installer pnpm
|
|
npm install -g pnpm
|
|
|
|
# Installer MySQL
|
|
sudo apt install -y mysql-server
|
|
|
|
# Installer Nginx
|
|
sudo apt install -y nginx
|
|
|
|
# Installer Certbot
|
|
sudo apt install -y certbot python3-certbot-nginx
|
|
```
|
|
|
|
2. **Déployer l'application**
|
|
|
|
```bash
|
|
# Créer un utilisateur dédié
|
|
sudo useradd -m -s /bin/bash formation
|
|
sudo su - formation
|
|
|
|
# Cloner ou copier le projet
|
|
cd /home/formation
|
|
# Copier les fichiers du projet ici
|
|
|
|
# Installer les dépendances
|
|
pnpm install
|
|
|
|
# Configurer les variables d'environnement
|
|
cp .env.example .env
|
|
nano .env
|
|
|
|
# Build de production
|
|
pnpm build
|
|
```
|
|
|
|
3. **Configurer le service systemd**
|
|
|
|
Créer le fichier `/etc/systemd/system/formation-manager.service` :
|
|
|
|
```ini
|
|
[Unit]
|
|
Description=Formation Manager Itinova
|
|
After=network.target mysql.service
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=formation
|
|
WorkingDirectory=/home/formation/formation-manager-itinova
|
|
ExecStart=/usr/bin/pnpm start
|
|
Restart=on-failure
|
|
RestartSec=10
|
|
Environment=NODE_ENV=production
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Activer et démarrer le service :
|
|
|
|
```bash
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable formation-manager
|
|
sudo systemctl start formation-manager
|
|
sudo systemctl status formation-manager
|
|
```
|
|
|
|
4. **Configurer Nginx**
|
|
|
|
Créer le fichier `/etc/nginx/sites-available/formation-manager` :
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name votre-domaine.com;
|
|
|
|
location / {
|
|
proxy_pass http://localhost:3000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
|
|
client_max_body_size 10M;
|
|
}
|
|
```
|
|
|
|
Activer le site :
|
|
|
|
```bash
|
|
sudo ln -s /etc/nginx/sites-available/formation-manager /etc/nginx/sites-enabled/
|
|
sudo nginx -t
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
5. **Configurer SSL/TLS avec Let's Encrypt**
|
|
|
|
```bash
|
|
sudo certbot --nginx -d votre-domaine.com
|
|
```
|
|
|
|
---
|
|
|
|
## Migration de base de données
|
|
|
|
### Appliquer les migrations
|
|
|
|
```bash
|
|
# En développement
|
|
pnpm db:push
|
|
|
|
# En production (avec sauvegarde)
|
|
# 1. Sauvegarder la base de données
|
|
mysqldump -u root -p formation_manager > backup_$(date +%Y%m%d_%H%M%S).sql
|
|
|
|
# 2. Appliquer les migrations
|
|
pnpm db:push
|
|
```
|
|
|
|
### Restaurer une sauvegarde
|
|
|
|
```bash
|
|
mysql -u root -p formation_manager < backup_20250123_120000.sql
|
|
```
|
|
|
|
---
|
|
|
|
## Maintenance
|
|
|
|
### Logs de l'application
|
|
|
|
```bash
|
|
# Logs systemd
|
|
sudo journalctl -u formation-manager -f
|
|
|
|
# Logs Nginx
|
|
sudo tail -f /var/log/nginx/access.log
|
|
sudo tail -f /var/log/nginx/error.log
|
|
```
|
|
|
|
### Mise à jour de l'application
|
|
|
|
```bash
|
|
# Arrêter le service
|
|
sudo systemctl stop formation-manager
|
|
|
|
# Mettre à jour le code
|
|
cd /home/formation/formation-manager-itinova
|
|
git pull origin main
|
|
|
|
# Installer les nouvelles dépendances
|
|
pnpm install
|
|
|
|
# Appliquer les migrations
|
|
pnpm db:push
|
|
|
|
# Rebuild
|
|
pnpm build
|
|
|
|
# Redémarrer le service
|
|
sudo systemctl start formation-manager
|
|
```
|
|
|
|
### Sauvegarde automatique
|
|
|
|
Créer un script de sauvegarde `/home/formation/backup.sh` :
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
BACKUP_DIR="/home/formation/backups"
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
|
|
# Créer le répertoire de sauvegarde
|
|
mkdir -p $BACKUP_DIR
|
|
|
|
# Sauvegarder la base de données
|
|
mysqldump -u root -p formation_manager > $BACKUP_DIR/db_$DATE.sql
|
|
|
|
# Compresser
|
|
gzip $BACKUP_DIR/db_$DATE.sql
|
|
|
|
# Supprimer les sauvegardes de plus de 30 jours
|
|
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +30 -delete
|
|
|
|
echo "Sauvegarde terminée : $BACKUP_DIR/db_$DATE.sql.gz"
|
|
```
|
|
|
|
Ajouter une tâche cron :
|
|
|
|
```bash
|
|
crontab -e
|
|
|
|
# Sauvegarde quotidienne à 2h du matin
|
|
0 2 * * * /home/formation/backup.sh
|
|
```
|
|
|
|
---
|
|
|
|
## Dépannage
|
|
|
|
### L'application ne démarre pas
|
|
|
|
1. Vérifier les logs :
|
|
```bash
|
|
sudo journalctl -u formation-manager -n 50
|
|
```
|
|
|
|
2. Vérifier la connexion à la base de données :
|
|
```bash
|
|
mysql -u root -p -e "SHOW DATABASES;"
|
|
```
|
|
|
|
3. Vérifier les variables d'environnement dans `.env`
|
|
|
|
### Erreur de connexion à la base de données
|
|
|
|
1. Vérifier que MySQL est démarré :
|
|
```bash
|
|
sudo systemctl status mysql
|
|
```
|
|
|
|
2. Tester la connexion :
|
|
```bash
|
|
mysql -u user -p formation_manager
|
|
```
|
|
|
|
3. Vérifier l'URL de connexion dans `.env`
|
|
|
|
### Les emails ne sont pas envoyés
|
|
|
|
1. Vérifier la configuration SMTP dans l'interface admin
|
|
2. Vérifier que la clé API Resend est valide
|
|
3. Vérifier que l'email expéditeur est vérifié sur Resend
|
|
4. Consulter les logs de l'application
|
|
|
|
### Problème de permissions
|
|
|
|
```bash
|
|
# Corriger les permissions
|
|
sudo chown -R formation:formation /home/formation/formation-manager-itinova
|
|
sudo chmod -R 755 /home/formation/formation-manager-itinova
|
|
```
|
|
|
|
### L'authentification locale ne fonctionne pas
|
|
|
|
1. Vérifier que `JWT_SECRET` est défini dans `.env`
|
|
2. Vérifier que l'utilisateur `adminServFormation` existe dans la base de données
|
|
3. Réinitialiser le mot de passe si nécessaire via SQL :
|
|
|
|
```sql
|
|
-- Le mot de passe hashé pour "Itinova69!"
|
|
UPDATE users
|
|
SET password = '$2a$10$...'
|
|
WHERE username = 'adminServFormation';
|
|
```
|
|
|
|
---
|
|
|
|
## Support
|
|
|
|
Pour toute question ou problème :
|
|
|
|
1. Consulter la documentation complète dans le dossier `/docs`
|
|
2. Vérifier les logs de l'application
|
|
3. Contacter l'équipe de développement
|
|
|
|
---
|
|
|
|
**Version** : 1.0.0
|
|
**Dernière mise à jour** : 23 novembre 2025
|