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 anglaisIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
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 :
Copier le code dans le presse-papiers
curl -fsSL https://intlayer.org/install.sh | shL'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.
Table des matières
Architecture
Copier le code dans le presse-papiers
┌─────────────────────────────┐ browser ──────▶ │ app (TanStack Start) :3000│ ──┐ └─────────────────────────────┘ │ VITE_BACKEND_URL ┌─────────────────────────────┐ │ │ backend (Fastify/Bun) :3100│ ◀─┘ └──────────────┬──────────────┘ ┌──────────┬─────────┼──────────┬───────────┐ ▼ ▼ ▼ ▼ ▼ mongo:27017 redis:6379 minio:9000 mailpit:1025 Chromium (1-node RS) (S3 API) (SMTP) (in-image) minio:9001 mailpit:8025 (console) (web UI)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).
Démarrage rapide
Copier le code dans le presse-papiers
curl -fsSL https://intlayer.org/install.sh | shCe que fait l'installateur :
- Vérifie que
dockeretdocker composesont présents. - Télécharge
docker-compose.ymlet.env.exampledans./intlayer/. - S'il n'existe pas de fichier
.env, copie l'exemple et génère des secrets aléatoires pourBETTER_AUTH_SECRET,S3_ACCESS_KEY_IDetS3_SECRET_ACCESS_KEYviaopenssl rand. - Exécute
docker compose pull+docker compose up -d. - Affiche les URL : tableau de bord
:3000, API:3100, UI e-mail:8025, console MinIO:9001.
Une fois la stack démarrée, ouvrez http://localhost:3000 et créez votre premier compte.
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 |
Les ports internes (mongo, redis) ne sont pas exposés à l'hôte par défaut.
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
L'installateur génère un fichier .env prêt à l'emploi. Le tableau ci-dessous décrit chaque variable.
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 |
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
INTLAYER_CMS_URL=http://localhost:3000INTLAYER_BACKEND_URL=http://localhost:3100INTLAYER_CLIENT_ID=<your-client-id>INTLAYER_CLIENT_SECRET=<your-client-secret>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
import { createIntlayerCMS } from "@intlayer/api";import { dictionaryEndpoint } from "@intlayer/api/dictionary";const cms = createIntlayerCMS({ editor: { clientId: process.env.INTLAYER_CLIENT_ID, clientSecret: process.env.INTLAYER_CLIENT_SECRET, backendURL: process.env.INTLAYER_BACKEND_URL, // http://localhost:3100 },});const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();Mise à niveau
Exécuter à nouveau l'installateur sur un déploiement existant effectue une mise à niveau progressive :
Copier le code dans le presse-papiers
curl -fsSL https://intlayer.org/install.sh | shCeci 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.
Pour effectuer une mise à niveau manuellement depuis le répertoire ./intlayer/ :
Copier le code dans le presse-papiers
docker compose pulldocker compose up -dSauvegarde et restauration
Toutes les données persistantes résident dans trois volumes Docker nommés.
Sauvegarde
Copier le code dans le presse-papiers
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/mongo-data.tar.gz /datadocker run --rm \ -v intlayer_redis-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/redis-data.tar.gz /datadocker run --rm \ -v intlayer_minio-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/minio-data.tar.gz /dataRestauration
Copier le code dans le presse-papiers
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar xzf /backup/mongo-data.tar.gz -C /# Répétez pour redis-data et minio-dataUtilisation d'un proxy inverse (Nginx / Caddy)
Pour les déploiements de production, placez un proxy inverse devant les conteneurs de l'application et du backend au lieu de les exposer directement.
Exemple Nginx
Copier le code dans le presse-papiers
server { listen 80; server_name cms.example.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:3100; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}Mettez à jour les variables .env suivantes pour qu'elles correspondent à vos domaines publics :
Copier le code dans le presse-papiers
BACKEND_URL=https://api.example.comAPP_URL=https://cms.example.comDOMAIN=example.comVITE_BACKEND_URL=https://api.example.comVITE_DOMAIN=example.comLes variablesVITE_*sont intégrées à l'image du tableau de bord lors de la construction. Si vous les modifiez après la construction de l'image, vous devez reconstruire l'imageapp(docker compose build app) ou utiliser l'injection de configuration au moment de l'exécution.
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
docker compose psdocker compose logs mongodocker compose logs redisLe 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 :
Copier le code dans le presse-papiers
docker compose build appdocker compose up -d appLes e-mails ne sont pas envoyés
Par défaut, tous les e-mails sortants sont capturés par Mailpit. Ouvrez http://localhost:8025 pour voir les messages envoyés. Pour envoyer de vrais e-mails, définissez MAIL_PROVIDER=resend et RESEND_API_KEY=<your-key> dans .env, puis redémarrez le backend :
Copier le code dans le presse-papiers
docker compose restart backendBucket 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
docker compose run --rm minio-init