Posez votre question et obtenez un résumé du document en referencant cette page et le Provider AI de votre choix
Ce document n'est pas à jour, la version de base a été mise à jour le 23 août 2026.
Aller à la doc anglaiseHistorique des versions
Le contenu de cette page a été traduit à l'aide d'une IA.
Voir la dernière version du contenu original en anglaisSi vous avez une idée d’amélioration pour améliorer cette documentation, n’hésitez pas à contribuer en submitant une pull request sur GitHub.
Lien GitHub de la documentationCopier le Markdown du doc dans le presse-papiers
Auto-hébergement d'Intlayer
Intlayer peut fonctionner entièrement sur votre propre infrastructure — aucun compte Intlayer Cloud n'est requis. Une seule commande démarre une stack prête pour la production :
Une seule commande installe tout :
Copier le code dans le presse-papiers
L'installateur télécharge un fichier docker-compose.yml et un fichier .env, génère automatiquement les secrets requis et démarre tous les conteneurs avec docker compose up -d.
La seule dépendance externe est MongoDB : le backend se connecte à un cluster MongoDB Atlas, que vous fournissez. Tout le reste s'exécute à l'intérieur du conteneur.
Table des matières
Architecture
Copier le code dans le presse-papiers
Chromium (utilisé pour la génération de captures d'écran Puppeteer) est intégré à l'image du backend — aucun conteneur séparé n'est nécessaire.
Prérequis
- Docker ≥ 24 et Docker Compose ≥ v2. Si l'un des deux est manquant, l'installateur affiche le lien d'installation et quitte.
- Ports
3000,3100,8025,9000et9001disponibles sur l'hôte. - Un hôte Linux ou macOS (ou WSL2 sur Windows).
Tout le reste — Bun, Redis, MinIO, Chromium — est fourni dans l'image.
Démarrage rapide
1. Exécuter l'installateur
Copier le code dans le presse-papiers
Il vérifie que Docker est installé et en cours d'exécution, écrit ./intlayer.env avec BETTER_AUTH_SECRET et S3_SECRET_ACCESS_KEY déjà générés, et télécharge l'image. Il ne démarre pas le conteneur — le backend ne peut pas démarrer sans vos identifiants de base de données.
Réexécuter l'installateur est sûr : un intlayer.env existant n'est jamais écrasé, il sert donc également de chemin de mise à niveau.
2. Remplissez vos identifiants
Ouvrez intlayer.env et complétez les valeurs marquées TODO :
Copier le code dans le presse-papiers
Le fichier contient également des blocs commentés pour les fonctionnalités optionnelles — SMTP mailer, OPENAI_API_KEY, et les fournisseurs OAuth. Décommentez ce dont vous avez besoin.
Le fichier est lu pardocker run --env-file, qui ne supprime pas les guillemets et traite tout ce qui suit=comme la valeur. Écrivez des valeurs nues et gardez les commentaires sur leurs propres lignes.
3. Démarrer le conteneur
Ceci est la commande que l'installateur affiche à la fin :
Copier le code dans le presse-papiers
Ouvrez ensuite http://localhost:3000. Le premier démarrage initialise les datastores, donc patientez une minute.
Le tableau de bord est servi sur localhost. Voir Limitations — les domaines personnalisés ne sont pas pris en charge par l'image publiée.
Paramètres du programme d'installation
Le programme d'installation lit quelques variables d'environnement. Comme il est dirigé vers sh, transmettez-les au shell plutôt qu'à curl :
Copier le code dans le presse-papiers
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Par défaut | Description |
|---|---|---|
INTLAYER_IMAGE | ghcr.io/aymericzip/intlayer-selfhost:latest | Image à télécharger |
INTLAYER_ENV_FILE | ./intlayer.env | Où écrire le fichier env |
INTLAYER_CONTAINER_NAME | intlayer | Nom du conteneur |
INTLAYER_DATA_VOLUME | intlayer-data | Volume nommé monté à /data |
INTLAYER_APP_PORT | 3000 | Port hôte pour le tableau de bord |
INTLAYER_API_PORT | 3100 | Port hôte pour l'API |
INTLAYER_S3_PORT | 9000 | Port hôte pour l'API S3 MinIO |
INTLAYER_CONSOLE_PORT | 9001 | Port hôte pour la console MinIO |
Les quatre variables de port ne modifient que le côté hôte du mappage imprimé dans la commandedocker run. L'image publiée ahttp://localhost:3000,http://localhost:3100ethttp://localhost:9000compilés dans le bundle du tableau de bord au moment de la compilation, donc les remapper laisse le navigateur pointant vers les anciens ports. Conservez les valeurs par défaut sauf si vous construisez votre propre image — voir Limitations.
Configuration initiale
Sur une instance vierge (base de données vide), l'ouverture du dashboard vous redirige vers la page /init :
- Créez le premier compte. Comme la collection users est vide, ce compte est automatiquement promu super admin.
- Un email de vérification est envoyé (via Resend). La vérification d'email est obligatoire — c'est pourquoi
RESEND_API_KEYdoit être défini avant de commencer. - Cliquez sur le lien dans l'email, puis connectez-vous.
Une fois qu'un admin existe, /init redirige vers la page de connexion standard.
Services
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Service | Image | Port(s) hôte | Objectif |
|---|---|---|---|
| app | construit à partir de apps/app/Dockerfile | 3000 | Tableau de bord TanStack Start (UI du CMS) |
| backend | construit à partir de apps/backend/Dockerfile | 3100 | API REST Fastify (endpoint /health) |
| mongo | mongo:7 | interne | Réplica set à nœud unique (rs0) |
| redis | redis:7-alpine | interne | Files d'attente de jobs (BullMQ) et mise en cache (ioredis) |
| minio | minio/minio | 9000 (S3), 9001 (console) | Stockage d'objets compatible S3 pour les avatars et les captures d'écran |
| mailpit | axllent/mailpit | 1025 (SMTP), 8025 (web UI) | Réceptacle local d'e-mails transactionnels |
Le port9000de MinIO doit être accessible par le navigateur car les assets téléchargés (avatars, captures d'écran) sont chargés directement depuisS3_PUBLIC_URL=http://localhost:9000/intlayer.
Variables d'environnement
Requis
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Exemple | Description |
|---|---|---|
DB_ID | intlayer | Utilisateur MongoDB Atlas |
DB_MDP | (votre mot de passe) | Mot de passe MongoDB Atlas |
DB_CLUSTER | cluster0.xxxxx.mongodb.net | Hôte du cluster MongoDB Atlas (utilisé dans l'URI mongodb+srv://) |
BETTER_AUTH_SECRET | (généré) | Secret de 32 octets pour la signature de session |
S3_SECRET_ACCESS_KEY | (généré) | Secret pour le MinIO intégré |
RESEND_API_KEY | (votre clé) | Email transactionnel via Resend. Requis pour la première configuration sauf si vous configurez un mailer SMTP global (voir Global mailer) |
Requis (auto-généré ou demandé)
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Exemple | Description |
|---|---|---|
NODE_ENV | production | Environnement d'exécution |
PORT | 3100 | Port d'écoute du backend |
BACKEND_URL | http://localhost:3100 | URL publique de l'API backend |
APP_URL | http://localhost:3000 | URL publique du tableau de bord |
DOMAIN | localhost | Domaine du cookie |
MONGODB_URI | mongodb://mongo:27017/intlayer?replicaSet=rs0 | URI de connexion complète à MongoDB |
REDIS_URL | redis://redis:6379 | URL de connexion Redis |
BETTER_AUTH_SECRET | (généré) | Secret de 32 octets pour la signature de session |
MAIL_PROVIDER | smtp | Transport de courrier : smtp ou resend |
MAIL_SMTP_HOST | mailpit | Nom d'hôte SMTP (nom du conteneur Mailpit) |
MAIL_SMTP_PORT | 1025 | Port SMTP |
MAIL_FROM | Intlayer <no-reply@localhost> | Adresse de l'expéditeur |
S3_ENDPOINT | http://minio:9000 | Endpoint compatible S3 |
S3_PUBLIC_URL | http://localhost:9000/intlayer | URL publique pour le chargement des assets par le navigateur |
S3_BUCKET_NAME | intlayer | Nom du bucket |
S3_ACCESS_KEY_ID | (généré) | Clé d'accès MinIO |
S3_SECRET_ACCESS_KEY | (généré) | Clé secrète MinIO |
VITE_BACKEND_URL | http://localhost:3100 | URL du backend intégrée au tableau de bord lors de la construction |
VITE_DOMAIN | localhost | Domaine intégré au tableau de bord lors de la construction |
Facultatif (les fonctionnalités se dégradent gracieusement en leur absence)
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Fonctionnalité |
|---|---|
OPENAI_API_KEY | Traduction assistée par IA et audit de contenu |
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_* | Gestion de la facturation et des abonnements |
RESEND_API_KEY | E-mail transactionnel via Resend (outrepasse Mailpit si défini) |
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET | Connexion OAuth GitHub |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Connexion OAuth Google |
GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET | Connexion OAuth GitLab |
MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET | Connexion OAuth Microsoft |
LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET | Connexion OAuth LinkedIn |
ATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRET | Connexion OAuth Atlassian |
Mailer global
Par défaut, tous les emails transactionnels sont envoyés via Resend en utilisant RESEND_API_KEY. Les déploiements auto-hébergés peuvent à la place router tous les emails — y compris les emails non-organisationnels tels que les réinitialisations de mot de passe et les liens magiques — via un mailer global configuré avec des variables d'environnement.
Définissez MAIL_PROVIDER pour l'activer. S'il n'est pas défini, le mailer Resend par défaut est utilisé.
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Exemple | Description |
|---|---|---|
MAIL_PROVIDER | smtp | Transport global : smtp ou resend. Laissez vide pour utiliser les valeurs par défaut |
MAIL_FROM | Intlayer <no-reply@acme.com> | En-tête d'expéditeur. Accepte une adresse simple ou un format Nom <email> |
MAIL_SMTP_HOST | smtp.acme.com | Hôte SMTP (requis quand MAIL_PROVIDER=smtp) |
MAIL_SMTP_PORT | 587 | Port SMTP (par défaut 587) |
MAIL_SMTP_SECURE | false | TLS implicite. Définissez true pour le port 465 |
MAIL_SMTP_USER | (votre utilisateur) | Nom d'utilisateur SMTP (optionnel ; omettez pour les relais non authentifiés) |
MAIL_SMTP_PASSWORD | (votre mot de passe) | Mot de passe SMTP |
Priorité : le mailer propre d'une organisation (configuré depuis le tableau de bord Organization) a priorité sur le mailer global, qui a lui-même priorité sur la clé Resend par défaut.
Connexion de votre projet Intlayer
Une fois la stack en cours d'exécution, pointez votre projet vers le backend et le tableau de bord auto-hébergés au lieu de intlayer.org.
Configuration du projet
Copier le code dans le presse-papiers
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
clientId: process.env.INTLAYER_CLIENT_ID,
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
/**
* URL du tableau de bord CMS auto-hébergé.
* Par défaut : https://app.intlayer.org
*/
cmsURL: process.env.INTLAYER_CMS_URL, // ex. http://localhost:3000
/**
* URL de l'API backend auto-hébergée.
* Par défaut : https://back.intlayer.org
*/
backendURL: process.env.INTLAYER_BACKEND_URL, // ex. http://localhost:3100
},
};
export default config;
Définissez les variables d'environnement dans le fichier .env de votre projet :
Copier le code dans le presse-papiers
Créez des identifiants d'accès dans votre tableau de bord auto-hébergé sous Projets → Clés d'accès à l'adresse http://localhost:3000/projects.
SDK @intlayer/api
Lorsque vous utilisez le SDK @intlayer/api de manière programmatique, passez backendURL explicitement :
Copier le code dans le presse-papiers
Mise à niveau
Ceci télécharge les dernières images et redémarre les conteneurs avec docker compose pull && docker compose up -d. Les volumes existants (mongo-data, redis-data, minio-data) sont préservés — aucune perte de données.
Copier le code dans le presse-papiers
Sauvegarde et restauration
Toutes les données persistantes résident dans trois volumes Docker nommés.
Sauvegarde
Copier le code dans le presse-papiers
Restauration
Copier le code dans le presse-papiers
Limitations
- MongoDB must be external (Atlas). The backend connects only over
mongodb+srv://(built fromDB_ID/DB_MDP/DB_CLUSTER), so a plainmongodb://host:27017— including the container's own bundledmongod— cannot be used. Provide a MongoDB Atlas cluster. - No custom domain. All browser-facing
VITE_*URLs are inlined into the app at build time, and the published image ships withlocalhostvalues. The dashboard must be accessed athttp://localhost:3000; serving it on a public domain would require rebuilding the image with the target URLs baked in and is not supported out of the box. - Email requires a working mailer. First-run setup enforces email verification, so either
RESEND_API_KEYor a global SMTP mailer (MAIL_PROVIDER=smtp+MAIL_SMTP_*) must be configured. After the first admin signs in, each organization can also configure its own SMTP or Resend mailer from the dashboard.
Dépannage
Le backend redémarre en boucle au premier démarrage
MongoDB et Redis doivent être sains avant le démarrage du backend. Le fichier compose utilise depends_on avec condition: service_healthy. Si vous voyez des redémarrages répétés du backend, vérifiez que les contrôles de santé de mongo et redis sont réussis :
Copier le code dans le presse-papiers
Recherchez MongoDB connection error près du haut du journal.
Le tableau de bord ne peut pas atteindre l'API
Vérifiez que VITE_BACKEND_URL correspond à l'URL où le backend est accessible depuis le navigateur (pas le réseau Docker). Si vous avez modifié le port du backend ou ajouté un proxy inverse, reconstruisez l'image du tableau de bord :
Bucket MinIO manquant
Si le service ponctuel minio-init n'a pas fonctionné (ou a fonctionné avant que MinIO ne soit prêt), créez le bucket manuellement :
Copier le code dans le presse-papiers
