# Guide de déploiement - Formation Manager Itinova sur serveur Linux ## Vue d'ensemble Ce guide vous accompagne dans le déploiement de l'application Formation Manager Itinova sur un serveur Linux (Ubuntu/Debian) avec authentification locale email/mot de passe (sans OAuth Manus). **Durée estimée** : 1-2 heures **Niveau** : Intermédiaire --- ## Prérequis ### Logiciels requis - **Système** : Ubuntu 22.04 LTS ou Debian 11+ - **Node.js** : Version 22.x - **pnpm** : Version 10.x - **MySQL** : Version 8.0+ ou MariaDB 10.6+ - **Nginx** : Pour le reverse proxy (optionnel mais recommandé) ### Accès nécessaires - Accès SSH au serveur - Droits sudo - Accès à la base de données MySQL --- ## Étape 1 : Préparation du serveur ### 1.1 Mise à jour du système ```bash sudo apt update sudo apt upgrade -y ``` ### 1.2 Installation de Node.js 22.x ```bash # Installer Node.js via NodeSource curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs # Vérifier l'installation node --version # Doit afficher v22.x.x ``` ### 1.3 Installation de pnpm ```bash npm install -g pnpm pnpm --version # Doit afficher 10.x.x ``` ### 1.4 Installation de MySQL ```bash sudo apt install -y mysql-server sudo mysql_secure_installation ``` --- ## Étape 2 : Configuration de la base de données ### 2.1 Créer la base de données et l'utilisateur ```bash sudo mysql ``` Dans MySQL : ```sql CREATE DATABASE formation_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'formation_user'@'localhost' IDENTIFIED BY 'VOTRE_MOT_DE_PASSE_SECURISE'; GRANT ALL PRIVILEGES ON formation_manager.* TO 'formation_user'@'localhost'; FLUSH PRIVILEGES; EXIT; ``` ### 2.2 Tester la connexion ```bash mysql -u formation_user -p formation_manager # Entrez le mot de passe, puis EXIT ``` --- ## Étape 3 : Déploiement de l'application ### 3.1 Créer le répertoire de l'application ```bash sudo mkdir -p /var/www/formation-manager-itinova sudo chown -R $USER:$USER /var/www/formation-manager-itinova cd /var/www/formation-manager-itinova ``` ### 3.2 Cloner ou copier les fichiers **Option A : Via Git (recommandé)** ```bash git clone https://github.com/votre-repo/formation-manager-itinova.git . ``` **Option B : Via upload manuel** Transférez les fichiers via SCP/SFTP vers `/var/www/formation-manager-itinova/` ### 3.3 Installer les dépendances ```bash cd /var/www/formation-manager-itinova pnpm install ``` --- ## Étape 4 : Configuration de l'application ### 4.1 Créer le fichier .env ```bash nano /var/www/formation-manager-itinova/.env ``` **Contenu du fichier .env :** ```env # Base de données DATABASE_URL=mysql://formation_user:VOTRE_MOT_DE_PASSE@localhost:3306/formation_manager # Sécurité JWT (générez une chaîne aléatoire longue) JWT_SECRET=CHANGEZ_CECI_PAR_UNE_CHAINE_ALEATOIRE_TRES_LONGUE_ET_SECURISEE # Configuration de l'application NODE_ENV=production VITE_APP_TITLE=Formation Manager Itinova VITE_APP_LOGO=/logo.svg # Email (optionnel - pour Resend) RESEND_API_KEY= RESEND_FROM_EMAIL= # Port de l'application (par défaut 3000) PORT=3000 ``` **Générer un JWT_SECRET sécurisé :** ```bash openssl rand -base64 64 ``` Copiez le résultat dans `JWT_SECRET`. ### 4.2 Sécuriser le fichier .env ```bash chmod 600 /var/www/formation-manager-itinova/.env ``` ### 4.3 Initialiser la base de données ```bash cd /var/www/formation-manager-itinova pnpm db:push ``` Cette commande va créer toutes les tables nécessaires. --- ## Étape 5 : Compilation de l'application ### 5.1 Compiler le frontend et le backend ```bash cd /var/www/formation-manager-itinova pnpm build ``` ### 5.2 Vérifier que la compilation a réussi ```bash ls -la /var/www/formation-manager-itinova/dist/ ``` Vous devriez voir un fichier `index.js`. --- ## Étape 6 : Configuration du service systemd ### 6.1 Créer le fichier de service ```bash sudo nano /etc/systemd/system/formation-manager.service ``` **Contenu du fichier :** ```ini [Unit] Description=Formation Manager Itinova After=network.target mysql.service [Service] Type=simple User=www-data WorkingDirectory=/var/www/formation-manager-itinova Environment="NODE_ENV=production" Environment="HOME=/var/www/formation-manager-itinova" Environment="PNPM_HOME=/var/www/formation-manager-itinova/.pnpm" EnvironmentFile=/var/www/formation-manager-itinova/.env ExecStart=/usr/bin/pnpm start Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target ``` ### 6.2 Configurer les permissions ```bash sudo chown -R www-data:www-data /var/www/formation-manager-itinova sudo mkdir -p /var/www/.local/share/pnpm sudo chown -R www-data:www-data /var/www/.local ``` ### 6.3 Activer et démarrer le service ```bash sudo systemctl daemon-reload sudo systemctl enable formation-manager sudo systemctl start formation-manager ``` ### 6.4 Vérifier le statut ```bash sudo systemctl status formation-manager ``` ### 6.5 Voir les logs ```bash sudo journalctl -u formation-manager -f ``` --- ## Étape 7 : Configuration de Nginx (optionnel mais recommandé) ### 7.1 Installer Nginx ```bash sudo apt install -y nginx ``` ### 7.2 Créer la configuration du site ```bash sudo nano /etc/nginx/sites-available/formation-manager ``` **Contenu du fichier :** ```nginx server { listen 80; server_name votre-domaine.com; # Changez par votre domaine # Logs access_log /var/log/nginx/formation-manager-access.log; error_log /var/log/nginx/formation-manager-error.log; # Proxy vers l'application Node.js 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; } } ``` ### 7.3 Activer le site ```bash sudo ln -s /etc/nginx/sites-available/formation-manager /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx ``` ### 7.4 Configurer le pare-feu ```bash sudo ufw allow 'Nginx Full' sudo ufw allow OpenSSH sudo ufw enable ``` --- ## Étape 8 : Configuration HTTPS avec Let's Encrypt (recommandé) ### 8.1 Installer Certbot ```bash sudo apt install -y certbot python3-certbot-nginx ``` ### 8.2 Obtenir un certificat SSL ```bash sudo certbot --nginx -d votre-domaine.com ``` Suivez les instructions à l'écran. ### 8.3 Renouvellement automatique ```bash sudo systemctl status certbot.timer ``` Le renouvellement est automatique. --- ## Étape 9 : Créer le premier utilisateur administrateur ### 9.1 Se connecter à MySQL ```bash mysql -u formation_user -p formation_manager ``` ### 9.2 Créer un utilisateur admin ```sql -- Générer un hash bcrypt pour le mot de passe "admin123" (à changer immédiatement) -- Hash bcrypt de "admin123" : $2b$10$rKZhVJQX7mEWQxGqF8vQZOQxqxqxqxqxqxqxqxqxqxqxqxqxqxqxq INSERT INTO users (email, password, name, role, emailVerified, isActive, createdAt, updatedAt, lastSignedIn) VALUES ( 'admin@itinova.org', '$2b$10$N9qo8uLOickgx2ZMRZoMye7FRNv8va91kpMQH6.OfzrcBizxDbvSK', -- Mot de passe: admin123 'Administrateur', 'admin', TRUE, TRUE, NOW(), NOW(), NOW() ); EXIT; ``` **⚠️ IMPORTANT** : Changez le mot de passe immédiatement après la première connexion ! --- ## Étape 10 : Vérification et tests ### 10.1 Accéder à l'application Ouvrez votre navigateur et accédez à : - **HTTP** : `http://votre-domaine.com` - **HTTPS** : `https://votre-domaine.com` ### 10.2 Se connecter - **Email** : `admin@itinova.org` - **Mot de passe** : `admin123` ### 10.3 Changer le mot de passe 1. Connectez-vous 2. Allez dans "Utilisateurs" 3. Modifiez votre profil 4. Changez le mot de passe --- ## Maintenance ### Voir les logs ```bash sudo journalctl -u formation-manager -f ``` ### Redémarrer l'application ```bash sudo systemctl restart formation-manager ``` ### Mettre à jour l'application ```bash cd /var/www/formation-manager-itinova git pull # Si vous utilisez Git pnpm install pnpm build sudo systemctl restart formation-manager ``` ### Sauvegarder la base de données ```bash mysqldump -u formation_user -p formation_manager > backup_$(date +%Y%m%d_%H%M%S).sql ``` ### Restaurer la base de données ```bash mysql -u formation_user -p formation_manager < backup_YYYYMMDD_HHMMSS.sql ``` --- ## Dépannage ### L'application ne démarre pas 1. Vérifier les logs : ```bash sudo journalctl -u formation-manager -n 100 --no-pager ``` 2. Vérifier que le fichier .env existe et est correct : ```bash cat /var/www/formation-manager-itinova/.env ``` 3. Vérifier que la base de données est accessible : ```bash mysql -u formation_user -p formation_manager ``` ### Erreur de permissions ```bash sudo chown -R www-data:www-data /var/www/formation-manager-itinova sudo mkdir -p /var/www/.local/share/pnpm sudo chown -R www-data:www-data /var/www/.local ``` ### Erreur "drizzle-kit: not found" ```bash cd /var/www/formation-manager-itinova pnpm install ``` ### Port 3000 déjà utilisé Modifiez le port dans `.env` : ```env PORT=3001 ``` Puis redémarrez : ```bash sudo systemctl restart formation-manager ``` --- ## Sécurité ### Recommandations 1. **Changez immédiatement le mot de passe admin par défaut** 2. **Utilisez HTTPS** (Let's Encrypt gratuit) 3. **Configurez un pare-feu** (ufw) 4. **Mettez à jour régulièrement** le système et l'application 5. **Sauvegardez régulièrement** la base de données 6. **Limitez l'accès SSH** (clés SSH, désactiver root login) 7. **Surveillez les logs** régulièrement ### Sauvegardes automatiques Créez un script de sauvegarde : ```bash sudo nano /usr/local/bin/backup-formation-manager.sh ``` Contenu : ```bash #!/bin/bash BACKUP_DIR="/var/backups/formation-manager" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p $BACKUP_DIR # Sauvegarder la base de données mysqldump -u formation_user -p'VOTRE_MOT_DE_PASSE' formation_manager > $BACKUP_DIR/db_$DATE.sql # Compresser gzip $BACKUP_DIR/db_$DATE.sql # Garder seulement les 30 derniers jours find $BACKUP_DIR -name "db_*.sql.gz" -mtime +30 -delete echo "Sauvegarde terminée : $BACKUP_DIR/db_$DATE.sql.gz" ``` Rendre exécutable : ```bash sudo chmod +x /usr/local/bin/backup-formation-manager.sh ``` Ajouter au cron (tous les jours à 2h du matin) : ```bash sudo crontab -e ``` Ajouter : ``` 0 2 * * * /usr/local/bin/backup-formation-manager.sh >> /var/log/backup-formation-manager.log 2>&1 ``` --- ## Support Pour toute question ou problème : 1. Consultez les logs : `sudo journalctl -u formation-manager -f` 2. Vérifiez la documentation : `/var/www/formation-manager-itinova/README.md` 3. Contactez le support technique --- ## Annexe : Commandes utiles ```bash # Statut du service sudo systemctl status formation-manager # Démarrer le service sudo systemctl start formation-manager # Arrêter le service sudo systemctl stop formation-manager # Redémarrer le service sudo systemctl restart formation-manager # Voir les logs en temps réel sudo journalctl -u formation-manager -f # Voir les 100 dernières lignes de logs sudo journalctl -u formation-manager -n 100 --no-pager # Tester la connexion à la base de données mysql -u formation_user -p formation_manager # Vérifier la configuration Nginx sudo nginx -t # Recharger Nginx sudo systemctl reload nginx # Vérifier l'utilisation des ressources htop # Vérifier l'espace disque df -h # Vérifier les processus Node.js ps aux | grep node ``` --- **Fin du guide de déploiement**