Skip to content

Guide d'installation et de configuration

Ce guide s'adresse à l'administrateur plateforme (rôle ADMIN). Il couvre l'installation sur VPS, la configuration des variables d'environnement, le premier démarrage et la gestion opérationnelle.


Checklist de démarrage

Avant de lancer l'environnement, vérifier que les points suivants sont couverts :

  • [ ] Node.js 20 LTS installé sur le VPS
  • [ ] Docker Engine 24+ et Docker Compose v2 installés
  • [ ] PostgreSQL 16 accessible (ou démarré via Docker)
  • [ ] Domaines DNS configurés et pointant sur le VPS
  • [ ] Fichiers .env créés dans api/, app/, et backoffice/
  • [ ] JWT_SECRET généré et renseigné (obligatoire)
  • [ ] Certificats TLS gérés par Traefik (Let's Encrypt)
  • [ ] Après le premier démarrage : configurer Agents IA, Stockage S3 et Stripe depuis Backoffice → Paramètres

Prérequis

ComposantVersion minimale
Node.js20 LTS
PostgreSQL14+ (16 recommandé)
Docker Engine24+
Docker Composev2+
Domaines DNSapi, app, bo + sous-domaines dev

Les trois packages (api/, app/, backoffice/) sont indépendants. Chacun a son propre package.json et son propre .env.


Structure des environnements

Branche gitVPSURLs
devDevapi-dev.governia.eu · app-dev.governia.eu · bo-dev.governia.eu
mainProdapi.governia.eu · app.governia.eu · bo.governia.eu

1. Variables d'environnement

api/.env

env
# Base de données
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=governia
DATABASE_PASSWORD=<mot_de_passe_fort>
DATABASE_NAME=governia_prod

# Auth — REQUIS : l'API refuse de démarrer sans JWT_SECRET
JWT_SECRET=<générer avec : openssl rand -base64 64>
JWT_EXPIRES_IN=7d

# Frontend (redirections OAuth, emails)
APP_FRONTEND_URL=https://app.governia.eu
BO_FRONTEND_URL=https://bo.governia.eu

# Env
NODE_ENV=production
PORT=4000
PUPPETEER_CACHE_DIR=/root/.cache/puppeteer

JWT_SECRET : générer avec openssl rand -base64 64. Ne jamais committer cette valeur. La changer invalide toutes les sessions actives.

Agents IA, Stockage S3, Stripe : à configurer depuis Backoffice → Paramètres après le premier démarrage. L'API démarre sans elles — les fonctionnalités sont simplement désactivées jusqu'à la configuration.

app/.env

env
NEXT_PUBLIC_API_URL=https://api.governia.eu
APP_NODE_ENV=production

⚠️ Sur VPS : toujours définir APP_NODE_ENV=production. Le mode dev (Turbopack) consomme ~1.5 GB de RAM et sature le CPU lors des compilations à la demande.

backoffice/.env

env
NEXT_PUBLIC_API_URL=https://api.governia.eu

2. Démarrage Docker (VPS)

bash
# Cloner le dépôt
git clone https://github.com/nashvilleboy2019-art/governia.git
cd governia

# Créer les fichiers .env
cp api/.env.example api/.env   # puis éditer avec vos valeurs
echo "NEXT_PUBLIC_API_URL=https://api.governia.eu" > app/.env
echo "NEXT_PUBLIC_API_URL=https://api.governia.eu" > backoffice/.env

# Lancer en production
docker compose -f docker-compose.prod.yml up -d

# Vérifier les logs de l'API
docker compose -f docker-compose.prod.yml logs -f api --tail=50

Noms des services Docker

ServiceRôlePort interne
dbPostgreSQL 165432
apiNestJS backend4000
clientApp Next.js (portail client)3000
backofficeBackoffice Next.js3000
docsVitePress documentation5173

Note : le portail client est nommé client dans Docker, pas app.

Vérifier que tout tourne

bash
# Statut des containers
docker compose -f docker-compose.prod.yml ps

# Santé de l'API
curl https://api.governia.eu/health

# Logs en temps réel
docker compose -f docker-compose.prod.yml logs -f api --tail=100

3. Workflow de déploiement

  Développement local


    branche dev  ──push──►  VPS dev  (git pull + restart)


    PR dev → main


    branche main ──push──►  VPS prod (git pull + restart)

Mise à jour sur le VPS prod

bash
git pull origin main

# Rebuild API
docker compose -f docker-compose.prod.yml up -d --build api

# Rebuild Backoffice
docker compose -f docker-compose.prod.yml up -d --build backoffice

# App client — vider le cache Next.js avant rebuild
docker volume rm app_next_cache bo_next_cache
docker compose -f docker-compose.prod.yml up -d

Volumes cache Next.js

Les caches .next sont persistés dans des volumes nommés. Si les changements ne semblent pas pris en compte après un git pull :

bash
docker compose -f docker-compose.prod.yml stop client
docker compose -f docker-compose.prod.yml run --rm client sh -c "rm -rf /usr/src/app/.next"
docker compose -f docker-compose.prod.yml up -d client

4. Base de données

Première initialisation

TypeORM crée les tables automatiquement au premier démarrage de l'API (via synchronize: true en dev, migrations explicites en prod).

Pour créer la base manuellement :

bash
psql -U postgres -c "CREATE DATABASE governia_prod;"
psql -U postgres -c "CREATE USER governia WITH PASSWORD 'xxxx';"
psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE governia_prod TO governia;"

Sauvegarde

bash
# Export
docker exec governia_prod_db pg_dump -U postgres governia_prod > backup_$(date +%Y%m%d).sql

# Restore
docker exec -i governia_prod_db psql -U postgres governia_prod < backup_20250101.sql

5. Gestion des tenants et utilisateurs

Depuis le backoffice (bo.governia.eu) :

Créer un nouveau client ou cabinet

  1. Utilisateurs → Créer une société — saisir raison sociale, type (CLIENT ou CABINET), contact principal
  2. Un tenant est créé automatiquement avec l'organisation
  3. Inviter le premier utilisateur : Invitations → Créer une invitation → rôle MANAGER_BU + tenant

Rôles disponibles

RôleInterfacePérimètre
ADMINBackofficeAccès complet plateforme
MANAGER_BUAppGestion du cabinet, missions, utilisateurs
AUDITORAppConduite des audits, questionnaires, rapports
RESP_CLIENTAppGestion des actions de remédiation, consultation
OPERATORAppConsultation en lecture

Flux d'invitation

  1. Backoffice → Invitations → Créer
  2. Saisir l'email, choisir le rôle et le tenant
  3. Copier le lien d'acceptation et l'envoyer manuellement
  4. L'utilisateur clique, définit son mot de passe, est redirigé vers l'app

L'envoi d'email automatique est en cours d'intégration.


6. Monitoring et supervision

Page Monitoring (backoffice)

Le backoffice expose une page Monitoring (/monitoring) avec :

  • Statut des services (API, base de données, stockage S3, agents IA)
  • Métriques de consommation IA par tenant
  • Historique des connexions utilisateur
  • Volume d'audits et de recommandations

Dashboard backoffice

La page d'accueil (/) affiche en temps réel :

  • Latences : PostgreSQL, Back-office, App client, Stockage S3
  • Alertes billing : abonnements en retard, essais expirant, résiliations planifiées

Commandes de supervision

bash
# Santé de l'API
curl https://api.governia.eu/health

# Logs en temps réel
docker compose -f docker-compose.prod.yml logs -f api --tail=100

# Métriques de ressources
docker stats

7. Sécurité

PointConfiguration
JWTDurée par défaut 7 jours. Rotation recommandée tous les 90 jours — changer JWT_SECRET invalide toutes les sessions
PasswordsHashés avec bcrypt (coût 10). Aucun mot de passe en clair en base
S3Preuves stockées sous evidences/{env}/{tenantId}/{auditId}/... — isolation par tenant
Multi-tenancyLe header X-Tenant-Id est vérifié contre le JWT. Impossible d'accéder aux données d'un autre tenant
Ports exposésSeuls 80/443 (Traefik) doivent être ouverts. PostgreSQL ne doit pas être accessible depuis Internet
BackofficeProtégé par basic auth Traefik en plus du JWT

8. Intégrations tierces

IntégrationGuide
Agents IA/integrations/agents-ia
Stockage S3/integrations/stockage-s3
Stripe/integrations/stripe
Jira/integrations/jira
Puppeteer PDF/integrations/puppeteer

9. Dépannage

L'API ne démarre pas

SymptômeCauseSolution
JWT_SECRET is requiredVariable manquanteAjouter JWT_SECRET dans api/.env
ECONNREFUSED 5432PostgreSQL non démarréDémarrer le service db en premier
Cannot connect to databaseMauvaises credentialsVérifier DATABASE_* dans api/.env
Chrome not foundPuppeteer non installéL'API installe Chrome au démarrage — attendre la fin du build

Les modifications ne s'affichent pas (Next.js)

bash
# Vider le cache Next.js
docker volume rm app_next_cache bo_next_cache
docker compose -f docker-compose.prod.yml up -d

Le token Jira est expiré

Si le bouton → Jira retourne une erreur :

  1. Suite → Paramètres → Intégrations
  2. Cliquer Reconnecter — le flow OAuth renouvelle le token

Les fonctions IA ou le stockage S3 ne fonctionnent pas

Vérifier que les intégrations sont configurées dans Backoffice → Paramètres → Agents IA / Stockage S3. Si le quota du provider est dépassé, ajuster dans les paramètres ou changer de provider.

GovernIA — Plateforme de gouvernance IA et conformité réglementaire