Posez votre question et obtenez un résumé du document en referencant cette page et le Provider AI de votre choix
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 sur votre propre infrastructure, aucun compte Intlayer Cloud requis. Trois configurations sont disponibles, toutes gérées par le même installateur (install.sh, install.ps1 sur Windows ou npx intlayer init infra) :
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Configuration | Ce que c'est | Quand la choisir |
|---|---|---|
| Application de bureau | Tableau de bord natif pour macOS, Linux et Windows | Un client local, rien à héberger |
| Docker tout-en-un | Tableau de bord, API, MongoDB, Redis et MinIO dans un seul conteneur | Essais et petites installations uniques |
| Docker Compose | Un conteneur par service, chaque magasin de données remplaçable par une offre gérée | Production, montée en charge, bases managées |
Table des matières
Images et paquets publiés
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Artefact | Docker Hub | Miroir GHCR | Contenu |
|---|---|---|---|
| Conteneur tout-en-un | intlayer/cms-all | ghcr.io/aymericzip/intlayer/cms-all | app + backend + MongoDB 8 + Redis + MinIO + Chromium |
| Tableau de bord (frontend) | intlayer/cms-frontend | ghcr.io/aymericzip/intlayer/cms-frontend | Tableau de bord TanStack Start sur Bun |
| API (backend) | intlayer/cms-backend | ghcr.io/aymericzip/intlayer/cms-backend | API REST Fastify sur Bun + Chromium |
| Application de bureau | Releases GitHub | n/a | .dmg (macOS), .deb / .rpm / .AppImage (Linux), .exe / .msi (Windows) |
Les trois images sont construites à partir du même docker/selfhost/Dockerfile et publiées à chaque version. La stack Compose télécharge également les images officielles mongo:8, redis:8-alpine et quay.io/minio/minio.
Configuration
L'installateur vous demande quelle configuration vous souhaitez, vérifie les prérequis (en proposant d'installer Docker), écrit le fichier d'environnement avec les secrets déjà générés et télécharge les images. Il ne démarre rien de lui-même : les modes Docker nécessitent d'abord un service d'e-mail, il termine donc en affichant la commande à exécuter. Le réexécuter est sans danger : un fichier d'environnement existant n'est jamais écrasé, ce qui en fait également le moyen de mise à niveau.
Le tableau de bord Intlayer sous forme d'application native, conçu avec Tauri. Il se connecte à Intlayer Cloud (https://app.intlayer.org), il n'y a donc rien à héberger. C'est le bon choix lorsque vous préférez un client local plutôt qu'un onglet de navigateur.
Installation
L'installateur télécharge le paquet pour votre système d'exploitation et votre processeur, puis l'ouvre (macOS), l'installe (dpkg / rpm sous Linux) ou lance l'assistant d'installation (Windows). Vous pouvez également le télécharger manuellement depuis la page des releases.
Copier le code dans le presse-papiers
Dans PowerShell :
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
Prérequis
- Node.js : l'application intègre le serveur du tableau de bord et le démarre avec le binaire
nodede la machine. Installez-le depuis nodejs.org si l'application ne démarre pas.
La version publiée pour ordinateur communique avec le backend Intlayer Cloud. La pointer vers un backend auto-hébergé nécessite de reconstruire l'application avec VITE_BACKEND_URL configuré sur votre API, voir Limitations.
Tout s'exécute à l'intérieur du conteneur unique intlayer/cms-all, supervisé par s6-overlay, avec chaque magasin de données persisté sous un seul volume.
Copier le code dans le presse-papiers
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Service | Port(s) hôte | Rôle |
|---|---|---|
| app | 3000 | Tableau de bord (interface utilisateur CMS) |
| backend | 3100 | API REST (point de terminaison /health) |
| mongo | interne | MongoDB 8, ensemble de réplicas à nœud unique rs0 |
| redis | interne | Files d'attente de tâches (BullMQ) et mise en cache |
| minio | 9000 (S3), 9001 (console) | Stockage d'objets compatible S3 pour avatars et captures |
L'ordre de démarrage est géré par les dépendances s6 (mongod → init replica-set, minio → création du bucket, puis backend, puis app), et les services redémarrent en cas d'arrêt, de sorte que le premier démarrage récupère tout seul.
Prérequis
- Docker ≥ 24 : l'installateur propose de l'installer (via get.docker.com sous Linux, Homebrew sur macOS). Sous Windows, installez d'abord Docker Desktop (backend WSL 2).
- Ports
3000,3100,9000et9001libres sur l'hôte. MinIO9000doit rester accessible par le navigateur, qui charge les ressources directement depuisS3_PUBLIC_URL. - Un service d'envoi d'e-mails : une clé API Resend ou un relais SMTP.
1. Installation
Écrit ./intlayer.env avec BETTER_AUTH_SECRET et S3_SECRET_ACCESS_KEY générés, pose quelques questions pour renseigner le reste, et télécharge intlayer/cms-all:latest.
Copier le code dans le presse-papiers
Dans PowerShell :
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
2. Répondre aux questions de configuration
L'installateur demande (appuyez sur Entrée pour accepter une suggestion, chaque réponse peut être modifiée dans le fichier par la suite) :
- Le domaine sur lequel Intlayer est servi. Laissez-le vide pour rester sur
localhost. Avec un domaine tel queexample.org, il suggèrehttps://cms.example.orgpour le tableau de bord,https://back.example.orgpour l'API ethttps://s3.example.org/intlayerpour le stockage objet, et écritDOMAIN,APP_URL,BACKEND_URLetS3_PUBLIC_URL. Voir Domaine personnalisé pour la suite. - Le service d'e-mail : Resend (clé API) ou un relais SMTP (hôte, port, identifiants), ainsi que l'adresse d'expédition. Cette étape peut être ignorée et faite à la main plus tard.
- Une clé API OpenAI optionnelle pour les fonctionnalités d'IA.
Sans terminal (par exemple lorsque le script est exécuté depuis la CI), les questions sont ignorées et seuls les secrets sont générés. Ouvrez intlayer.env et renseignez Resend ou SMTP à la main (détails dans Service d'e-mail global) :
Copier le code dans le presse-papiers
3. Démarrer
Voici la commande affichée par l'installateur (avec un domaine personnalisé, elle est précédée du docker build qui produit intlayer/cms-all:custom, voir Domaine personnalisé) :
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
Le CLI exécute l'installateur, qui affiche la commande docker run … montrée dans les autres onglets. Copiez-la dans votre terminal une fois le service de messagerie configuré.
Ouvrez http://localhost:3000 (ou l'URL de votre tableau de bord) et suivez la Configuration initiale. Le premier démarrage initialise l'ensemble de réplicas et le bucket, laissez-lui une minute.
Sauvegarde et mise à niveau
Tout l'état réside dans le volume intlayer-data (/data/mongo, /data/redis, /data/minio).
Copier le code dans le presse-papiers
Pour mettre à niveau, réexécutez l'installateur (il télécharge la dernière image et conserve intlayer.env), puis faites docker rm -f intlayer et relancez la commande de démarrage. Pour utiliser une base MongoDB gérée à la place de celle intégrée, définissez MONGODB_URI dans intlayer.env.
Un conteneur par service sur un réseau privé Compose. Le tableau de bord et l'API utilisent les images publiées intlayer/cms-frontend et intlayer/cms-backend ; les magasins de données utilisent les images officielles mongo, redis et minio.
Copier le code dans le presse-papiers
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Service | Image | Rôle |
|---|---|---|
app | intlayer/cms-frontend | Tableau de bord sur :3000 ; attend que le backend soit sain |
backend | intlayer/cms-backend | API sur :3100 avec Chromium ; attend Mongo, Redis et le bucket MinIO |
mongo | mongo:8 | Ensemble de réplicas à nœud unique rs0, initialisé par son propre healthcheck |
redis | redis:8-alpine | Files d'attente et cache, persistance append-only |
minio | quay.io/minio/minio | Stockage S3 sur :9000, console sur :9001 |
minio-init | quay.io/minio/mc | Tâche ponctuelle : crée le bucket et sa stratégie de téléchargement anonyme |
Les données sont conservées dans les volumes intlayer_mongo-data, intlayer_redis-data et intlayer_minio-data. Le câblage des services (MONGODB_URI, REDIS_URL, S3_ENDPOINT, l'URL interne du backend utilisée par le rendu côté serveur) est fixé dans le fichier compose et prévaut sur .env, qui ne contient que les secrets et intégrations optionnelles.
Prérequis
- Docker ≥ 24 avec le plugin Compose : l'installateur propose de l'installer sous Linux et macOS. Sous Windows, installez d'abord Docker Desktop (backend WSL 2).
- Ports
3000,3100,9000et9001libres sur l'hôte. - Un service d'envoi d'e-mails : une clé API Resend ou un relais SMTP.
1. Installation
Écrit docker-compose.yml et un .env avec les secrets générés dans ./intlayer/, pose les mêmes questions de configuration que le mode tout-en-un (domaine, service d'e-mail, clé OpenAI), et télécharge les images.
Copier le code dans le presse-papiers
Ou manuellement :
Copier le code dans le presse-papiers
Dans PowerShell :
Copier le code dans le presse-papiers
Ou manuellement :
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
2. Configurer un service d'e-mail
Si vous avez ignoré la question sur le service d'e-mail, renseignez Resend ou SMTP dans intlayer/.env, exactement comme pour le conteneur tout-en-un (voir Service d'e-mail global).
3. Démarrer
Copier le code dans le presse-papiers
Avec un domaine personnalisé, l'installateur télécharge également docker-compose.build.yml et la commande de démarrage devient docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build (voir Domaine personnalisé).
Ouvrez http://localhost:3000 (ou l'URL de votre tableau de bord) et suivez la Configuration initiale.
Magasins de données managés
Supprimez le service que vous remplacez du fichier compose (ainsi que son entrée dans depends_on pour backend), puis surchargez la variable correspondante :
Copier le code dans le presse-papiers
S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY / S3_BUCKET_NAME conservent leur signification avec n'importe quel fournisseur compatible S3.
Montée en charge
app et backend sont sans état (stateless). Derrière un équilibreur de charge, docker compose up -d --scale backend=3 fonctionne une fois que les mappages de ports fixes de l'hôte sont supprimés et que le proxy s'adresse aux services par leur nom. Les tâches en arrière-plan sont coordonnées via Redis (BullMQ), de sorte que plusieurs répliques de backend partagent la file d'attente en toute sécurité.
Compilation depuis les sources
Une surcharge remplace image: par build: pour les deux services Intlayer. Depuis un clone du dépôt :
Copier le code dans le presse-papiers
Sans clone, faites pointer le contexte de build directement sur le dépôt en définissant INTLAYER_BUILD_CONTEXT=https://github.com/aymericzip/intlayer.git#main dans .env. Les arguments de build VITE_* du tableau de bord suivent DOMAIN, APP_URL et BACKEND_URL du même fichier, et c'est ainsi qu'un domaine personnalisé est appliqué.
Sauvegarde et mise à niveau
Copier le code dans le presse-papiers
Paramètres de l'installateur
Sans --mode (ou INTLAYER_MODE), l'installateur affiche un menu : desktop, docker (tout-en-un) ou compose. Il lit également quelques variables d'environnement. Comme il est transmis dans le shell via un pipe, passez-les au shell plutôt qu'à curl :
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Défaut | S'applique à | Description |
|---|---|---|---|
INTLAYER_MODE | (demandé) | tous | desktop, docker ou compose, identique à --mode |
INTLAYER_DOWNLOAD_DIR | ~/Downloads | desktop | Où l'installateur de l'application est enregistré |
INTLAYER_IMAGE | intlayer/cms-all:latest | docker | Image tout-en-un à télécharger |
INTLAYER_ENV_FILE | ./intlayer.env | docker | Où écrire le fichier d'environnement |
INTLAYER_CONTAINER_NAME | intlayer | docker | Nom du conteneur |
INTLAYER_DATA_VOLUME | intlayer-data | docker | Volume nommé monté sur /data |
INTLAYER_APP_PORT | 3000 | docker | Port hôte pour le tableau de bord |
INTLAYER_API_PORT | 3100 | docker | Port hôte pour l'API |
INTLAYER_S3_PORT | 9000 | docker | Port hôte pour l'API S3 MinIO |
INTLAYER_CONSOLE_PORT | 9001 | docker | Port hôte pour la console MinIO |
INTLAYER_COMPOSE_DIR | ./intlayer | compose | Où docker-compose.yml et .env sont écrits |
INTLAYER_SELFHOST_REF | main | les deux | Référence Git d'où sont récupérés le fichier compose et le modèle env |
INTLAYER_BUILD_CONTEXT | …/intlayer.git#main | les deux | Contexte de build utilisé lorsqu'un domaine personnalisé impose une reconstruction |
INTLAYER_CUSTOM_IMAGE | intlayer/cms-all:custom | docker | Tag de l'image tout-en-un construite pour un domaine personnalisé |
Les variables de port ne modifient que le côté hôte du mappage. Les images publiées intègrenthttp://localhost:3000,http://localhost:3100ethttp://localhost:9000compilés dans le bundle du tableau de bord, conservez donc les valeurs par défaut à moins de construire vos propres images, voir Limitations.
Configuration initiale
Sur une nouvelle instance (base de données vide), l'ouverture du tableau de bord vous redirige vers la page /init :
- Créez le premier compte. La collection des utilisateurs étant vide, ce compte est automatiquement promu super administrateur.
- Un e-mail de vérification est envoyé via Resend ou votre relais SMTP. La vérification de l'e-mail est obligatoire, c'est pourquoi un service de messagerie doit être configuré avant de démarrer.
- Cliquez sur le lien dans l'e-mail, puis connectez-vous.
Une fois qu'un administrateur existe, /init redirige vers la page de connexion standard.
Variables d'environnement
Les deux modes Docker lisent le même fichier (intlayer.env pour le conteneur, .env pour Compose), généré à partir de docker/selfhost/.env.template.
Obligatoires
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Exemple | Description |
|---|---|---|
BETTER_AUTH_SECRET | (généré) | Secret de 32 octets pour la signature des sessions |
S3_SECRET_ACCESS_KEY | (généré) | Secret pour l'instance MinIO intégrée |
RESEND_API_KEY | (votre clé) | E-mails transactionnels via Resend. Requis pour la configuration initiale à moins qu'un relais SMTP ne soit configuré (voir Service d'e-mail global) |
Fixées par le déploiement
Celles-ci sont définies par l'image (tout-en-un) ou par le fichier compose, et ne nécessitent d'être surchargées que pour une topologie personnalisée. DOMAIN, APP_URL, BACKEND_URL et S3_PUBLIC_URL font exception : définies dans le fichier env, elles prévalent dans les deux modes (voir Domaine personnalisé).
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Tout-en-un | Docker Compose | Description |
|---|---|---|---|
PORT | 3100 | 3100 | Port d'écoute du backend |
APP_URL | http://localhost:3000 | http://localhost:3000 | URL publique du tableau de bord |
BACKEND_URL | http://localhost:3100 | http://localhost:3100 | URL publique de l'API backend |
DOMAIN | localhost | localhost | Domaine du cookie |
SELF_HOSTED | true | true | Désactive les points de terminaison API cloud uniquement (facturation, abonnements, marketplace) |
MONGODB_URI | mongodb://127.0.0.1:27017/intlayer?replicaSet=rs0 | mongodb://mongo:27017/… | Chaîne de connexion MongoDB, tout cluster mongodb:// ou mongodb+srv:// fonctionne |
REDIS_URL | redis://127.0.0.1:6379 | redis://redis:6379 | Redis |
S3_ENDPOINT | http://127.0.0.1:9000 | http://minio:9000 | MinIO (serveur à serveur) |
S3_PUBLIC_URL | http://localhost:9000/intlayer | http://localhost:9000/intlayer | URL publique pour le chargement des ressources dans le navigateur |
S3_BUCKET_NAME | intlayer | intlayer | Nom du bucket |
S3_ACCESS_KEY_ID | intlayer | intlayer | Clé d'accès MinIO |
Le service app de Compose reçoit en plus INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100 : le navigateur accède à l'API sur localhost:3100, mais le rendu côté serveur s'exécute à l'intérieur du réseau Compose et doit utiliser le nom du service.
Domaine personnalisé
Le backend lit ses URL publiques à l'exécution, mais le tableau de bord les a compilées en dur : les images publiées intlayer/cms-frontend et intlayer/cms-all ne fonctionnent que sur http://localhost:3000. Servir Intlayer sur votre propre domaine demande donc deux choses, toutes deux préparées par l'installateur lorsque vous répondez à la question du domaine :
Quatre variables dans le fichier env, lues par le backend (cookies, liens des e-mails, callbacks OAuth, URL des ressources) et utilisées comme arguments de build par
docker-compose.build.yml:intlayer.envCopier le codeCopier le code dans le presse-papiers
Une image du tableau de bord construite avec ces URL. Docker la construit directement depuis le dépôt, sans clone nécessaire :
shCopier le codeCopier le code dans le presse-papiers
Placez ensuite un reverse proxy avec TLS devant le conteneur : cms.example.org → port 3000, back.example.org → 3100, s3.example.org → 9000. Les trois hôtes doivent partager le suffixe DOMAIN, puisque le cookie de session y est limité.
Optionnelles (les fonctionnalités se dégradent en douceur 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 |
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 |
Service d'e-mail global
Chaque e-mail transactionnel, y compris les e-mails hors organisation tels que les réinitialisations de mot de passe et liens magiques, passe par l'un des deux transports globaux :
- Resend, en utilisant
RESEND_API_KEY. - SMTP, en utilisant les variables
MAIL_SMTP_*. Dès queMAIL_SMTP_HOSTest défini, SMTP est utilisé etRESEND_API_KEYest ignoré.
MAIL_PROVIDER n'est nécessaire que pour forcer un transport lorsque les deux sont configurés (par exemple MAIL_PROVIDER=resend pour conserver Resend alors qu'un hôte SMTP est présent).
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Variable | Exemple | Description |
|---|---|---|
MAIL_FROM | Intlayer <no-reply@acme.com> | En-tête d'expéditeur pour les deux transports. Accepte une adresse simple ou Nom <email> |
MAIL_SMTP_HOST | smtp.acme.com | Hôte SMTP. Le définir sélectionne le transport SMTP |
MAIL_SMTP_PORT | 587 | Port SMTP (par défaut 587) |
MAIL_SMTP_SECURE | false | TLS implicite. Définir sur true pour le port 465 |
MAIL_SMTP_USER | (votre utilisateur) | Nom d'utilisateur SMTP (optionnel ; omettre pour les relais non authentifiés) |
MAIL_SMTP_PASSWORD | (votre mot de passe) | Mot de passe SMTP |
MAIL_PROVIDER | resend | Remplacement optionnel : smtp ou resend. Laisser vide pour la sélection automatique |
Priorité : le service d'e-mail propre à une organisation (configuré depuis le tableau de bord de l'Organisation) a la priorité sur le service global, qui lui-même a la priorité sur la clé Resend par défaut.
Connecter votre projet Intlayer
Une fois la stack lancée, faites pointer votre projet vers le backend et le tableau de bord auto-hébergés plutôt que 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 par programmation, passez backendURL explicitement :
Copier le code dans le presse-papiers
Limitations
- Un domaine personnalisé implique une reconstruction. Toutes les URL
VITE_*destinées au navigateur sont intégrées au tableau de bord lors de la construction, et les images publiées (ainsi que l'application de bureau) sont fournies avec les valeurslocalhost/ Intlayer Cloud. Par défaut, le tableau de bord doit être accessible surhttp://localhost:3000, l'API sur:3100et MinIO sur:9000; remapper les ports de l'hôte a le même effet. L'installateur prépare tout pour une reconstruction depuis le dépôt lorsque vous lui indiquez un domaine (voir Domaine personnalisé), mais la construction elle-même prend plusieurs minutes. Faire pointer l'application de bureau vers un backend auto-hébergé n'est pas pris en charge. - Les e-mails nécessitent un service de messagerie fonctionnel. La configuration initiale impose la vérification par e-mail, de sorte que soit
RESEND_API_KEY, soit un relais SMTP (MAIL_SMTP_*) doit être configuré. Une fois le premier administrateur connecté, chaque organisation peut également configurer son propre service SMTP ou Resend depuis le tableau de bord. - L'application de bureau nécessite Node.js sur la machine pour démarrer son serveur intégré.
- Pas d'assistant de documentation. L'assistant IA de documentation d'intlayer.org (
/api/ai/ask,/api/search/doc) repose sur environ 130 Mo d'embeddings de documentation pré-calculés que les images auto-hébergées n'embarquent pas ; ces deux routes ne sont pas enregistrées en mode auto-hébergé. Les fonctionnalités d'IA propres au tableau de bord (traduction, audit, autocomplétion, chat) ne sont pas affectées et nécessitent uniquementOPENAI_API_KEY.
Liens utiles
- Documentation Intlayer CMS
- Référence de configuration
- SDK CMS :
@intlayer/api - Releases de l'application de bureau
- Docker Hub :
intlayer/cms-all,intlayer/cms-frontend,intlayer/cms-backend, miroir sur GHCR sousghcr.io/aymericzip/intlayer/ docker/selfhost/: Dockerfile,docker-compose.ymlet.env.template
