Checkpoint: Correction du bug d'émargement formateur bloqué sur la saisie d'email
- Ajout de la détection automatique formateur/apprenant dans EmargementScan.tsx - Nouvelle procédure tRPC getSequenceByToken pour récupérer les infos de séquence - Interface adaptée selon le type d'utilisateur (apprenant ou formateur) - Déploiement réussi sur le VPS de production Le système détecte maintenant automatiquement si l'email correspond à un apprenant ou un formateur, et affiche l'interface appropriée pour chaque cas.
This commit is contained in:
120
deployment-package/docs/DEPLOIEMENT-MANUEL.md
Normal file
120
deployment-package/docs/DEPLOIEMENT-MANUEL.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# Guide de déploiement manuel sur VPS (sans Git)
|
||||
|
||||
Ce guide vous permet de déployer votre application sur un serveur VPS sans utiliser Git.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Prérequis
|
||||
|
||||
- Accès SSH au serveur VPS
|
||||
- Client SFTP (FileZilla ou WinSCP)
|
||||
- Fichiers téléchargés depuis Manus
|
||||
|
||||
---
|
||||
|
||||
## Étape 1 : Télécharger les fichiers depuis Manus
|
||||
|
||||
1. Dans Manus, onglet "Code" → "Download all files"
|
||||
2. Extraire le ZIP dans un dossier temporaire
|
||||
3. Supprimer ces dossiers avant transfert :
|
||||
- `node_modules/`
|
||||
- `dist/` ou `build/`
|
||||
- `.env`
|
||||
- `backups/`
|
||||
|
||||
---
|
||||
|
||||
## Étape 2 : Transférer les fichiers via SFTP
|
||||
|
||||
### Avec FileZilla
|
||||
|
||||
1. Télécharger : https://filezilla-project.org
|
||||
2. Connexion SFTP :
|
||||
- Hôte : votre-serveur.com
|
||||
- Port : 22
|
||||
- Utilisateur : votre-user
|
||||
- Mot de passe : votre-password
|
||||
3. Transférer les fichiers vers `/var/www/formation-manager-itinova/`
|
||||
|
||||
---
|
||||
|
||||
## Étape 3 : Se connecter en SSH
|
||||
|
||||
```bash
|
||||
ssh votre-utilisateur@votre-serveur.com
|
||||
cd /var/www/formation-manager-itinova
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 4 : Configuration (première installation)
|
||||
|
||||
```bash
|
||||
# Installer Node.js 22
|
||||
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
||||
sudo apt-get install -y nodejs
|
||||
|
||||
# Installer pnpm et PM2
|
||||
npm install -g pnpm pm2
|
||||
|
||||
# Créer le fichier .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
Copier vos variables d'environnement, sauvegarder (Ctrl+X, Y, Entrée)
|
||||
|
||||
---
|
||||
|
||||
## Étape 5 : Installation
|
||||
|
||||
```bash
|
||||
# Installer les dépendances
|
||||
pnpm install
|
||||
|
||||
# Appliquer les migrations
|
||||
pnpm db:push
|
||||
|
||||
# Compiler
|
||||
pnpm build
|
||||
|
||||
# Démarrer
|
||||
pm2 start npm --name "formation-manager" -- start
|
||||
pm2 save
|
||||
pm2 startup
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 6 : Mise à jour (installations suivantes)
|
||||
|
||||
```bash
|
||||
# 1. Sauvegarder la base de données
|
||||
mkdir -p backups
|
||||
mysqldump -h HOST -P PORT -u USER -pPASSWORD DATABASE > backups/backup-$(date +%Y%m%d-%H%M%S).sql
|
||||
|
||||
# 2. Arrêter le serveur
|
||||
pm2 stop formation-manager
|
||||
|
||||
# 3. Transférer les nouveaux fichiers via SFTP
|
||||
|
||||
# 4. Mettre à jour
|
||||
pnpm install
|
||||
pnpm db:push
|
||||
pnpm build
|
||||
|
||||
# 5. Redémarrer
|
||||
pm2 restart formation-manager
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Vérification
|
||||
|
||||
```bash
|
||||
pm2 status
|
||||
pm2 logs formation-manager
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Bon déploiement ! 🚀**
|
||||
106
deployment-package/docs/DEPLOIEMENT-TARGZ.md
Normal file
106
deployment-package/docs/DEPLOIEMENT-TARGZ.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# Guide de déploiement avec archive .tar.gz
|
||||
|
||||
Ce guide est adapté à votre workflow habituel avec des archives .tar.gz.
|
||||
|
||||
---
|
||||
|
||||
## 📦 Étape 1 : Créer l'archive .tar.gz
|
||||
|
||||
### Sur votre machine locale (après téléchargement depuis Manus)
|
||||
|
||||
```bash
|
||||
# Aller dans le dossier parent
|
||||
cd /d/ProjetsGit
|
||||
|
||||
# Créer l'archive (exclure les dossiers inutiles)
|
||||
tar -czf formation-manager-itinova.tar.gz \
|
||||
--exclude='node_modules' \
|
||||
--exclude='dist' \
|
||||
--exclude='build' \
|
||||
--exclude='.env' \
|
||||
--exclude='backups' \
|
||||
formation-manager-itinova/
|
||||
```
|
||||
|
||||
**Sur Windows (si tar n'est pas disponible)**, utilisez 7-Zip :
|
||||
1. Clic droit sur le dossier `formation-manager-itinova`
|
||||
2. 7-Zip → Ajouter à l'archive
|
||||
3. Format : tar
|
||||
4. Niveau de compression : Ultra
|
||||
5. OK
|
||||
|
||||
Ensuite compresser le .tar en .gz :
|
||||
1. Clic droit sur `formation-manager-itinova.tar`
|
||||
2. 7-Zip → Ajouter à l'archive
|
||||
3. Format : gzip
|
||||
4. OK
|
||||
|
||||
---
|
||||
|
||||
## 📤 Étape 2 : Transférer l'archive sur le VPS
|
||||
|
||||
### Avec FileZilla/WinSCP
|
||||
|
||||
1. Se connecter au VPS
|
||||
2. Naviguer vers `/tmp/` ou `/home/votre-utilisateur/`
|
||||
3. Transférer `formation-manager-itinova.tar.gz`
|
||||
|
||||
### Avec SCP (ligne de commande)
|
||||
|
||||
```bash
|
||||
scp formation-manager-itinova.tar.gz votre-utilisateur@votre-serveur.com:/tmp/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Étape 3 : Exécuter le script de mise à jour
|
||||
|
||||
### Se connecter en SSH
|
||||
|
||||
```bash
|
||||
ssh votre-utilisateur@votre-serveur.com
|
||||
```
|
||||
|
||||
### Lancer le script de mise à jour
|
||||
|
||||
```bash
|
||||
cd /var/www/formation-manager-itinova
|
||||
./deploy-update-targz.sh /tmp/formation-manager-itinova.tar.gz
|
||||
```
|
||||
|
||||
Le script va automatiquement :
|
||||
- ✅ Sauvegarder la base de données
|
||||
- ✅ Arrêter le serveur
|
||||
- ✅ Extraire l'archive
|
||||
- ✅ Copier les nouveaux fichiers (en préservant .env)
|
||||
- ✅ Installer les dépendances
|
||||
- ✅ Appliquer les migrations
|
||||
- ✅ Recompiler le projet
|
||||
- ✅ Redémarrer le serveur
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Vérification
|
||||
|
||||
```bash
|
||||
# Voir le statut
|
||||
pm2 status
|
||||
|
||||
# Voir les logs
|
||||
pm2 logs formation-manager --lines 50
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Résumé de la procédure
|
||||
|
||||
1. **Télécharger** les fichiers depuis Manus (Code → Download all files)
|
||||
2. **Créer** l'archive .tar.gz
|
||||
3. **Transférer** l'archive sur le VPS (dans /tmp/)
|
||||
4. **Se connecter** en SSH au VPS
|
||||
5. **Exécuter** `./deploy-update-targz.sh /tmp/formation-manager-itinova.tar.gz`
|
||||
6. **Vérifier** avec `pm2 status` et `pm2 logs`
|
||||
|
||||
---
|
||||
|
||||
**C'est tout ! 🚀**
|
||||
246
deployment-package/docs/GUIDE_CONFIGURATION_ATTESTATIONS.md
Normal file
246
deployment-package/docs/GUIDE_CONFIGURATION_ATTESTATIONS.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# Guide de configuration des attestations de formation
|
||||
|
||||
**Auteur :** Manus AI
|
||||
**Date :** 13 janvier 2026
|
||||
**Version :** 1.0
|
||||
|
||||
---
|
||||
|
||||
## Introduction
|
||||
|
||||
Ce guide explique comment configurer et gérer les attestations de formation dans l'application de gestion des formations Manager Itinova. Le système d'attestations permet de générer et d'envoyer automatiquement ou manuellement des documents officiels aux apprenants ayant complété une formation.
|
||||
|
||||
La configuration des attestations se fait désormais de manière centralisée dans la page **"Gestion des attestations"**, accessible depuis le menu de navigation principal.
|
||||
|
||||
---
|
||||
|
||||
## Accès à la page de gestion
|
||||
|
||||
Pour accéder à la configuration des attestations, suivez ces étapes :
|
||||
|
||||
1. Connectez-vous à l'application avec un compte administrateur
|
||||
2. Dans le menu latéral gauche, cliquez sur **"Gestion des attestations"** (section "Gestion")
|
||||
3. Vous accédez alors à l'interface de configuration
|
||||
|
||||
---
|
||||
|
||||
## Configuration par formation
|
||||
|
||||
La configuration des attestations se fait **formation par formation**. Cela permet d'adapter le mode de génération et d'envoi selon les besoins spécifiques de chaque type de formation.
|
||||
|
||||
### Étape 1 : Sélectionner une formation
|
||||
|
||||
Dans la section **"Sélectionner une formation"**, utilisez le menu déroulant pour choisir la formation que vous souhaitez configurer. La liste affiche toutes les formations actives dans le système.
|
||||
|
||||
### Étape 2 : Configurer le mode de génération
|
||||
|
||||
Le système propose deux modes de génération des attestations :
|
||||
|
||||
| Mode | Description | Cas d'usage |
|
||||
|------|-------------|-------------|
|
||||
| **Génération automatique** | Les attestations sont générées automatiquement à partir du modèle configuré dans le système | Formations standardisées avec un format d'attestation uniforme |
|
||||
| **Import manuel** | Vous uploadez un document PDF personnalisé pour chaque apprenant | Formations nécessitant des attestations personnalisées ou avec des mentions spécifiques |
|
||||
|
||||
**Pour sélectionner le mode :**
|
||||
|
||||
Cochez l'option correspondante dans la section "Mode de génération des attestations". Le mode automatique est recommandé pour la plupart des formations, car il garantit une cohérence dans les documents délivrés et réduit considérablement le temps de traitement.
|
||||
|
||||
### Étape 3 : Configurer le mode d'envoi
|
||||
|
||||
Le système propose deux modes d'envoi des attestations :
|
||||
|
||||
| Mode | Description | Cas d'usage |
|
||||
|------|-------------|-------------|
|
||||
| **Envoi automatique** | Les attestations sont envoyées automatiquement par email aux apprenants dès qu'elles sont générées ou uploadées | Formations à grande échelle où l'envoi manuel serait chronophage |
|
||||
| **Envoi manuel** | Vous décidez quand envoyer chaque attestation via un bouton d'action | Formations nécessitant une validation manuelle avant envoi, ou pour un contrôle précis du timing d'envoi |
|
||||
|
||||
**Pour sélectionner le mode :**
|
||||
|
||||
Cochez l'option correspondante dans la section "Mode d'envoi des attestations". L'envoi manuel offre plus de contrôle, tandis que l'envoi automatique optimise le processus pour les formations récurrentes.
|
||||
|
||||
### Étape 4 : Enregistrer la configuration
|
||||
|
||||
Une fois les deux modes sélectionnés, cliquez sur le bouton **"Enregistrer la configuration"** pour appliquer les paramètres. Un message de confirmation s'affichera pour indiquer que la configuration a été enregistrée avec succès.
|
||||
|
||||
---
|
||||
|
||||
## Gestion des apprenants et attestations
|
||||
|
||||
Après avoir configuré une formation, la section **"Apprenants inscrits"** affiche la liste de tous les apprenants ayant participé à cette formation, avec leur statut d'attestation.
|
||||
|
||||
### Tableau des apprenants
|
||||
|
||||
Le tableau affiche les informations suivantes pour chaque apprenant :
|
||||
|
||||
- **Nom et prénom** : Identité de l'apprenant
|
||||
- **Email** : Adresse email de contact
|
||||
- **Séquence** : Nom de la séquence de formation suivie
|
||||
- **Statut** : État de l'attestation (Générée, En attente, Envoyée, etc.)
|
||||
- **Actions disponibles** : Boutons pour prévisualiser, envoyer ou supprimer l'attestation
|
||||
|
||||
### Actions disponibles
|
||||
|
||||
Selon le mode de génération et d'envoi configuré, différentes actions sont disponibles :
|
||||
|
||||
#### Mode génération automatique
|
||||
|
||||
- **Prévisualiser** (icône œil) : Affiche l'attestation générée dans une fenêtre modale
|
||||
- **Envoyer** (icône enveloppe) : Envoie l'attestation par email à l'apprenant (si mode d'envoi manuel)
|
||||
- **Supprimer** (icône corbeille) : Supprime l'attestation générée (nécessite une confirmation)
|
||||
|
||||
#### Mode import manuel
|
||||
|
||||
- **Upload** (icône téléchargement) : Permet d'uploader un fichier PDF personnalisé pour cet apprenant
|
||||
- **Prévisualiser** (icône œil) : Affiche l'attestation uploadée
|
||||
- **Envoyer** (icône enveloppe) : Envoie l'attestation par email (si mode d'envoi manuel)
|
||||
- **Supprimer** (icône corbeille) : Supprime le document uploadé
|
||||
|
||||
---
|
||||
|
||||
## Workflows recommandés
|
||||
|
||||
### Workflow 1 : Formation standardisée avec envoi automatique
|
||||
|
||||
**Configuration recommandée :**
|
||||
- Mode de génération : **Automatique**
|
||||
- Mode d'envoi : **Automatique**
|
||||
|
||||
**Processus :**
|
||||
|
||||
1. Configurez la formation avec les deux modes automatiques
|
||||
2. Enregistrez la configuration
|
||||
3. À la fin de chaque séquence, les attestations sont automatiquement générées et envoyées aux apprenants
|
||||
4. Consultez le tableau pour vérifier que tous les apprenants ont bien reçu leur attestation
|
||||
|
||||
**Avantages :** Processus entièrement automatisé, gain de temps considérable, aucune intervention manuelle nécessaire.
|
||||
|
||||
### Workflow 2 : Formation avec validation manuelle
|
||||
|
||||
**Configuration recommandée :**
|
||||
- Mode de génération : **Automatique**
|
||||
- Mode d'envoi : **Manuel**
|
||||
|
||||
**Processus :**
|
||||
|
||||
1. Configurez la formation avec génération automatique et envoi manuel
|
||||
2. Enregistrez la configuration
|
||||
3. À la fin de chaque séquence, les attestations sont automatiquement générées
|
||||
4. Consultez le tableau des apprenants
|
||||
5. Prévisualisez chaque attestation pour vérifier son contenu
|
||||
6. Cliquez sur le bouton "Envoyer" pour chaque apprenant validé
|
||||
|
||||
**Avantages :** Contrôle total sur l'envoi, possibilité de vérifier chaque attestation avant envoi, flexibilité dans le timing.
|
||||
|
||||
### Workflow 3 : Formation avec attestations personnalisées
|
||||
|
||||
**Configuration recommandée :**
|
||||
- Mode de génération : **Manuel**
|
||||
- Mode d'envoi : **Manuel**
|
||||
|
||||
**Processus :**
|
||||
|
||||
1. Configurez la formation avec les deux modes manuels
|
||||
2. Enregistrez la configuration
|
||||
3. Préparez les attestations personnalisées en PDF pour chaque apprenant
|
||||
4. Dans le tableau, cliquez sur le bouton "Upload" pour chaque apprenant
|
||||
5. Sélectionnez le fichier PDF correspondant
|
||||
6. Prévisualisez l'attestation uploadée pour vérifier
|
||||
7. Cliquez sur "Envoyer" pour transmettre l'attestation par email
|
||||
|
||||
**Avantages :** Personnalisation maximale, adaptation aux besoins spécifiques de chaque apprenant, contrôle total du processus.
|
||||
|
||||
---
|
||||
|
||||
## Bonnes pratiques
|
||||
|
||||
### Nommage des fichiers PDF
|
||||
|
||||
Lorsque vous uploadez des attestations manuellement, utilisez une convention de nommage claire pour faciliter l'identification :
|
||||
|
||||
```
|
||||
Attestation_[NomFormation]_[NomApprenant]_[Date].pdf
|
||||
```
|
||||
|
||||
**Exemple :** `Attestation_ManagementEquipe_Dupont_20260113.pdf`
|
||||
|
||||
### Vérification avant envoi
|
||||
|
||||
Même en mode automatique, il est recommandé de vérifier périodiquement le tableau des apprenants pour s'assurer que tous les envois ont été effectués avec succès. Les erreurs d'envoi (adresse email invalide, problème de configuration SMTP) sont signalées dans la colonne "Statut".
|
||||
|
||||
### Archivage
|
||||
|
||||
Le système conserve automatiquement un historique de toutes les attestations générées et envoyées. Cet historique est accessible depuis la page "Historique des attestations" et permet de :
|
||||
|
||||
- Consulter les attestations déjà envoyées
|
||||
- Renvoyer une attestation en cas de perte par l'apprenant
|
||||
- Générer des rapports sur les attestations délivrées
|
||||
|
||||
### Sauvegarde des documents
|
||||
|
||||
Bien que le système stocke les attestations de manière sécurisée, il est recommandé de maintenir une sauvegarde locale des documents importants, notamment pour les formations certifiantes ou réglementées.
|
||||
|
||||
---
|
||||
|
||||
## Dépannage
|
||||
|
||||
### L'attestation n'a pas été envoyée
|
||||
|
||||
**Causes possibles :**
|
||||
|
||||
- Configuration SMTP incorrecte ou incomplète
|
||||
- Adresse email de l'apprenant invalide
|
||||
- Problème de connexion réseau temporaire
|
||||
|
||||
**Solution :**
|
||||
|
||||
1. Vérifiez la configuration SMTP dans la page "Configuration Email"
|
||||
2. Vérifiez l'adresse email de l'apprenant dans sa fiche
|
||||
3. Utilisez le bouton "Envoyer" pour retenter l'envoi manuel
|
||||
|
||||
### L'attestation générée automatiquement est incorrecte
|
||||
|
||||
**Causes possibles :**
|
||||
|
||||
- Modèle d'attestation mal configuré
|
||||
- Données de l'apprenant incomplètes
|
||||
|
||||
**Solution :**
|
||||
|
||||
1. Vérifiez les informations de l'apprenant (nom, prénom, dates de formation)
|
||||
2. Contactez l'administrateur système pour vérifier le modèle d'attestation
|
||||
3. En attendant la correction, passez en mode "Import manuel" pour cette formation
|
||||
|
||||
### Impossible d'uploader un fichier PDF
|
||||
|
||||
**Causes possibles :**
|
||||
|
||||
- Fichier trop volumineux (limite : 10 Mo)
|
||||
- Format de fichier incorrect (seul le PDF est accepté)
|
||||
- Problème de connexion réseau
|
||||
|
||||
**Solution :**
|
||||
|
||||
1. Vérifiez que le fichier est bien au format PDF
|
||||
2. Compressez le fichier PDF si sa taille dépasse 10 Mo
|
||||
3. Réessayez l'upload après avoir vérifié votre connexion internet
|
||||
|
||||
---
|
||||
|
||||
## Support et assistance
|
||||
|
||||
Pour toute question ou problème technique concernant la configuration des attestations, contactez l'équipe support à l'adresse suivante :
|
||||
|
||||
**Email :** support@itinova.org
|
||||
**Téléphone :** +33 (0)1 XX XX XX XX
|
||||
|
||||
---
|
||||
|
||||
## Historique des versions
|
||||
|
||||
| Version | Date | Modifications |
|
||||
|---------|------|---------------|
|
||||
| 1.0 | 13 janvier 2026 | Création du guide initial |
|
||||
|
||||
---
|
||||
|
||||
**© 2026 Manager Itinova - Tous droits réservés**
|
||||
681
deployment-package/docs/GUIDE_DEPLOIEMENT.md
Normal file
681
deployment-package/docs/GUIDE_DEPLOIEMENT.md
Normal file
@@ -0,0 +1,681 @@
|
||||
# Guide de Déploiement - Formation Manager Itinova
|
||||
|
||||
**Version:** 7a737c05
|
||||
**Date:** 24 novembre 2025
|
||||
**Auteur:** Manus AI
|
||||
|
||||
---
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Ce document fournit les instructions complètes pour déployer l'application **Formation Manager Itinova** sur un serveur de production. L'application est construite avec React 19, Express 4, tRPC 11 et utilise une base de données MySQL/TiDB.
|
||||
|
||||
---
|
||||
|
||||
## Prérequis système
|
||||
|
||||
Avant de commencer le déploiement, assurez-vous que votre serveur dispose des éléments suivants :
|
||||
|
||||
### Configuration matérielle minimale
|
||||
|
||||
| Composant | Spécification minimale | Recommandé |
|
||||
|-----------|------------------------|------------|
|
||||
| CPU | 2 cœurs | 4 cœurs |
|
||||
| RAM | 2 GB | 4 GB |
|
||||
| Stockage | 20 GB | 50 GB SSD |
|
||||
| Bande passante | 100 Mbps | 1 Gbps |
|
||||
|
||||
### Logiciels requis
|
||||
|
||||
L'application nécessite les logiciels suivants installés sur le serveur :
|
||||
|
||||
**Node.js version 22.13.0 ou supérieure** : Le runtime JavaScript est essentiel pour exécuter l'application côté serveur. La version 22.13.0 garantit la compatibilité avec toutes les dépendances du projet.
|
||||
|
||||
**pnpm** : Le gestionnaire de paquets pnpm est utilisé pour installer les dépendances de manière efficace. Il offre de meilleures performances et une gestion optimisée de l'espace disque par rapport à npm.
|
||||
|
||||
**MySQL 8.0 ou TiDB** : La base de données relationnelle stocke toutes les données de l'application (formations, séquences, apprenants, inscriptions). TiDB est compatible MySQL et offre une scalabilité horizontale pour les déploiements à grande échelle.
|
||||
|
||||
**Nginx ou Apache** : Un serveur web reverse proxy est recommandé pour gérer le SSL/TLS, la compression et le cache statique. Nginx est préféré pour ses performances supérieures.
|
||||
|
||||
**Systemd** : Le gestionnaire de services Linux permet de gérer l'application comme un service système, assurant le démarrage automatique et la supervision.
|
||||
|
||||
**Git** : Le système de contrôle de version est nécessaire pour cloner le dépôt et effectuer les mises à jour.
|
||||
|
||||
---
|
||||
|
||||
## Architecture de déploiement
|
||||
|
||||
L'application suit une architecture client-serveur moderne avec les composants suivants :
|
||||
|
||||
### Composants principaux
|
||||
|
||||
**Frontend React** : L'interface utilisateur est construite avec React 19 et Tailwind CSS 4. Le build de production génère des fichiers statiques optimisés (HTML, CSS, JavaScript) qui sont servis par le serveur Express.
|
||||
|
||||
**Backend Express + tRPC** : Le serveur Node.js gère les requêtes API via tRPC, offrant une communication type-safe entre le client et le serveur. Toutes les routes API sont préfixées par `/api/`.
|
||||
|
||||
**Base de données MySQL/TiDB** : La couche de persistance utilise Drizzle ORM pour interagir avec la base de données. Le schéma est défini dans `drizzle/schema.ts` et les migrations sont gérées automatiquement.
|
||||
|
||||
**Authentification OAuth** : Le système d'authentification utilise Manus OAuth pour la gestion des utilisateurs. Les sessions sont stockées dans des cookies HTTP-only sécurisés.
|
||||
|
||||
### Flux de requêtes
|
||||
|
||||
Les requêtes utilisateur suivent ce chemin : **Navigateur → Nginx (SSL/TLS) → Express (port 3000) → tRPC → Base de données**. Les fichiers statiques sont servis directement par Express depuis le répertoire `dist/public/`.
|
||||
|
||||
---
|
||||
|
||||
## Étape 1 : Préparation du serveur
|
||||
|
||||
### Installation de Node.js
|
||||
|
||||
La première étape consiste à installer Node.js version 22.13.0 sur votre serveur Ubuntu. Utilisez les commandes suivantes pour installer Node.js via le gestionnaire de versions nvm :
|
||||
|
||||
```bash
|
||||
# Installer nvm (Node Version Manager)
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
||||
|
||||
# Recharger le profil shell
|
||||
source ~/.bashrc
|
||||
|
||||
# Installer Node.js 22.13.0
|
||||
nvm install 22.13.0
|
||||
|
||||
# Définir comme version par défaut
|
||||
nvm use 22.13.0
|
||||
nvm alias default 22.13.0
|
||||
|
||||
# Vérifier l'installation
|
||||
node --version # Doit afficher v22.13.0
|
||||
```
|
||||
|
||||
### Installation de pnpm
|
||||
|
||||
Une fois Node.js installé, installez pnpm globalement :
|
||||
|
||||
```bash
|
||||
npm install -g pnpm
|
||||
|
||||
# Vérifier l'installation
|
||||
pnpm --version
|
||||
```
|
||||
|
||||
### Configuration de la base de données
|
||||
|
||||
Créez une base de données MySQL dédiée pour l'application. Connectez-vous à MySQL et exécutez les commandes suivantes :
|
||||
|
||||
```sql
|
||||
CREATE DATABASE formation_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER 'formation_user'@'localhost' IDENTIFIED BY 'MOT_DE_PASSE_SECURISE';
|
||||
GRANT ALL PRIVILEGES ON formation_manager.* TO 'formation_user'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
Remplacez `MOT_DE_PASSE_SECURISE` par un mot de passe fort généré aléatoirement. Notez les informations de connexion pour la configuration ultérieure.
|
||||
|
||||
### Création de l'utilisateur système
|
||||
|
||||
Pour des raisons de sécurité, créez un utilisateur système dédié pour exécuter l'application :
|
||||
|
||||
```bash
|
||||
sudo useradd -r -s /bin/bash -d /opt/formation-manager formation-manager
|
||||
sudo mkdir -p /opt/formation-manager
|
||||
sudo chown formation-manager:formation-manager /opt/formation-manager
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 2 : Clonage et configuration
|
||||
|
||||
### Clonage du dépôt
|
||||
|
||||
Connectez-vous en tant qu'utilisateur `formation-manager` et clonez le dépôt Git :
|
||||
|
||||
```bash
|
||||
sudo su - formation-manager
|
||||
cd /opt/formation-manager
|
||||
git clone <URL_DU_DEPOT> app
|
||||
cd app
|
||||
git checkout 7a737c05
|
||||
```
|
||||
|
||||
Remplacez `<URL_DU_DEPOT>` par l'URL réelle de votre dépôt Git.
|
||||
|
||||
### Configuration des variables d'environnement
|
||||
|
||||
Créez un fichier `.env` à la racine du projet avec les variables suivantes :
|
||||
|
||||
```bash
|
||||
# Base de données
|
||||
DATABASE_URL=mysql://formation_user:MOT_DE_PASSE_SECURISE@localhost:3306/formation_manager
|
||||
|
||||
# Authentification
|
||||
JWT_SECRET=<GENERER_UNE_CLE_ALEATOIRE_64_CARACTERES>
|
||||
OAUTH_SERVER_URL=https://api.manus.im
|
||||
VITE_OAUTH_PORTAL_URL=https://auth.manus.im
|
||||
|
||||
# Identifiants propriétaire
|
||||
OWNER_OPEN_ID=<VOTRE_OPEN_ID_MANUS>
|
||||
OWNER_NAME=<VOTRE_NOM>
|
||||
|
||||
# Configuration application
|
||||
VITE_APP_ID=<VOTRE_APP_ID_MANUS>
|
||||
VITE_APP_TITLE="Gestion des Formations Manager Itinova"
|
||||
VITE_APP_LOGO=/logo.png
|
||||
|
||||
# APIs Manus (fournis automatiquement par la plateforme)
|
||||
BUILT_IN_FORGE_API_URL=<URL_API_MANUS>
|
||||
BUILT_IN_FORGE_API_KEY=<CLE_API_MANUS>
|
||||
VITE_FRONTEND_FORGE_API_KEY=<CLE_API_FRONTEND_MANUS>
|
||||
VITE_FRONTEND_FORGE_API_URL=<URL_API_FRONTEND_MANUS>
|
||||
|
||||
# Analytics (optionnel)
|
||||
VITE_ANALYTICS_ENDPOINT=<URL_ANALYTICS>
|
||||
VITE_ANALYTICS_WEBSITE_ID=<ID_SITE>
|
||||
|
||||
# Production
|
||||
NODE_ENV=production
|
||||
PORT=3000
|
||||
```
|
||||
|
||||
**Important** : Générez une clé JWT sécurisée avec la commande suivante :
|
||||
|
||||
```bash
|
||||
openssl rand -hex 32
|
||||
```
|
||||
|
||||
### Installation des dépendances
|
||||
|
||||
Installez toutes les dépendances du projet :
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
Cette commande télécharge et installe toutes les bibliothèques nécessaires définies dans `package.json`. Le processus peut prendre plusieurs minutes selon votre connexion internet.
|
||||
|
||||
---
|
||||
|
||||
## Étape 3 : Migration de la base de données
|
||||
|
||||
### Application du schéma
|
||||
|
||||
Appliquez le schéma de base de données en exécutant :
|
||||
|
||||
```bash
|
||||
pnpm db:push
|
||||
```
|
||||
|
||||
Cette commande utilise Drizzle Kit pour créer automatiquement toutes les tables nécessaires dans la base de données. Les tables suivantes seront créées :
|
||||
|
||||
| Table | Description |
|
||||
|-------|-------------|
|
||||
| `users` | Utilisateurs et administrateurs |
|
||||
| `formations` | Formations disponibles |
|
||||
| `sequences` | Séquences de formation |
|
||||
| `apprenants` | Apprenants inscrits |
|
||||
| `inscriptions` | Inscriptions aux séquences |
|
||||
| `emailTemplates` | Templates d'emails personnalisés |
|
||||
| `alertes` | Alertes et notifications |
|
||||
|
||||
### Vérification du schéma
|
||||
|
||||
Connectez-vous à MySQL et vérifiez que toutes les tables ont été créées correctement :
|
||||
|
||||
```bash
|
||||
mysql -u formation_user -p formation_manager
|
||||
```
|
||||
|
||||
```sql
|
||||
SHOW TABLES;
|
||||
DESCRIBE users;
|
||||
DESCRIBE formations;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 4 : Build de production
|
||||
|
||||
### Compilation de l'application
|
||||
|
||||
Compilez l'application pour la production :
|
||||
|
||||
```bash
|
||||
pnpm run build
|
||||
```
|
||||
|
||||
Cette commande effectue les opérations suivantes :
|
||||
|
||||
1. **Compilation TypeScript** : Transpile le code TypeScript du serveur en JavaScript
|
||||
2. **Build Vite** : Compile et optimise le frontend React (minification, tree-shaking, code splitting)
|
||||
3. **Génération des assets** : Crée les fichiers statiques dans `dist/public/`
|
||||
|
||||
Le build de production génère un répertoire `dist/` contenant :
|
||||
|
||||
- `dist/index.js` : Le serveur Express compilé
|
||||
- `dist/public/` : Les fichiers statiques du frontend (HTML, CSS, JS, images)
|
||||
|
||||
### Vérification du build
|
||||
|
||||
Vérifiez que le build s'est terminé sans erreur et que les fichiers ont été générés :
|
||||
|
||||
```bash
|
||||
ls -lh dist/
|
||||
ls -lh dist/public/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 5 : Configuration du service systemd
|
||||
|
||||
### Création du fichier service
|
||||
|
||||
Créez un fichier de service systemd pour gérer l'application :
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/formation-manager.service
|
||||
```
|
||||
|
||||
Ajoutez le contenu suivant :
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Formation Manager Itinova
|
||||
After=network.target mysql.service
|
||||
Wants=mysql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=formation-manager
|
||||
Group=formation-manager
|
||||
WorkingDirectory=/opt/formation-manager/app
|
||||
Environment="NODE_ENV=production"
|
||||
Environment="PORT=3000"
|
||||
EnvironmentFile=/opt/formation-manager/app/.env
|
||||
ExecStart=/home/formation-manager/.nvm/versions/node/v22.13.0/bin/node dist/index.js
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=formation-manager
|
||||
|
||||
# Limites de sécurité
|
||||
LimitNOFILE=65536
|
||||
PrivateTmp=true
|
||||
NoNewPrivileges=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
### Activation du service
|
||||
|
||||
Rechargez systemd, activez et démarrez le service :
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable formation-manager
|
||||
sudo systemctl start formation-manager
|
||||
```
|
||||
|
||||
### Vérification du statut
|
||||
|
||||
Vérifiez que le service fonctionne correctement :
|
||||
|
||||
```bash
|
||||
sudo systemctl status formation-manager
|
||||
```
|
||||
|
||||
Vous devriez voir `active (running)` en vert. Consultez les logs en cas d'erreur :
|
||||
|
||||
```bash
|
||||
sudo journalctl -u formation-manager -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 6 : Configuration Nginx (reverse proxy)
|
||||
|
||||
### Installation de Nginx
|
||||
|
||||
Si Nginx n'est pas déjà installé :
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install nginx
|
||||
```
|
||||
|
||||
### Configuration du site
|
||||
|
||||
Créez un fichier de configuration pour votre site :
|
||||
|
||||
```bash
|
||||
sudo nano /etc/nginx/sites-available/formation-manager
|
||||
```
|
||||
|
||||
Ajoutez la configuration suivante :
|
||||
|
||||
```nginx
|
||||
upstream formation_backend {
|
||||
server 127.0.0.1:3000;
|
||||
keepalive 64;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name votre-domaine.com www.votre-domaine.com;
|
||||
|
||||
# Redirection HTTP vers HTTPS
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name votre-domaine.com www.votre-domaine.com;
|
||||
|
||||
# Certificats SSL (à configurer avec Let's Encrypt)
|
||||
ssl_certificate /etc/letsencrypt/live/votre-domaine.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/votre-domaine.com/privkey.pem;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
# Logs
|
||||
access_log /var/log/nginx/formation-manager-access.log;
|
||||
error_log /var/log/nginx/formation-manager-error.log;
|
||||
|
||||
# Taille maximale des uploads
|
||||
client_max_body_size 10M;
|
||||
|
||||
# Compression
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
|
||||
|
||||
# Proxy vers Node.js
|
||||
location / {
|
||||
proxy_pass http://formation_backend;
|
||||
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;
|
||||
proxy_read_timeout 300s;
|
||||
proxy_connect_timeout 75s;
|
||||
}
|
||||
|
||||
# Cache des assets statiques
|
||||
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
|
||||
proxy_pass http://formation_backend;
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Remplacez `votre-domaine.com` par votre nom de domaine réel.
|
||||
|
||||
### Activation du site
|
||||
|
||||
Activez la configuration et redémarrez Nginx :
|
||||
|
||||
```bash
|
||||
sudo ln -s /etc/nginx/sites-available/formation-manager /etc/nginx/sites-enabled/
|
||||
sudo nginx -t # Tester la configuration
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
### Configuration SSL avec Let's Encrypt
|
||||
|
||||
Installez Certbot et obtenez un certificat SSL gratuit :
|
||||
|
||||
```bash
|
||||
sudo apt install certbot python3-certbot-nginx
|
||||
sudo certbot --nginx -d votre-domaine.com -d www.votre-domaine.com
|
||||
```
|
||||
|
||||
Suivez les instructions à l'écran. Certbot configurera automatiquement Nginx pour utiliser HTTPS.
|
||||
|
||||
---
|
||||
|
||||
## Étape 7 : Configuration du pare-feu
|
||||
|
||||
### Configuration UFW
|
||||
|
||||
Si vous utilisez UFW (Uncomplicated Firewall), autorisez les ports nécessaires :
|
||||
|
||||
```bash
|
||||
sudo ufw allow 22/tcp # SSH
|
||||
sudo ufw allow 80/tcp # HTTP
|
||||
sudo ufw allow 443/tcp # HTTPS
|
||||
sudo ufw enable
|
||||
sudo ufw status
|
||||
```
|
||||
|
||||
### Sécurisation SSH (recommandé)
|
||||
|
||||
Désactivez l'authentification par mot de passe SSH et utilisez uniquement les clés :
|
||||
|
||||
```bash
|
||||
sudo nano /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
Modifiez les lignes suivantes :
|
||||
|
||||
```
|
||||
PasswordAuthentication no
|
||||
PermitRootLogin no
|
||||
```
|
||||
|
||||
Redémarrez SSH :
|
||||
|
||||
```bash
|
||||
sudo systemctl restart sshd
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 8 : Vérification du déploiement
|
||||
|
||||
### Tests fonctionnels
|
||||
|
||||
Accédez à votre application via le navigateur à l'adresse `https://votre-domaine.com` et vérifiez les éléments suivants :
|
||||
|
||||
| Test | Description | Résultat attendu |
|
||||
|------|-------------|------------------|
|
||||
| Page d'accueil | Chargement de la page d'accueil | Affichage correct sans erreur |
|
||||
| Connexion | Authentification via Manus OAuth | Redirection vers le tableau de bord |
|
||||
| Tableau de bord | Affichage des statistiques | Graphiques et cartes visibles |
|
||||
| Formations | Liste des formations | Tableau avec données |
|
||||
| Séquences | Liste des séquences | Tableau avec code couleur |
|
||||
| Apprenants | Liste des apprenants | Tableau avec badges de statut |
|
||||
| Templates d'emails | Modification d'un template | Éditeur TipTap fonctionnel |
|
||||
|
||||
### Vérification des logs
|
||||
|
||||
Surveillez les logs pour détecter d'éventuelles erreurs :
|
||||
|
||||
```bash
|
||||
# Logs de l'application
|
||||
sudo journalctl -u formation-manager -f
|
||||
|
||||
# Logs Nginx
|
||||
sudo tail -f /var/log/nginx/formation-manager-error.log
|
||||
|
||||
# Logs système
|
||||
sudo tail -f /var/log/syslog
|
||||
```
|
||||
|
||||
### Tests de performance
|
||||
|
||||
Utilisez des outils pour tester les performances de votre application :
|
||||
|
||||
```bash
|
||||
# Test de charge avec Apache Bench
|
||||
ab -n 1000 -c 10 https://votre-domaine.com/
|
||||
|
||||
# Analyse des temps de réponse
|
||||
curl -w "@curl-format.txt" -o /dev/null -s https://votre-domaine.com/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Maintenance et mises à jour
|
||||
|
||||
### Sauvegarde de la base de données
|
||||
|
||||
Créez un script de sauvegarde automatique :
|
||||
|
||||
```bash
|
||||
sudo nano /opt/formation-manager/backup-db.sh
|
||||
```
|
||||
|
||||
Contenu du script :
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_DIR="/opt/formation-manager/backups"
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
mysqldump -u formation_user -p'MOT_DE_PASSE' formation_manager | gzip > $BACKUP_DIR/formation_manager_$DATE.sql.gz
|
||||
|
||||
# Garder seulement les 30 dernières sauvegardes
|
||||
find $BACKUP_DIR -name "formation_manager_*.sql.gz" -mtime +30 -delete
|
||||
```
|
||||
|
||||
Rendez le script exécutable et ajoutez-le au cron :
|
||||
|
||||
```bash
|
||||
chmod +x /opt/formation-manager/backup-db.sh
|
||||
sudo crontab -e
|
||||
```
|
||||
|
||||
Ajoutez la ligne suivante pour une sauvegarde quotidienne à 2h du matin :
|
||||
|
||||
```
|
||||
0 2 * * * /opt/formation-manager/backup-db.sh
|
||||
```
|
||||
|
||||
### Mise à jour de l'application
|
||||
|
||||
Pour mettre à jour l'application vers une nouvelle version :
|
||||
|
||||
```bash
|
||||
cd /opt/formation-manager/app
|
||||
sudo systemctl stop formation-manager
|
||||
git pull origin main
|
||||
pnpm install
|
||||
pnpm db:push # Appliquer les migrations
|
||||
pnpm run build
|
||||
sudo systemctl start formation-manager
|
||||
```
|
||||
|
||||
### Surveillance et monitoring
|
||||
|
||||
Installez des outils de monitoring pour surveiller les performances :
|
||||
|
||||
**PM2** : Alternative à systemd avec monitoring intégré
|
||||
**Prometheus + Grafana** : Monitoring avancé et dashboards
|
||||
**Uptime Kuma** : Surveillance de disponibilité
|
||||
**New Relic / DataDog** : Solutions SaaS complètes
|
||||
|
||||
---
|
||||
|
||||
## Dépannage
|
||||
|
||||
### L'application ne démarre pas
|
||||
|
||||
Vérifiez les logs pour identifier l'erreur :
|
||||
|
||||
```bash
|
||||
sudo journalctl -u formation-manager -n 100
|
||||
```
|
||||
|
||||
Causes courantes :
|
||||
|
||||
- **Erreur de connexion à la base de données** : Vérifiez `DATABASE_URL` dans `.env`
|
||||
- **Port déjà utilisé** : Changez le port dans `.env` ou arrêtez le processus conflictuel
|
||||
- **Permissions insuffisantes** : Vérifiez les droits sur `/opt/formation-manager/app`
|
||||
|
||||
### Erreur 502 Bad Gateway
|
||||
|
||||
Cette erreur indique que Nginx ne peut pas se connecter au backend Node.js. Vérifications :
|
||||
|
||||
```bash
|
||||
# Vérifier que le service tourne
|
||||
sudo systemctl status formation-manager
|
||||
|
||||
# Vérifier que le port 3000 écoute
|
||||
sudo netstat -tulpn | grep 3000
|
||||
|
||||
# Tester la connexion locale
|
||||
curl http://localhost:3000
|
||||
```
|
||||
|
||||
### Problèmes de performance
|
||||
|
||||
Si l'application est lente :
|
||||
|
||||
1. **Optimiser les requêtes SQL** : Ajoutez des index sur les colonnes fréquemment interrogées
|
||||
2. **Activer le cache Redis** : Mettez en cache les résultats des requêtes coûteuses
|
||||
3. **Augmenter les ressources** : Ajoutez plus de RAM ou de CPU
|
||||
4. **Activer la compression Nginx** : Déjà configurée dans l'exemple ci-dessus
|
||||
|
||||
### Base de données corrompue
|
||||
|
||||
En cas de corruption de la base de données, restaurez depuis une sauvegarde :
|
||||
|
||||
```bash
|
||||
gunzip < /opt/formation-manager/backups/formation_manager_YYYYMMDD_HHMMSS.sql.gz | mysql -u formation_user -p formation_manager
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sécurité
|
||||
|
||||
### Bonnes pratiques
|
||||
|
||||
Suivez ces recommandations pour sécuriser votre déploiement :
|
||||
|
||||
**Mettez à jour régulièrement** : Appliquez les mises à jour de sécurité du système d'exploitation et des dépendances Node.js.
|
||||
|
||||
**Utilisez HTTPS uniquement** : Forcez la redirection HTTP vers HTTPS et activez HSTS (HTTP Strict Transport Security).
|
||||
|
||||
**Limitez les accès SSH** : Utilisez des clés SSH au lieu de mots de passe et limitez l'accès par IP si possible.
|
||||
|
||||
**Configurez un WAF** : Utilisez un Web Application Firewall comme ModSecurity ou Cloudflare pour bloquer les attaques courantes.
|
||||
|
||||
**Surveillez les logs** : Configurez des alertes pour détecter les tentatives d'intrusion ou les comportements anormaux.
|
||||
|
||||
**Sauvegardez régulièrement** : Automatisez les sauvegardes de la base de données et testez régulièrement la restauration.
|
||||
|
||||
### Checklist de sécurité
|
||||
|
||||
Avant de mettre en production, vérifiez les points suivants :
|
||||
|
||||
- [ ] Certificat SSL valide configuré
|
||||
- [ ] Pare-feu activé et configuré
|
||||
- [ ] Authentification SSH par clé uniquement
|
||||
- [ ] Variables d'environnement sécurisées (pas de valeurs par défaut)
|
||||
- [ ] Sauvegardes automatiques configurées
|
||||
- [ ] Monitoring et alertes en place
|
||||
- [ ] Logs rotatifs configurés
|
||||
- [ ] Permissions fichiers correctes (pas de 777)
|
||||
- [ ] Base de données accessible uniquement en local
|
||||
- [ ] Rate limiting configuré sur Nginx
|
||||
|
||||
---
|
||||
|
||||
## Support et contact
|
||||
|
||||
Pour toute question ou problème concernant le déploiement :
|
||||
|
||||
- **Documentation technique** : Consultez le README.md du projet
|
||||
- **Support Manus** : https://help.manus.im
|
||||
- **Contact développeur** : o.pareige@itinova.org
|
||||
|
||||
---
|
||||
|
||||
**Fin du guide de déploiement**
|
||||
234
deployment-package/docs/INSTRUCTIONS-DEPLOIEMENT.md
Normal file
234
deployment-package/docs/INSTRUCTIONS-DEPLOIEMENT.md
Normal file
@@ -0,0 +1,234 @@
|
||||
# Instructions de déploiement - Formation Manager Itinova
|
||||
|
||||
Version: **d0d9d870**
|
||||
Date: 3 janvier 2025
|
||||
|
||||
## 📋 Résumé des modifications
|
||||
|
||||
Cette mise à jour contient les corrections suivantes :
|
||||
|
||||
1. **Bug d'inscription - Mauvais apprenant associé**
|
||||
- Création d'une procédure publique `apprenants.createPublic`
|
||||
- Les inscriptions depuis la page publique fonctionnent correctement
|
||||
|
||||
2. **Bug email de confirmation - Variables non remplacées**
|
||||
- Correction du template d'inscription dans la base de données
|
||||
- Ajout de la variable `{{datesHTML}}` dans l'objet variables
|
||||
- Toutes les variables sont maintenant correctement remplacées
|
||||
|
||||
3. **Amélioration de l'interface des templates d'emails**
|
||||
- Ajout du bouton `{{datesHTML}}` dans l'éditeur
|
||||
- Prévisualisation améliorée avec exemple de dates formatées
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Déploiement automatique (recommandé)
|
||||
|
||||
### Prérequis
|
||||
- Accès SSH au serveur VPS
|
||||
- Git configuré avec accès au dépôt
|
||||
- PM2 installé pour la gestion du processus
|
||||
- pnpm installé
|
||||
|
||||
### Étapes
|
||||
|
||||
1. **Se connecter au serveur VPS**
|
||||
```bash
|
||||
ssh votre-utilisateur@votre-serveur.com
|
||||
```
|
||||
|
||||
2. **Aller dans le répertoire du projet**
|
||||
```bash
|
||||
cd /chemin/vers/formation-manager-itinova
|
||||
```
|
||||
|
||||
3. **Rendre le script exécutable**
|
||||
```bash
|
||||
chmod +x deploy-update.sh
|
||||
```
|
||||
|
||||
4. **Exécuter le script de mise à jour**
|
||||
```bash
|
||||
./deploy-update.sh
|
||||
```
|
||||
|
||||
Le script va automatiquement :
|
||||
- ✅ Sauvegarder la base de données
|
||||
- ✅ Arrêter le serveur
|
||||
- ✅ Récupérer les dernières modifications
|
||||
- ✅ Installer les dépendances
|
||||
- ✅ Appliquer les migrations
|
||||
- ✅ Compiler le projet
|
||||
- ✅ Redémarrer le serveur
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Déploiement manuel
|
||||
|
||||
Si vous préférez effectuer la mise à jour manuellement :
|
||||
|
||||
### 1. Sauvegarde de la base de données
|
||||
|
||||
```bash
|
||||
# Créer un répertoire de backup
|
||||
mkdir -p backups
|
||||
|
||||
# Sauvegarder la base de données
|
||||
mysqldump -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE > backups/db-backup-$(date +%Y%m%d-%H%M%S).sql
|
||||
```
|
||||
|
||||
### 2. Arrêter le serveur
|
||||
|
||||
```bash
|
||||
pm2 stop formation-manager
|
||||
```
|
||||
|
||||
### 3. Récupérer les modifications
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git checkout main
|
||||
git pull origin main
|
||||
```
|
||||
|
||||
### 4. Installer les dépendances
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### 5. Appliquer les migrations de base de données
|
||||
|
||||
```bash
|
||||
pnpm db:push
|
||||
```
|
||||
|
||||
**OU** appliquer manuellement le script SQL :
|
||||
|
||||
```bash
|
||||
mysql -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE < update-database.sql
|
||||
```
|
||||
|
||||
### 6. Compiler le projet
|
||||
|
||||
```bash
|
||||
pnpm build
|
||||
```
|
||||
|
||||
### 7. Redémarrer le serveur
|
||||
|
||||
```bash
|
||||
pm2 restart formation-manager
|
||||
# OU si c'est le premier démarrage :
|
||||
pm2 start npm --name "formation-manager" -- start
|
||||
```
|
||||
|
||||
### 8. Vérifier le statut
|
||||
|
||||
```bash
|
||||
pm2 status formation-manager
|
||||
pm2 logs formation-manager --lines 50
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Tests après déploiement
|
||||
|
||||
Après le déploiement, vérifiez que tout fonctionne correctement :
|
||||
|
||||
### 1. Test d'inscription publique
|
||||
- [ ] Aller sur la page d'inscription publique d'une formation
|
||||
- [ ] Créer une nouvelle inscription avec un nouvel apprenant
|
||||
- [ ] Vérifier que l'apprenant est correctement créé dans la base de données
|
||||
- [ ] Vérifier que l'inscription est associée au bon apprenant
|
||||
|
||||
### 2. Test de l'email de confirmation
|
||||
- [ ] Effectuer une inscription
|
||||
- [ ] Vérifier la réception de l'email de confirmation
|
||||
- [ ] Vérifier que toutes les variables sont remplacées (notamment `{{prenomApprenant}}` et `{{datesHTML}}`)
|
||||
- [ ] Vérifier que les invitations ICS sont jointes (une par date)
|
||||
|
||||
### 3. Test de l'interface des templates
|
||||
- [ ] Aller dans Configuration > Templates d'emails
|
||||
- [ ] Vérifier que le bouton "Dates (HTML)" est présent
|
||||
- [ ] Cliquer sur le bouton pour insérer `{{datesHTML}}`
|
||||
- [ ] Vérifier la prévisualisation
|
||||
|
||||
---
|
||||
|
||||
## 📊 Vérification de la base de données
|
||||
|
||||
Pour vérifier que la mise à jour du template d'inscription a été appliquée :
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
type,
|
||||
name,
|
||||
bodyContent,
|
||||
updatedAt
|
||||
FROM emailTemplates
|
||||
WHERE type = 'inscription';
|
||||
```
|
||||
|
||||
Le `bodyContent` doit contenir les variables `{{prenomApprenant}}`, `{{nomApprenant}}`, et `{{datesHTML}}`.
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Rollback (en cas de problème)
|
||||
|
||||
Si vous rencontrez des problèmes après la mise à jour :
|
||||
|
||||
### 1. Restaurer la base de données
|
||||
|
||||
```bash
|
||||
# Lister les sauvegardes disponibles
|
||||
ls -lh backups/
|
||||
|
||||
# Restaurer une sauvegarde
|
||||
mysql -h VOTRE_HOST -u VOTRE_USER -p VOTRE_DATABASE < backups/db-backup-YYYYMMDD-HHMMSS.sql
|
||||
```
|
||||
|
||||
### 2. Revenir à la version précédente du code
|
||||
|
||||
```bash
|
||||
# Voir l'historique des commits
|
||||
git log --oneline
|
||||
|
||||
# Revenir au commit précédent
|
||||
git checkout COMMIT_HASH
|
||||
|
||||
# Réinstaller les dépendances
|
||||
pnpm install
|
||||
|
||||
# Recompiler
|
||||
pnpm build
|
||||
|
||||
# Redémarrer
|
||||
pm2 restart formation-manager
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support
|
||||
|
||||
En cas de problème lors du déploiement :
|
||||
|
||||
1. Consulter les logs du serveur : `pm2 logs formation-manager`
|
||||
2. Vérifier l'état du serveur : `pm2 status`
|
||||
3. Vérifier les logs de la base de données
|
||||
4. Contacter le support technique
|
||||
|
||||
---
|
||||
|
||||
## 📝 Notes importantes
|
||||
|
||||
- **Sauvegarde automatique** : Le script `deploy-update.sh` crée automatiquement une sauvegarde de la base de données avant toute modification
|
||||
- **Temps d'arrêt** : Le déploiement nécessite un arrêt temporaire du serveur (environ 2-3 minutes)
|
||||
- **Variables d'environnement** : Assurez-vous que toutes les variables d'environnement nécessaires sont correctement configurées (DATABASE_URL, RESEND_API_KEY, etc.)
|
||||
- **Permissions** : Le script doit être exécuté avec les permissions appropriées pour accéder à la base de données et redémarrer PM2
|
||||
|
||||
---
|
||||
|
||||
**Version du checkpoint** : d0d9d870
|
||||
**Date de création** : 3 janvier 2025
|
||||
**Auteur** : Manus AI
|
||||
455
deployment-package/docs/README.md
Normal file
455
deployment-package/docs/README.md
Normal file
@@ -0,0 +1,455 @@
|
||||
# Gestion des Formations Manager Itinova
|
||||
|
||||
Application web complète de gestion des formations pour Manager Itinova, permettant la planification, l'organisation et le suivi des formations avec gestion automatisée des inscriptions, rappels et communications.
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
## 📋 Table des matières
|
||||
|
||||
- [Aperçu](#aperçu)
|
||||
- [Fonctionnalités](#fonctionnalités)
|
||||
- [Technologies](#technologies)
|
||||
- [Installation rapide](#installation-rapide)
|
||||
- [Documentation](#documentation)
|
||||
- [Architecture](#architecture)
|
||||
- [Utilisation](#utilisation)
|
||||
- [Déploiement](#déploiement)
|
||||
- [Maintenance](#maintenance)
|
||||
- [Support](#support)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Aperçu
|
||||
|
||||
L'application **Gestion des Formations Manager Itinova** est une solution complète pour gérer l'ensemble du cycle de vie des formations :
|
||||
|
||||
- Création et planification des formations et séquences
|
||||
- Gestion des apprenants et inscriptions avec validation automatique
|
||||
- Génération automatique de documents (listes, feuilles de présence)
|
||||
- Envoi automatique d'emails (confirmations, rappels)
|
||||
- Calendrier interactif et système de rappels
|
||||
- Rapports et statistiques détaillés
|
||||
|
||||
L'application offre **deux modes d'authentification** :
|
||||
- **Connexion Manus OAuth** : pour les utilisateurs avec compte Manus (Google, Microsoft, Apple)
|
||||
- **Connexion locale** : pour les administrateurs avec identifiant et mot de passe
|
||||
|
||||
---
|
||||
|
||||
## ✨ Fonctionnalités
|
||||
|
||||
### 🔐 Authentification dual
|
||||
|
||||
- Page de choix de connexion
|
||||
- Authentification Manus OAuth (Google, Microsoft, Apple)
|
||||
- Authentification locale par identifiant/mot de passe
|
||||
- Gestion des rôles (admin, user)
|
||||
- Utilisateur administrateur permanent non supprimable
|
||||
|
||||
### 📚 Gestion des formations
|
||||
|
||||
- CRUD complet des formations
|
||||
- Support de multiples séquences par formation
|
||||
- Jusqu'à 4 dates par séquence
|
||||
- Champs personnalisés :
|
||||
- Public cible (Directeurs, Chefs de service, Autre, Tous)
|
||||
- Formateur avec autocomplétion
|
||||
- Capacité maximale par séquence
|
||||
- Lieu de formation
|
||||
- Barre de progression colorée (vert/orange/rouge) selon le taux de remplissage
|
||||
- Filtres et recherche avancée
|
||||
|
||||
### 👥 Gestion des apprenants
|
||||
|
||||
- CRUD complet des apprenants
|
||||
- Fonction (Directeur, Chef de service, Autre)
|
||||
- Page de détail par apprenant avec historique complet
|
||||
- Système d'inscription avec :
|
||||
- Validation de capacité automatique
|
||||
- Détection anti-doublons
|
||||
- Blocage automatique à J-15
|
||||
- Alerte si public cible incompatible
|
||||
|
||||
### 📅 Calendrier et rappels
|
||||
|
||||
- Calendrier mensuel interactif
|
||||
- Navigation par mois
|
||||
- Visualisation des séquences par date
|
||||
- Système de rappels automatiques configurables :
|
||||
- Rappel J-7
|
||||
- Rappel J-3
|
||||
- Rappel J-1
|
||||
- Rappel personnalisé
|
||||
|
||||
### 📄 Exports et documents
|
||||
|
||||
- **Export Excel** : listes d'inscrits avec toutes les informations
|
||||
- **Export PDF** : listes d'inscrits formatées
|
||||
- **Feuilles de présence PDF** :
|
||||
- Logo Itinova
|
||||
- Double signature (matin/après-midi)
|
||||
- Signature formateur
|
||||
- Informations complètes de la séquence
|
||||
|
||||
### ✉️ Communications automatiques
|
||||
|
||||
- **Génération d'invitations Outlook** (.ics)
|
||||
- **Emails automatiques** :
|
||||
- Email de confirmation d'inscription
|
||||
- Email teaser (présentation de la formation)
|
||||
- Email de rappel J-7
|
||||
- **Templates personnalisables** avec variables dynamiques
|
||||
- **Configuration SMTP** avec Resend
|
||||
- Mode test et production
|
||||
|
||||
### 📊 Rapports et statistiques
|
||||
|
||||
- Tableau de bord avec indicateurs clés
|
||||
- Répartition des apprenants par fonction
|
||||
- Analyse public cible vs fonction réelle
|
||||
- Statistiques de remplissage des séquences
|
||||
- Historique des inscriptions
|
||||
|
||||
### 👤 Administration
|
||||
|
||||
- Gestion des utilisateurs
|
||||
- Création, modification, activation/désactivation
|
||||
- Attribution des rôles
|
||||
- Utilisateur admin permanent (adminServFormation)
|
||||
- Templates d'emails personnalisables
|
||||
- Configuration SMTP centralisée
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Technologies
|
||||
|
||||
### Frontend
|
||||
|
||||
- **React 19** : bibliothèque UI moderne
|
||||
- **Tailwind CSS 4** : framework CSS utility-first
|
||||
- **shadcn/ui** : composants UI accessibles
|
||||
- **Wouter** : routage léger
|
||||
- **TanStack Query** : gestion des données asynchrones
|
||||
- **Recharts** : visualisation de données
|
||||
- **date-fns** : manipulation de dates
|
||||
|
||||
### Backend
|
||||
|
||||
- **Node.js 22** : runtime JavaScript
|
||||
- **Express 4** : framework web
|
||||
- **tRPC 11** : API type-safe end-to-end
|
||||
- **Drizzle ORM** : ORM TypeScript-first
|
||||
- **MySQL/TiDB** : base de données relationnelle
|
||||
|
||||
### Outils
|
||||
|
||||
- **TypeScript** : typage statique
|
||||
- **Vite** : build tool rapide
|
||||
- **pnpm** : gestionnaire de paquets performant
|
||||
- **Vitest** : framework de tests
|
||||
|
||||
### Services externes
|
||||
|
||||
- **Resend** : envoi d'emails transactionnels
|
||||
- **Manus OAuth** : authentification sociale
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Installation rapide
|
||||
|
||||
### Prérequis
|
||||
|
||||
- Node.js 22+
|
||||
- MySQL 8.0+ ou MariaDB 10.6+
|
||||
- pnpm (installé automatiquement avec Node.js)
|
||||
|
||||
### Installation en 4 étapes
|
||||
|
||||
```bash
|
||||
# 1. Installer les dépendances
|
||||
pnpm install
|
||||
|
||||
# 2. Configurer les variables d'environnement
|
||||
cp .env.example .env
|
||||
# Éditer .env avec vos paramètres
|
||||
|
||||
# 3. Créer et initialiser la base de données
|
||||
mysql -u root -p -e "CREATE DATABASE formation_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||
pnpm db:push
|
||||
|
||||
# 4. Démarrer l'application
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
L'application sera accessible à **http://localhost:3000**
|
||||
|
||||
### Connexion initiale
|
||||
|
||||
- **Identifiant** : `adminServFormation`
|
||||
- **Mot de passe** : `Itinova69!`
|
||||
|
||||
📖 **Guide complet** : voir [INSTALL.md](INSTALL.md)
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
- **[INSTALL.md](INSTALL.md)** : Guide d'installation rapide (5 minutes)
|
||||
- **[DEPLOYMENT.md](DEPLOYMENT.md)** : Guide de déploiement complet
|
||||
- **[deploy.sh](deploy.sh)** : Script de déploiement automatique
|
||||
|
||||
---
|
||||
|
||||
## 🏗 Architecture
|
||||
|
||||
### Structure du projet
|
||||
|
||||
```
|
||||
formation-manager-itinova/
|
||||
├── client/ # Application frontend
|
||||
│ ├── public/ # Fichiers statiques
|
||||
│ │ └── logo.svg # Logo de l'application
|
||||
│ └── src/
|
||||
│ ├── pages/ # Pages de l'application
|
||||
│ │ ├── LoginChoice.tsx
|
||||
│ │ ├── Login.tsx
|
||||
│ │ ├── Dashboard.tsx
|
||||
│ │ ├── Formations.tsx
|
||||
│ │ ├── Sequences.tsx
|
||||
│ │ ├── Apprenants.tsx
|
||||
│ │ └── ...
|
||||
│ ├── components/ # Composants réutilisables
|
||||
│ │ ├── DashboardLayout.tsx
|
||||
│ │ └── ui/ # Composants shadcn/ui
|
||||
│ └── lib/ # Bibliothèques et utilitaires
|
||||
│ └── trpc.ts # Client tRPC
|
||||
├── server/ # Application backend
|
||||
│ ├── routers.ts # Routes API tRPC
|
||||
│ ├── db.ts # Fonctions d'accès BDD
|
||||
│ └── _core/ # Configuration serveur
|
||||
│ ├── index.ts # Point d'entrée
|
||||
│ ├── trpc.ts # Configuration tRPC
|
||||
│ ├── localAuth.ts # Authentification locale
|
||||
│ └── ...
|
||||
├── drizzle/ # Base de données
|
||||
│ └── schema.ts # Schéma des tables
|
||||
├── shared/ # Code partagé
|
||||
│ └── const.ts # Constantes
|
||||
├── .env # Variables d'environnement
|
||||
├── package.json # Dépendances
|
||||
├── deploy.sh # Script de déploiement
|
||||
├── DEPLOYMENT.md # Guide de déploiement
|
||||
├── INSTALL.md # Guide d'installation
|
||||
└── README.md # Ce fichier
|
||||
```
|
||||
|
||||
### Base de données
|
||||
|
||||
**Tables principales** :
|
||||
|
||||
- `users` : utilisateurs de l'application
|
||||
- `formations` : formations disponibles
|
||||
- `sequences` : séquences de formation (dates)
|
||||
- `apprenants` : apprenants inscrits
|
||||
- `inscriptions` : inscriptions aux séquences
|
||||
- `rappels` : rappels configurés
|
||||
- `email_templates` : templates d'emails
|
||||
- `email_config` : configuration SMTP
|
||||
|
||||
### API (tRPC)
|
||||
|
||||
L'API utilise tRPC pour une communication type-safe entre le client et le serveur.
|
||||
|
||||
**Routers principaux** :
|
||||
|
||||
- `auth` : authentification (me, logout)
|
||||
- `formations` : CRUD formations
|
||||
- `sequences` : CRUD séquences
|
||||
- `apprenants` : CRUD apprenants
|
||||
- `inscriptions` : gestion des inscriptions
|
||||
- `rappels` : gestion des rappels
|
||||
- `emails` : envoi d'emails et gestion des templates
|
||||
- `users` : gestion des utilisateurs
|
||||
- `stats` : statistiques et rapports
|
||||
|
||||
---
|
||||
|
||||
## 💻 Utilisation
|
||||
|
||||
### Commandes disponibles
|
||||
|
||||
```bash
|
||||
# Développement
|
||||
pnpm dev # Démarrer le serveur de développement
|
||||
pnpm build # Builder pour la production
|
||||
pnpm start # Démarrer en mode production
|
||||
|
||||
# Base de données
|
||||
pnpm db:push # Appliquer les migrations
|
||||
pnpm db:generate # Générer les migrations
|
||||
pnpm db:studio # Ouvrir Drizzle Studio
|
||||
|
||||
# Tests
|
||||
pnpm test # Lancer les tests
|
||||
pnpm test:ui # Interface de tests Vitest
|
||||
|
||||
# Linting
|
||||
pnpm lint # Vérifier le code
|
||||
pnpm format # Formater le code
|
||||
```
|
||||
|
||||
### Workflow typique
|
||||
|
||||
1. **Créer une formation**
|
||||
- Menu "Formations" → "Nouvelle formation"
|
||||
- Remplir les informations
|
||||
- Sauvegarder
|
||||
|
||||
2. **Créer des séquences**
|
||||
- Cliquer sur la formation
|
||||
- "Ajouter une séquence"
|
||||
- Définir les dates (jusqu'à 4)
|
||||
- Définir la capacité maximale
|
||||
|
||||
3. **Ajouter des apprenants**
|
||||
- Menu "Apprenants" → "Ajouter un apprenant"
|
||||
- Remplir nom, prénom, email, fonction
|
||||
|
||||
4. **Gérer les inscriptions**
|
||||
- Depuis la page de la séquence
|
||||
- Ou depuis la page de l'apprenant
|
||||
- Validation automatique de la capacité
|
||||
|
||||
5. **Configurer les rappels**
|
||||
- Menu "Rappels"
|
||||
- Activer les rappels souhaités (J-7, J-3, J-1)
|
||||
- Les emails seront envoyés automatiquement
|
||||
|
||||
6. **Exporter les documents**
|
||||
- Liste des inscrits (Excel ou PDF)
|
||||
- Feuille de présence (PDF)
|
||||
- Invitation Outlook (.ics)
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Déploiement
|
||||
|
||||
### Option 1 : Plateforme Manus (recommandé)
|
||||
|
||||
L'application est optimisée pour la plateforme Manus :
|
||||
|
||||
1. Créer un checkpoint
|
||||
2. Cliquer sur "Publish"
|
||||
3. Configurer le domaine
|
||||
4. Publier
|
||||
|
||||
**Avantages** : déploiement automatique, SSL, scaling, base de données incluse.
|
||||
|
||||
### Option 2 : Serveur VPS
|
||||
|
||||
Utiliser le script de déploiement automatique :
|
||||
|
||||
```bash
|
||||
# Rendre le script exécutable
|
||||
chmod +x deploy.sh
|
||||
|
||||
# Lancer le déploiement
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
Le script effectue automatiquement :
|
||||
- Vérification des prérequis
|
||||
- Installation des dépendances
|
||||
- Sauvegarde de la base de données
|
||||
- Application des migrations
|
||||
- Build de l'application
|
||||
- Redémarrage du service
|
||||
|
||||
📖 **Guide complet** : voir [DEPLOYMENT.md](DEPLOYMENT.md)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Maintenance
|
||||
|
||||
### Sauvegardes automatiques
|
||||
|
||||
Le script de déploiement crée automatiquement des sauvegardes de la base de données.
|
||||
|
||||
Pour configurer des sauvegardes régulières :
|
||||
|
||||
```bash
|
||||
# Ajouter une tâche cron
|
||||
crontab -e
|
||||
|
||||
# Sauvegarde quotidienne à 2h du matin
|
||||
0 2 * * * /chemin/vers/backup.sh
|
||||
```
|
||||
|
||||
### Mise à jour
|
||||
|
||||
```bash
|
||||
# Récupérer les dernières modifications
|
||||
git pull origin main
|
||||
|
||||
# Lancer le déploiement
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
### Logs
|
||||
|
||||
```bash
|
||||
# Logs de l'application (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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support
|
||||
|
||||
### Documentation
|
||||
|
||||
- [Guide d'installation](INSTALL.md)
|
||||
- [Guide de déploiement](DEPLOYMENT.md)
|
||||
- Code source commenté
|
||||
|
||||
### Dépannage
|
||||
|
||||
Consultez la section "Dépannage" dans [DEPLOYMENT.md](DEPLOYMENT.md) pour les problèmes courants.
|
||||
|
||||
### Contact
|
||||
|
||||
Pour toute question ou problème :
|
||||
- Consulter la documentation
|
||||
- Vérifier les logs de l'application
|
||||
- Contacter l'équipe de développement
|
||||
|
||||
---
|
||||
|
||||
## 📝 Licence
|
||||
|
||||
Ce projet est la propriété de Manager Itinova. Tous droits réservés.
|
||||
|
||||
---
|
||||
|
||||
## 🙏 Crédits
|
||||
|
||||
Développé avec ❤️ pour Manager Itinova
|
||||
|
||||
**Technologies utilisées** :
|
||||
- React, Tailwind CSS, shadcn/ui
|
||||
- Node.js, Express, tRPC
|
||||
- Drizzle ORM, MySQL
|
||||
- Resend, Manus OAuth
|
||||
|
||||
---
|
||||
|
||||
**Version** : 1.0.0
|
||||
**Dernière mise à jour** : 23 novembre 2025
|
||||
Reference in New Issue
Block a user