Skip to content

Configuration détaillée

Toutes les variables d'environnement de Nid, définies dans le fichier .env à la racine du projet.


Application

VariableDéfautDescription
FRONTEND_URLhttp://localhost:3000URL publique de l'application. Utilisée pour les redirections OAuth2 et la génération des URIs de callback
APP_PORT3000Port exposé de l'application (production unifiée)
ARCHIVE_PATH/archivesChemin interne Docker de stockage des archives EML
NODE_ENVdevelopmentEnvironnement d'exécution (development / production)
LOG_LEVELinfoNiveau de log (debug, info, warn, error)

JWT (authentification)

VariableDéfautDescription
JWT_SECRETRequis. Secret de signature des access tokens. Générez avec openssl rand -hex 64
JWT_REFRESH_SECRETRequis. Secret de signature des refresh tokens
JWT_EXPIRY15mDurée de validité de l'access token
JWT_REFRESH_EXPIRY30dDurée de validité du refresh token

Sécurité

Utilisez des secrets aléatoires longs (au moins 64 caractères hexadécimaux). Ne réutilisez jamais le même secret pour les access et refresh tokens.


Google OAuth2

VariableDéfautDescription
GOOGLE_CLIENT_IDRequis. Client ID de votre projet Google Cloud
GOOGLE_CLIENT_SECRETRequis. Client Secret de votre projet Google Cloud
GOOGLE_REDIRECT_URI(dérivé de FRONTEND_URL)URI de callback pour la connexion des comptes Gmail
GOOGLE_SSO_REDIRECT_URI(dérivé de FRONTEND_URL)URI de callback pour la connexion Google SSO

Dérivation automatique en Docker prod

En production, docker-compose.yml dérive automatiquement les URIs de callback à partir de FRONTEND_URL (ex. ${FRONTEND_URL}/api/auth/gmail/callback). Il suffit de définir FRONTEND_URL.

En développement local (hors Docker), définissez explicitement GOOGLE_REDIRECT_URI et GOOGLE_SSO_REDIRECT_URI pointant vers le port du backend (4000).


Social Login (SSO)

En plus de Google SSO, vous pouvez activer d'autres fournisseurs d'authentification. Chaque provider est activé automatiquement dès que ses variables CLIENT_ID et CLIENT_SECRET sont définies.

Microsoft

VariableDescription
MICROSOFT_CLIENT_IDClient ID de votre app Microsoft Entra. Créer sur portal.azure.com
MICROSOFT_CLIENT_SECRETClient Secret de votre app Microsoft Entra

Discord

VariableDescription
DISCORD_CLIENT_IDClient ID de votre app Discord. Créer sur discord.com/developers
DISCORD_CLIENT_SECRETClient Secret de votre app Discord

Facebook

VariableDescription
FACEBOOK_CLIENT_IDApp ID Meta. Créer sur developers.facebook.com
FACEBOOK_CLIENT_SECRETApp Secret Meta

LinkedIn

VariableDescription
LINKEDIN_CLIENT_IDClient ID LinkedIn. Créer sur linkedin.com/developers
LINKEDIN_CLIENT_SECRETClient Secret LinkedIn

Keycloak

VariableDescription
KEYCLOAK_REALM_URLURL du realm Keycloak (ex. https://auth.example.com/realms/myrealm)
KEYCLOAK_CLIENT_IDClient ID du client Keycloak
KEYCLOAK_CLIENT_SECRETClient Secret du client Keycloak

URI de callback

Pour chaque provider, l'URI de callback à enregistrer dans la console du fournisseur est :

{FRONTEND_URL}/api/auth/social/{provider}/callback

Exemple : http://localhost:3000/api/auth/social/microsoft/callback


Multi-utilisateurs

VariableDéfautDescription
ADMIN_EMAIL(vide)L'utilisateur qui s'inscrit avec cet email obtient automatiquement le rôle admin
ALLOW_REGISTRATIONtruefalse pour fermer les inscriptions (formulaire et SSO). Les tentatives retourneront une erreur 403

PostgreSQL

VariableDescription
POSTGRES_USERUtilisateur de la base de données
POSTGRES_PASSWORDMot de passe de la base de données
POSTGRES_DBNom de la base de données
DATABASE_URL(dérivé automatiquement en Docker) URL de connexion complète

Redis

VariableDéfautDescription
REDIS_URLredis://redis:6379URL de connexion Redis
REDIS_PASSWORD(vide)Mot de passe Redis (recommandé en production)

Throttling Gmail API

Gmail API impose des quotas (250 unités/user/seconde). Ces variables permettent de contrôler le débit :

VariableDéfautDescription
GMAIL_BATCH_SIZE25Nombre de requêtes parallèles par batch
GMAIL_THROTTLE_MS1000Pause en millisecondes entre chaque batch
GMAIL_CONCURRENCY10Nombre max de requêtes concurrentes vers Gmail API

Ajustement

Avec plusieurs utilisateurs actifs simultanément, augmentez GMAIL_THROTTLE_MS ou diminuez GMAIL_BATCH_SIZE pour éviter les erreurs 429 (rate limit).


Stockage distant (S3/MinIO)

En plus du stockage local, Nid peut archiver vers un bucket S3-compatible. Ces variables définissent la configuration globale (tous les utilisateurs). Chaque utilisateur peut aussi configurer son propre stockage S3 via l'interface.

VariableDéfautDescription
S3_ENDPOINT(vide)URL du serveur S3 (ex. https://s3.amazonaws.com ou https://minio.local:9000). Si vide, le stockage S3 global est désactivé
S3_REGIONus-east-1Région du bucket S3
S3_BUCKETnid-archivesNom du bucket de stockage
S3_ACCESS_KEY_ID(vide)Access Key ID pour l'authentification S3
S3_SECRET_ACCESS_KEY(vide)Secret Access Key pour l'authentification S3
S3_FORCE_PATH_STYLEtrueUtiliser le path-style pour les requêtes S3. Requis pour MinIO, désactiver pour AWS S3

MinIO en Docker

Pour utiliser MinIO auto-hébergé, ajoutez un service minio à votre docker-compose.yml :

yaml
minio:
  image: minio/minio
  command: server /data --console-address ":9001"
  environment:
    MINIO_ROOT_USER: minioadmin
    MINIO_ROOT_PASSWORD: minioadmin
  volumes:
    - minio_data:/data
  ports:
    - "9000:9000"
    - "9001:9001"

Puis configurez :

bash
S3_ENDPOINT=http://minio:9000
S3_ACCESS_KEY_ID=minioadmin
S3_SECRET_ACCESS_KEY=minioadmin
S3_BUCKET=nid-archives
S3_FORCE_PATH_STYLE=true

Volumes Docker

Configuration par défaut

yaml
volumes:
  - ./volumes/archives:/archives    # Archives EML
  - postgres_data:/var/lib/postgresql/data
  - redis_data:/data

Pointer vers un NAS

yaml
volumes:
  - /volume1/gmail-archives:/archives
yaml
volumes:
  - /mnt/pool/gmail-archives:/archives
yaml
volumes:
  - /chemin/vers/vos/archives:/archives

Documentation API (Swagger)

La documentation Swagger est disponible en développement à :

http://localhost:4000/docs

En production (image unifiée) :

http://localhost:3000/api/docs

Elle est générée automatiquement par @fastify/swagger et liste tous les endpoints avec leurs schémas.