Stellen Sie Ihre Frage und erhalten Sie einen Resümee des Dokuments, indem Sie diese Seite und den AI-Anbieter Ihrer Wahl referenzieren
Dieses Dokument ist veraltet, die Basisversion wurde aktualisiert am 2. Juli 2026.
Zur englischen Doku gehenVersionshistorie
Der Inhalt dieser Seite wurde mit einer KI übersetzt.
Den englischen Originaltext ansehenIf 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
Intlayer selbst hosten
Intlayer kann vollständig auf Ihrer eigenen Infrastruktur ausgeführt werden – kein Intlayer Cloud-Konto erforderlich. Ein einziger Befehl startet einen produktionsbereiten Stack:
Kopieren Sie den Code in die Zwischenablage
curl -fsSL https://intlayer.org/install.sh | shDer Installer lädt eine docker-compose.yml und eine .env herunter, generiert automatisch die erforderlichen Secrets und startet alle Container mit docker compose up -d.
Inhaltsverzeichnis
Architektur
Kopieren Sie den Code in die Zwischenablage
┌─────────────────────────────┐ 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 (wird für die Erzeugung von Puppeteer-Screenshots verwendet) ist im Backend-Image gebündelt – es wird kein separater Container benötigt.
Voraussetzungen
- Docker ≥ 24 und Docker Compose ≥ v2. Fehlt eines davon, gibt der Installer den Installationslink aus und beendet sich.
- Ports
3000,3100,8025,9000und9001auf dem Host verfügbar. - Ein Linux- oder macOS-Host (oder WSL2 unter Windows).
Schnellstart
Kopieren Sie den Code in die Zwischenablage
curl -fsSL https://intlayer.org/install.sh | shWas der Installer tut:
- Überprüft, ob
dockerunddocker composevorhanden sind. - Lädt
docker-compose.ymlund.env.examplein./intlayer/herunter. - Falls keine
.envexistiert, kopiert er das Beispiel und generiert zufällige Secrets fürBETTER_AUTH_SECRET,S3_ACCESS_KEY_IDundS3_SECRET_ACCESS_KEYmittelsopenssl rand. - Führt
docker compose pull+docker compose up -daus. - Gibt die URLs aus: Dashboard
:3000, API:3100, E-Mail-UI:8025, MinIO-Konsole:9001.
Nachdem der Stack gestartet ist, öffnen Sie http://localhost:3000 und erstellen Sie Ihr erstes Konto.
Erstmalige Einrichtung
Bei einer frischen Instanz (leere Datenbank) leitet Sie das Öffnen des Dashboards zur Seite /init weiter:
- Erstellen Sie das erste Konto. Da die users-Collection leer ist, wird dieses Konto automatisch zum super admin befördert.
- Eine Verifizierungs-E-Mail wird gesendet (über Resend). E-Mail-Verifizierung ist erforderlich — deshalb muss
RESEND_API_KEYvor dem Start gesetzt werden. - Klicken Sie auf den Link in der E-Mail und melden Sie sich an.
Sobald ein Admin existiert, leitet /init zur Standard-Anmeldeseite weiter.
Dienste
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Service | Image | Host port(s) | Zweck |
|---|---|---|---|
| app | built from apps/app/Dockerfile | 3000 | TanStack Start Dashboard (CMS-Benutzeroberfläche) |
| backend | built from apps/backend/Dockerfile | 3100 | Fastify REST API (/health Endpunkt) |
| mongo | mongo:7 | intern | Einzelknoten-Replica Set (rs0) |
| redis | redis:7-alpine | intern | Job-Warteschlangen (BullMQ) und Caching (ioredis) |
| minio | minio/minio | 9000 (S3), 9001 (Konsole) | S3-kompatibler Objektspeicher für Avatare und Screenshots |
| mailpit | axllent/mailpit | 1025 (SMTP), 8025 (Web-Benutzeroberfläche) | Lokale Transaktions-E-Mail-Senke |
Interne Ports (mongo, redis) werden standardmäßig nicht zum Host exponiert.
MinIO-Port9000muss vom Browser erreichbar sein, da hochgeladene Assets (Avatare, Screenshots) direkt vonS3_PUBLIC_URL=http://localhost:9000/intlayergeladen werden.
Umgebungsvariablen
Erforderlich
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Variable | Beispiel | Beschreibung |
|---|---|---|
DB_ID | intlayer | MongoDB Atlas Benutzer |
DB_MDP | (dein Passwort) | MongoDB Atlas Passwort |
DB_CLUSTER | cluster0.xxxxx.mongodb.net | MongoDB Atlas Cluster Host (verwendet in der mongodb+srv:// URI) |
BETTER_AUTH_SECRET | (generiert) | 32-Byte Secret für Session-Signierung |
S3_SECRET_ACCESS_KEY | (generiert) | Secret für das gebündelte MinIO |
RESEND_API_KEY | (dein Schlüssel) | Transaktionale E-Mail via Resend. Erforderlich für das erste Setup, es sei denn, du konfigurierst einen globalen SMTP Mailer (siehe Global mailer) |
Erforderlich (automatisch generiert oder abgefragt)
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Variable | Beispiel | Beschreibung |
|---|---|---|
NODE_ENV | production | Laufzeitumgebung |
PORT | 3100 | Backend-Listenport |
BACKEND_URL | http://localhost:3100 | Öffentliche URL der Backend-API |
APP_URL | http://localhost:3000 | Öffentliche URL des Dashboards |
DOMAIN | localhost | Cookie-Domain |
MONGODB_URI | mongodb://mongo:27017/intlayer?replicaSet=rs0 | Vollständige MongoDB-Verbindungs-URI |
REDIS_URL | redis://redis:6379 | Redis-Verbindungs-URL |
BETTER_AUTH_SECRET | (generiert) | 32-Byte-Secret für die Session-Signierung |
MAIL_PROVIDER | smtp | Mail-Transport: smtp oder resend |
MAIL_SMTP_HOST | mailpit | SMTP-Hostname (Mailpit Container-Name) |
MAIL_SMTP_PORT | 1025 | SMTP-Port |
MAIL_FROM | Intlayer <no-reply@localhost> | Absenderadresse |
S3_ENDPOINT | http://minio:9000 | S3-kompatibler Endpunkt |
S3_PUBLIC_URL | http://localhost:9000/intlayer | Öffentliche URL für das Laden von Browser-Assets |
S3_BUCKET_NAME | intlayer | Bucket-Name |
S3_ACCESS_KEY_ID | (generiert) | MinIO-Zugangsschlüssel |
S3_SECRET_ACCESS_KEY | (generiert) | MinIO-Geheimschlüssel |
VITE_BACKEND_URL | http://localhost:3100 | Backend-URL, die zur Build-Zeit in das Dashboard integriert wird |
VITE_DOMAIN | localhost | Domain, die zur Build-Zeit in das Dashboard integriert wird |
Optional (Funktionen funktionieren bei Abwesenheit eingeschränkt)
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Variable | Funktion |
|---|---|
OPENAI_API_KEY | KI-gestützte Übersetzung und Inhaltsprüfung |
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_* | Abrechnung und Abonnementverwaltung |
RESEND_API_KEY | Transaktions-E-Mail über Resend (überschreibt Mailpit, wenn gesetzt) |
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET | GitHub OAuth-Login |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Google OAuth-Login |
GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET | GitLab OAuth-Login |
MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET | Microsoft OAuth-Login |
LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET | LinkedIn OAuth-Login |
ATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRET | Atlassian OAuth-Login |
Global mailer
By default, all transactional emails are sent through Resend using RESEND_API_KEY. Self-hosted deployments can instead route every email — including non-organization emails such as password resets and magic links — through a global mailer configured with environment variables.
Set MAIL_PROVIDER to activate it. When unset, the default Resend mailer is used.
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Variable | Example | Description |
|---|---|---|
MAIL_PROVIDER | smtp | Global transport: smtp or resend. Leave unset to use defaults |
MAIL_FROM | Intlayer <no-reply@acme.com> | Sender header. Accepts a bare address or Name <email> format |
MAIL_SMTP_HOST | smtp.acme.com | SMTP host (required when MAIL_PROVIDER=smtp) |
MAIL_SMTP_PORT | 587 | SMTP port (defaults to 587) |
MAIL_SMTP_SECURE | false | Implicit TLS. Set true for port 465 |
MAIL_SMTP_USER | (your user) | SMTP username (optional; omit for unauthenticated relays) |
MAIL_SMTP_PASSWORD | (your password) | SMTP password |
Precedence: an organization's own mailer (configured from the Organization dashboard) takes priority over the global mailer, which in turn takes priority over the default Resend key.
Ihr Intlayer-Projekt verbinden
Sobald der Stack läuft, verweisen Sie Ihr Projekt auf das selbst gehostete Backend und Dashboard anstelle von intlayer.org.
Projektkonfiguration
Kopieren Sie den Code in die Zwischenablage
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
clientId: process.env.INTLAYER_CLIENT_ID,
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
/**
* URL des selbst gehosteten CMS-Dashboards.
* Standard: https://app.intlayer.org
*/
cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
/**
* URL der selbst gehosteten Backend-API.
* Standard: https://back.intlayer.org
*/
backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
},
};
export default config;Setzen Sie die Umgebungsvariablen in der .env Ihres Projekts:
Kopieren Sie den Code in die Zwischenablage
INTLAYER_CMS_URL=http://localhost:3000INTLAYER_BACKEND_URL=http://localhost:3100INTLAYER_CLIENT_ID=<your-client-id>INTLAYER_CLIENT_SECRET=<your-client-secret>Erstellen Sie Zugangsdaten in Ihrem selbst gehosteten Dashboard unter Projects → Access keys unter http://localhost:3000/projects.
@intlayer/api SDK
Wenn Sie das @intlayer/api SDK programmatisch verwenden, übergeben Sie backendURL explizit:
Kopieren Sie den Code in die Zwischenablage
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();Upgrade
Ein erneutes Ausführen des Installers auf einer bestehenden Bereitstellung führt ein Rolling-Upgrade durch:
Kopieren Sie den Code in die Zwischenablage
curl -fsSL https://intlayer.org/install.sh | shDies zieht die neuesten Images und startet Container neu mit docker compose pull && docker compose up -d. Bestehende Volumes (mongo-data, redis-data, minio-data) bleiben erhalten – kein Datenverlust.
Um manuell aus dem ./intlayer/-Verzeichnis ein Upgrade durchzuführen:
Kopieren Sie den Code in die Zwischenablage
docker compose pulldocker compose up -dBackup und Wiederherstellung
Alle persistenten Daten befinden sich in drei benannten Docker-Volumes.
Backup
Kopieren Sie den Code in die Zwischenablage
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 /dataWiederherstellung
Kopieren Sie den Code in die Zwischenablage
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar xzf /backup/mongo-data.tar.gz -C /# Wiederholen Sie dies für redis-data und minio-dataEinschränkungen
- MongoDB muss extern sein (Atlas). Das Backend verbindet sich nur über
mongodb+srv://(zusammengesetzt ausDB_ID/DB_MDP/DB_CLUSTER), daher kann ein einfachesmongodb://host:27017— einschließlich des eigenenmongoddes Containers — nicht verwendet werden. Stellen Sie einen MongoDB Atlas Cluster bereit. - Keine benutzerdefinierte Domain. Alle browsergestützten
VITE_*URLs werden zur Build-Zeit in die App inline eingefügt, und das veröffentlichte Image wird mitlocalhostWerten ausgeliefert. Das Dashboard muss unterhttp://localhost:3000aufgerufen werden; das Serving auf einer öffentlichen Domain würde ein Neubau des Images mit den eingebetteten Ziel-URLs erfordern und wird out-of-the-box nicht unterstützt. - E-Mail erfordert einen funktionierenden Mailer. Das Setup beim ersten Durchlauf erzwingt eine E-Mail-Verifizierung, daher muss entweder
RESEND_API_KEYoder ein globaler SMTP Mailer (MAIL_PROVIDER=smtp+MAIL_SMTP_*) konfiguriert sein. Nach der ersten Anmeldung eines Administrators kann jede Organisation auch ihren eigenen SMTP oder Resend Mailer vom Dashboard aus konfigurieren.
Fehlerbehebung
Backend-Absturzschleifen beim ersten Start
MongoDB und Redis müssen fehlerfrei sein, bevor das Backend startet. Die Compose-Datei verwendet depends_on mit condition: service_healthy. Wenn Sie wiederholte Backend-Neustarts sehen, überprüfen Sie, ob die mongo- und redis-Healthchecks erfolgreich sind:
Kopieren Sie den Code in die Zwischenablage
docker compose psdocker compose logs mongodocker compose logs redisE-Mail wird nicht gesendet
Standardmäßig werden alle ausgehenden E-Mails von Mailpit abgefangen. Öffnen Sie http://localhost:8025, um gesendete Nachrichten anzuzeigen. Um echte E-Mails zu senden, setzen Sie MAIL_PROVIDER=resend und RESEND_API_KEY=<Ihr-Schlüssel> in .env und starten Sie dann das Backend neu:
Kopieren Sie den Code in die Zwischenablage
docker compose restart backendMinIO-Bucket fehlt
Wenn der minio-init-One-Shot-Service nicht ausgeführt wurde (oder vor der Bereitschaft von MinIO lief), erstellen Sie den Bucket manuell:
Kopieren Sie den Code in die Zwischenablage
docker compose run --rm minio-init