Autor:
    Erstellung:2026-06-30Letzte Aktualisierung:2026-09-27

    Intlayer selbst hosten

    Intlayer kann auf Ihrer eigenen Infrastruktur ausgeführt werden, kein Intlayer Cloud-Konto erforderlich. Drei Setups stehen zur Verfügung, die alle über dasselbe Installationsprogramm verwaltet werden (install.sh, install.ps1 unter Windows oder npx intlayer init infra):

    SetupWhat it isPick it for
    Desktop-AppNatives Dashboard für macOS, Linux und WindowsEin lokaler Client, nichts zu hosten
    All-in-One DockerDashboard, API, MongoDB, Redis und MinIO in einem einzigen ContainerTests und kleine Single-Box-Installationen
    Docker ComposeEin Container pro Dienst, jeder Datenspeicher durch ein Managed-Angebot ersetzbarProduktion, Skalierung, verwaltete Datenbanken

    Table of Contents

    Veröffentlichte Images und Pakete

    ArtifactDocker HubGHCR mirrorContents
    All-in-one containerintlayer/cms-allghcr.io/aymericzip/intlayer/cms-allapp + backend + MongoDB 8 + Redis + MinIO + Chromium
    Dashboard (frontend)intlayer/cms-frontendghcr.io/aymericzip/intlayer/cms-frontendTanStack Start dashboard on Bun
    API (backend)intlayer/cms-backendghcr.io/aymericzip/intlayer/cms-backendFastify REST API on Bun + Chromium
    Desktop appGitHub releasesn/a.dmg (macOS), .deb / .rpm / .AppImage (Linux), .exe / .msi (Windows)

    Alle drei Images werden aus derselben Datei docker/selfhost/Dockerfile erstellt und bei jeder Version veröffentlicht. Der Compose-Stack ruft außerdem die offiziellen Images mongo:8, redis:8-alpine und quay.io/minio/minio ab.

    Einrichtung

    Das Installationsprogramm fragt nach dem gewünschten Setup, prüft die Voraussetzungen (bietet die Installation von Docker an), schreibt die Umgebungsdatei mit bereits generierten Secrets und lädt die Images herunter. Es startet nichts von selbst: Die Docker-Modi benötigen zuerst einen Mailer, daher endet es mit der Ausgabe des auszuführenden Befehls. Eine erneute Ausführung ist sicher: Eine vorhandene Umgebungsdatei wird nie überschrieben, was es auch zum Upgrade-Pfad macht.

    Das Intlayer-Dashboard als native Anwendung, erstellt mit Tauri. Es meldet sich bei der Intlayer Cloud (https://app.intlayer.org) an, sodass nichts gehostet werden muss. Es ist die richtige Wahl, wenn Sie einen lokalen Client statt eines Browser-Tabs bevorzugen.

    Installation

    Das Installationsprogramm lädt das Paket für Ihr Betriebssystem und Ihre CPU herunter und öffnet es (macOS), installiert es (dpkg / rpm unter Linux) oder startet den Setup-Assistenten (Windows). Sie können es auch manuell von der Releases-Seite herunterladen.

    sh
    curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode desktop
    

    In PowerShell:

    powershell
    $env:INTLAYER_MODE = "desktop"; irm https://intlayer.org/install.ps1 | iex
    
    bash
    npx intlayer init infra --mode desktop
    

    Anforderungen

    • Node.js: Die App bettet den Dashboard-Server ein und startet ihn mit der maschineneigenen node-Binärdatei. Installieren Sie es von nodejs.org, falls die App nicht startet.
    Der veröffentlichte Desktop-Build kommuniziert mit dem Intlayer Cloud-Backend. Das Verweisen auf ein selbst gehostetes Backend erfordert das erneute Erstellen der App mit der auf Ihre API festgelegten VITE_BACKEND_URL, siehe Einschränkungen.

    Alles läuft im einzelnen intlayer/cms-all-Container, überwacht von s6-overlay, wobei jeder Datenspeicher auf einem einzigen Volume persistiert wird.

    plaintext
                    ┌─────────────────────────────┐
     browser ──────▶ │  app  (TanStack Start)  :3000│ ──┐
     (localhost)    └─────────────────────────────┘   │ VITE_BACKEND_URL (baked at build)
                    ┌─────────────────────────────┐   │
                    │  backend (Fastify/Bun)  :3100│ ◀─┘
                    └──────────────┬──────────────┘
              ┌──────────┬─────────┼──────────────┐
              ▼          ▼         ▼               ▼
          mongo:27017  redis:6379  minio:9000   Chromium
          /data/mongo  /data/redis /data/minio  (in-image)
          (1-node RS)              minio:9001
    
    DienstHost-Port(s)Zweck
    app3000Dashboard (CMS-Benutzeroberfläche)
    backend3100REST-API (/health-Endpunkt)
    mongointernMongoDB 8, Single-Node-Replica-Set rs0
    redisinternJob-Warteschlangen (BullMQ) und Caching
    minio9000 (S3), 9001 (Konsole)S3-kompatibler Objektspeicher für Avatare und Screenshots

    Die Startreihenfolge wird durch s6-Abhängigkeiten gesteuert (mongod → Replica-Set-Init, minio → Bucket-Erstellung, dann backend, dann app), und Dienste starten bei Beendigung neu, sodass der erste Start sich von selbst erholt.

    Voraussetzungen

    • Docker ≥ 24: Das Installationsprogramm bietet die Installation an (über get.docker.com unter Linux, Homebrew unter macOS). Installieren Sie unter Windows zuerst Docker Desktop (WSL 2-Backend).
    • Ports 3000, 3100, 9000 und 9001 auf dem Host frei. MinIO 9000 muss für den Browser erreichbar bleiben, da Assets direkt von S3_PUBLIC_URL geladen werden.
    • Ein Mailer: Ein Resend-API-Schlüssel oder ein SMTP-Relay.

    1. Installation

    Schreibt ./intlayer.env mit generiertem BETTER_AUTH_SECRET und S3_SECRET_ACCESS_KEY, stellt einige Fragen, um den Rest auszufüllen, und ruft intlayer/cms-all:latest ab.

    sh
    curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode docker
    

    In PowerShell:

    powershell
    $env:INTLAYER_MODE = "docker"; irm https://intlayer.org/install.ps1 | iex
    
    bash
    npx intlayer init infra --mode docker
    

    2. Die Einrichtungsfragen beantworten

    Das Installationsprogramm fragt nach (drücken Sie Enter, um einen Vorschlag zu übernehmen; jede Antwort kann später in der Datei geändert werden):

    • Der Domain, unter der Intlayer bereitgestellt wird. Leer lassen, um bei localhost zu bleiben. Bei einer Domain wie example.org schlägt es https://cms.example.org für das Dashboard, https://back.example.org für die API und https://s3.example.org/intlayer für den Objektspeicher vor und schreibt DOMAIN, APP_URL, BACKEND_URL und S3_PUBLIC_URL. Siehe Benutzerdefinierte Domain für die weiteren Schritte.
    • Dem Mailer: Resend (API-Schlüssel) oder ein SMTP-Relay (Host, Port, Zugangsdaten) sowie die Absenderadresse. Dieser Schritt kann übersprungen und später von Hand erledigt werden.
    • Einem optionalen OpenAI-API-Schlüssel für die KI-Funktionen.

    Ohne Terminal (zum Beispiel wenn das Skript aus der CI ausgeführt wird) werden die Fragen übersprungen und nur die Secrets generiert. Öffnen Sie intlayer.env und tragen Sie Resend oder SMTP von Hand ein (Details unter Globaler Mailer):

    intlayer.env
    # Option A: Resend
    RESEND_API_KEY=<your-resend-key>
    
    # Option B: SMTP (takes over from Resend as soon as MAIL_SMTP_HOST is set)
    MAIL_SMTP_HOST=smtp.example.com
    MAIL_SMTP_PORT=587
    MAIL_SMTP_USER=<user>
    MAIL_SMTP_PASSWORD=<password>
    MAIL_FROM=Intlayer <no-reply@example.com>
    

    3. Starten

    Dies ist der vom Installationsprogramm ausgegebene Befehl (bei einer benutzerdefinierten Domain geht ihm der docker build voraus, der intlayer/cms-all:custom erzeugt, siehe Benutzerdefinierte Domain):

    sh
    docker run -d --name intlayer \
      --restart unless-stopped \
      -p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 \
      -v intlayer-data:/data \
      --env-file ./intlayer.env \
      intlayer/cms-all:latest
    
    powershell
    docker run -d --name intlayer `
      --restart unless-stopped `
      -p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 `
      -v intlayer-data:/data `
      --env-file ./intlayer.env `
      intlayer/cms-all:latest
    

    Die CLI führt das Installationsprogramm aus, das den in den anderen Tabs gezeigten Befehl docker run … ausgibt. Kopieren Sie ihn nach der Konfiguration des Mailers in Ihr Terminal.

    Öffnen Sie http://localhost:3000 (oder Ihre Dashboard-URL) und folgen Sie der Ersteinrichtung. Der erste Start initialisiert das Replica-Set und den Bucket, geben Sie ihm eine Minute Zeit.

    Backup und Upgrade

    Der gesamte Zustand liegt im Volume intlayer-data (/data/mongo, /data/redis, /data/minio).

    sh
    # Backup (stop the container first so MongoDB's files are consistent)
    docker stop intlayer
    docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar czf /backup/intlayer-data.tar.gz /data
    docker start intlayer
    
    # Restore
    docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar xzf /backup/intlayer-data.tar.gz -C /
    

    Führen Sie zum Aktualisieren das Installationsprogramm erneut aus (es lädt das neueste Image und behält intlayer.env), führen Sie dann docker rm -f intlayer aus und starten Sie den Startbefehl erneut. Um ein verwaltetes MongoDB statt des gebündelten zu verwenden, setzen Sie MONGODB_URI in intlayer.env.

    Ein Container pro Dienst in einem privaten Compose-Netzwerk. Das Dashboard und die API verwenden die veröffentlichten Images intlayer/cms-frontend und intlayer/cms-backend; die Datenspeicher verwenden die offiziellen Images mongo, redis und minio.

    plaintext
                    ┌───────────────────┐
     browser ──────▶ │  app        :3000 │ ── SSR ──▶ http://backend:3100
     (localhost)    └───────────────────┘
                    ┌───────────────────┐
     browser ──────▶ │  backend    :3100 │
     (localhost)    └─────────┬─────────┘
              ┌───────────────┼───────────────┐
              ▼               ▼               ▼
         mongo:27017     redis:6379      minio:9000 ◀── browser (assets)
         (1-node RS)                     minio:9001
    
    DienstImageRolle
    appintlayer/cms-frontendDashboard auf :3000; wartet, bis das Backend gesund ist
    backendintlayer/cms-backendAPI auf :3100 mit Chromium; wartet auf Mongo, Redis und den MinIO-Bucket
    mongomongo:8Single-Node-Replica-Set rs0, initialisiert durch eigenen Healthcheck
    redisredis:8-alpineWarteschlangen und Caching, Append-Only-Persistenz
    minioquay.io/minio/minioS3-Speicher auf :9000, Konsole auf :9001
    minio-initquay.io/minio/mcEinmalige Ausführung: Erstellt den Bucket und dessen Richtlinie für anonyme Downloads

    Die Daten werden in den Volumes intlayer_mongo-data, intlayer_redis-data und intlayer_minio-data gespeichert. Die Dienstverbindungen (MONGODB_URI, REDIS_URL, S3_ENDPOINT, die interne Backend-URL für serverseitiges Rendering) sind in der Compose-Datei festgelegt und haben Vorrang vor .env, das nur Secrets und optionale Integrationen enthält.

    Voraussetzungen

    • Docker ≥ 24 mit dem Compose-Plugin: Das Installationsprogramm bietet die Installation unter Linux und macOS an. Installieren Sie unter Windows zuerst Docker Desktop (WSL 2-Backend).
    • Ports 3000, 3100, 9000 und 9001 auf dem Host frei.
    • Ein Mailer: Ein Resend-API-Schlüssel oder ein SMTP-Relay.

    1. Installation

    Schreibt docker-compose.yml und ein .env mit den generierten Secrets nach ./intlayer/, stellt dieselben Einrichtungsfragen wie der All-in-One-Modus (Domain, Mailer, OpenAI-Schlüssel) und lädt die Images herunter.

    sh
    curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode compose
    

    Or by hand:

    sh
    mkdir intlayer && cd intlayer
    curl -fsSLO https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml
    curl -fsSL  https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -o .env
    # fill in BETTER_AUTH_SECRET and S3_SECRET_ACCESS_KEY (openssl rand -hex 32)
    

    In PowerShell:

    powershell
    $env:INTLAYER_MODE = "compose"; irm https://intlayer.org/install.ps1 | iex
    

    Or by hand:

    powershell
    mkdir intlayer; cd intlayer
    irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml -OutFile docker-compose.yml
    irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -OutFile .env
    # fill in BETTER_AUTH_SECRET and S3_SECRET_ACCESS_KEY
    
    bash
    npx intlayer init infra --mode compose
    

    2. Mailer konfigurieren

    Falls Sie die Mailer-Frage übersprungen haben, tragen Sie Resend oder SMTP in intlayer/.env ein, genau wie beim All-in-One-Container (siehe Globaler Mailer).

    3. Starten

    sh
    cd intlayer && docker compose up -d
    

    Bei einer benutzerdefinierten Domain lädt das Installationsprogramm zusätzlich docker-compose.build.yml herunter, und der Startbefehl lautet docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build (siehe Benutzerdefinierte Domain).

    Öffnen Sie http://localhost:3000 (oder Ihre Dashboard-URL) und folgen Sie der Ersteinrichtung.

    Verwaltete Datenspeicher

    Löschen Sie den Dienst, den Sie ersetzen, aus der Compose-Datei (sowie seinen Eintrag in depends_on bei backend), und überschreiben Sie die entsprechende Variable:

    docker-compose.yml
    services:
      backend:
        environment:
          MONGODB_URI: mongodb+srv://user:password@cluster0.xxxxx.mongodb.net/intlayer
          REDIS_URL: rediss://default:password@redis.example.com:6380
          S3_ENDPOINT: https://s3.eu-west-1.amazonaws.com
          S3_PUBLIC_URL: https://intlayer-assets.s3.eu-west-1.amazonaws.com
    

    S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY / S3_BUCKET_NAME behalten ihre Bedeutung gegenüber jedem S3-kompatiblen Anbieter.

    Skalierung

    app und backend sind zustandslos (stateless). Hinter einem Load Balancer funktioniert docker compose up -d --scale backend=3, sobald die festen Host-Portzuordnungen entfernt wurden und der Proxy die Dienste über den Namen adressiert. Hintergrundaufgaben werden über Redis (BullMQ) koordiniert, sodass mehrere Backend-Replikate die Warteschlange sicher teilen.

    Erstellung aus dem Quellcode

    Ein Override schaltet die beiden Intlayer-Dienste von image: auf build: um. Aus einem Checkout des Repositorys:

    sh
    cd docker/selfhost
    docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
    

    Ohne Checkout richten Sie den Build-Kontext direkt auf das Repository, indem Sie INTLAYER_BUILD_CONTEXT=https://github.com/aymericzip/intlayer.git#main in .env setzen. Die VITE_*-Build-Argumente des Dashboards folgen DOMAIN, APP_URL und BACKEND_URL aus derselben Datei; so wird eine benutzerdefinierte Domain angewendet.

    Backup und Upgrade

    sh
    # Backup one volume (repeat for intlayer_redis-data and intlayer_minio-data)
    docker compose stop
    docker run --rm -v intlayer_mongo-data:/data -v "$(pwd)":/backup busybox tar czf /backup/mongo-data.tar.gz /data
    docker compose start
    
    # Upgrade, volumes are kept
    docker compose pull && docker compose up -d
    

    Installationsprogramm-Einstellungen

    Ohne --mode (oder INTLAYER_MODE) zeigt das Installationsprogramm ein Menü an: desktop, docker (All-in-One) oder compose. Es liest auch einige Umgebungsvariablen. Da es in die Shell geleitet wird, übergeben Sie diese an die Shell und nicht an curl:

    sh
    curl -fsSL https://intlayer.org/install.sh | INTLAYER_COMPOSE_DIR=./cms sh -s -- --mode compose
    
    powershell
    $env:INTLAYER_MODE = "compose"; $env:INTLAYER_COMPOSE_DIR = ".\cms"; irm https://intlayer.org/install.ps1 | iex
    
    VariableDefaultApplies toDescription
    INTLAYER_MODE(asked)alldesktop, docker or compose, same as --mode
    INTLAYER_DOWNLOAD_DIR~/DownloadsdesktopWhere the app installer is saved
    INTLAYER_IMAGEintlayer/cms-all:latestdockerAll-in-one image to pull
    INTLAYER_ENV_FILE./intlayer.envdockerWhere to write the environment file
    INTLAYER_CONTAINER_NAMEintlayerdockerContainer name
    INTLAYER_DATA_VOLUMEintlayer-datadockerNamed volume mounted at /data
    INTLAYER_APP_PORT3000dockerHost port for the dashboard
    INTLAYER_API_PORT3100dockerHost port for the API
    INTLAYER_S3_PORT9000dockerHost port for the MinIO S3 API
    INTLAYER_CONSOLE_PORT9001dockerHost port for the MinIO console
    INTLAYER_COMPOSE_DIR./intlayercomposeWhere docker-compose.yml and .env are written
    INTLAYER_SELFHOST_REFmainbothGit ref the compose file and env template are fetched from
    INTLAYER_BUILD_CONTEXT…/intlayer.git#mainbothBuild context used when a custom domain requires a rebuild
    INTLAYER_CUSTOM_IMAGEintlayer/cms-all:customdockerTag of the all-in-one image built for a custom domain
    Die Portvariablen ändern nur die Host-Seite des Mappings. Die veröffentlichten Images haben http://localhost:3000, http://localhost:3100 und http://localhost:9000 im Dashboard-Bundle kompiliert. Behalten Sie die Standardwerte bei, es sei denn, Sie erstellen eigene Images, siehe Einschränkungen.

    Ersteinrichtung

    Bei einer neuen Instanz (leere Datenbank) leitet das Öffnen des Dashboards auf die Seite /init weiter:

    1. Erstellen Sie das erste Konto. Da die Benutzersammlung leer ist, wird dieses Konto automatisch zum Super-Admin ernannt.
    2. Eine Bestätigungs-E-Mail wird über Resend oder Ihr SMTP-Relay gesendet. Die E-Mail-Bestätigung ist obligatorisch, weshalb vor dem Start ein Mailer konfiguriert werden muss.
    3. Klicken Sie auf den Link in der E-Mail und melden Sie sich an.

    Sobald ein Admin existiert, leitet /init auf die Standard-Anmeldeseite weiter.

    Umgebungsvariablen

    Beide Docker-Modi lesen dieselbe Datei (intlayer.env für den Container, .env für Compose), die aus docker/selfhost/.env.template generiert wird.

    Erforderlich

    VariableExampleDescription
    BETTER_AUTH_SECRET(generated)32-byte secret for session signing
    S3_SECRET_ACCESS_KEY(generated)Secret for the bundled MinIO
    RESEND_API_KEY(your key)Transactional email via Resend. Required for first-run setup unless an SMTP relay is configured instead (see Global mailer)

    Durch das Deployment festgelegt

    Diese werden durch das Image (All-in-One) oder die Compose-Datei gesetzt und müssen nur bei einer nicht standardmäßigen Topologie überschrieben werden. DOMAIN, APP_URL, BACKEND_URL und S3_PUBLIC_URL sind die Ausnahme: In der env-Datei gesetzt, haben sie in beiden Modi Vorrang (siehe Benutzerdefinierte Domain).

    VariableAll-in-oneDocker ComposeDescription
    PORT31003100Backend listening port
    APP_URLhttp://localhost:3000http://localhost:3000Public URL of the dashboard
    BACKEND_URLhttp://localhost:3100http://localhost:3100Public URL of the backend API
    DOMAINlocalhostlocalhostCookie domain
    SELF_HOSTEDtruetrueDisables the cloud-only API endpoints (billing, subscriptions, marketplace)
    MONGODB_URImongodb://127.0.0.1:27017/intlayer?replicaSet=rs0mongodb://mongo:27017/…MongoDB connection string, any mongodb:// or mongodb+srv:// cluster works
    REDIS_URLredis://127.0.0.1:6379redis://redis:6379Redis
    S3_ENDPOINThttp://127.0.0.1:9000http://minio:9000MinIO (server-to-server)
    S3_PUBLIC_URLhttp://localhost:9000/intlayerhttp://localhost:9000/intlayerPublic URL for browser asset loading
    S3_BUCKET_NAMEintlayerintlayerBucket name
    S3_ACCESS_KEY_IDintlayerintlayerMinIO access key

    Der Compose-Dienst app erhält zusätzlich INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100: Der Browser erreicht die API über localhost:3100, aber das serverseitige Rendering läuft innerhalb des Compose-Netzwerks und muss den Dienstnamen verwenden.

    Benutzerdefinierte Domain

    Das Backend liest seine öffentlichen URLs zur Laufzeit, das Dashboard hat sie jedoch einkompiliert: Die veröffentlichten Images intlayer/cms-frontend und intlayer/cms-all funktionieren nur unter http://localhost:3000. Um Intlayer unter Ihrer eigenen Domain bereitzustellen, braucht es daher zwei Dinge, die beide vom Installationsprogramm vorbereitet werden, wenn Sie die Domain-Frage beantworten:

    1. Vier Variablen in der env-Datei, die vom Backend gelesen werden (Cookies, E-Mail-Links, OAuth-Callbacks, Asset-URLs) und von docker-compose.build.yml als Build-Argumente verwendet werden:

      intlayer.env
      DOMAIN=example.org                          # cookie domain, parent of the hosts below
      APP_URL=https://cms.example.org
      BACKEND_URL=https://back.example.org
      S3_PUBLIC_URL=https://s3.example.org/intlayer
      
    2. Ein mit diesen URLs gebautes Dashboard-Image. Docker baut es direkt aus dem Repository, ohne Checkout:

      sh
      # Docker Compose: the override reads the build args from .env
      docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
      
      # All-in-one
      docker build -f docker/selfhost/Dockerfile \
        --build-arg VITE_DOMAIN=example.org \
        --build-arg VITE_SITE_URL=https://cms.example.org \
        --build-arg VITE_IDE_URL=https://cms.example.org \
        --build-arg VITE_BACKEND_URL=https://back.example.org \
        -t intlayer/cms-all:custom \
        https://github.com/aymericzip/intlayer.git#main
      

    Stellen Sie anschließend einen Reverse Proxy mit TLS vor den Container: cms.example.org → Port 3000, back.example.org → 3100, s3.example.org → 9000. Die drei Hosts müssen das DOMAIN-Suffix teilen, da das Session-Cookie darauf beschränkt ist.

    Optional (Funktionen fallen ohne sie sauber aus)

    VariableFeature
    OPENAI_API_KEYAI-assisted translation and content audit
    GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRETGitHub OAuth login
    GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETGoogle OAuth login
    GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRETGitLab OAuth login
    MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRETMicrosoft OAuth login

    Globaler Mailer

    Jede transaktionale E-Mail, einschließlich E-Mails außerhalb der Organisation wie Passwort-Resets und Magic Links, läuft über einen von zwei globalen Transporten:

    • Resend, unter Verwendung von RESEND_API_KEY.
    • SMTP, unter Verwendung der Variablen MAIL_SMTP_*. Sobald MAIL_SMTP_HOST gesetzt ist, wird SMTP verwendet und RESEND_API_KEY ignoriert.

    MAIL_PROVIDER wird nur benötigt, um einen Transport zu erzwingen, wenn beide konfiguriert sind (z. B. MAIL_PROVIDER=resend, um Resend beizubehalten, während ein SMTP-Host vorhanden ist).

    VariableExampleDescription
    MAIL_FROMIntlayer <no-reply@acme.com>Sender header for either transport. Accepts a bare address or Name <email>
    MAIL_SMTP_HOSTsmtp.acme.comSMTP host. Setting it selects the SMTP transport
    MAIL_SMTP_PORT587SMTP port (defaults to 587)
    MAIL_SMTP_SECUREfalseImplicit 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
    MAIL_PROVIDERresendOptional override: smtp or resend. Leave unset to auto-select
    Rangfolge: Der eigene Mailer einer Organisation (im Dashboard unter Organisation konfiguriert) hat Vorrang vor dem globalen Mailer, der wiederum Vorrang vor dem standardmäßigen Resend-Schlüssel hat.

    Verbinden Ihres Intlayer-Projekts

    Sobald der Stack läuft, verweisen Sie mit Ihrem Projekt auf das selbst gehostete Backend und Dashboard anstelle von intlayer.org.

    Projektkonfiguration

    intlayer.config.ts
    import type { IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      editor: {
        clientId: process.env.INTLAYER_CLIENT_ID,
        clientSecret: process.env.INTLAYER_CLIENT_SECRET,
    
        /**
         * URL of the self-hosted CMS dashboard.
         * Default: https://app.intlayer.org
         */
        cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
    
        /**
         * URL of the self-hosted backend API.
         * Default: https://back.intlayer.org
         */
        backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
      },
    };
    
    export default config;
    

    Set the environment variables in your project's .env:

    sh
    INTLAYER_CMS_URL=http://localhost:3000
    INTLAYER_BACKEND_URL=http://localhost:3100
    INTLAYER_CLIENT_ID=<your-client-id>
    INTLAYER_CLIENT_SECRET=<your-client-secret>
    

    Erstellen Sie Zugangsdaten in Ihrem selbst gehosteten Dashboard unter Projekte → Zugriffsschlüssel unter http://localhost:3000/projects.

    @intlayer/api-SDK

    Wenn Sie das @intlayer/api-SDK programmatisch verwenden, übergeben Sie backendURL explizit:

    cms.ts
    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();
    

    Einschränkungen

    • Eine benutzerdefinierte Domain erfordert einen Rebuild. Alle für den Browser sichtbaren VITE_*-URLs sind während des Builds in das Dashboard eingebunden, und die veröffentlichten Images (sowie die Desktop-App) werden mit localhost / Intlayer Cloud-Werten ausgeliefert. Standardmäßig muss auf das Dashboard unter http://localhost:3000, die API unter :3100 und MinIO unter :9000 zugegriffen werden; ein Remapping der Host-Ports hat denselben Effekt. Das Installationsprogramm bereitet alles für einen Rebuild aus dem Repository vor, wenn Sie ihm eine Domain angeben (siehe Benutzerdefinierte Domain), der Build selbst dauert jedoch mehrere Minuten. Das Ausrichten der Desktop-App auf ein selbst gehostetes Backend wird nicht unterstützt.
    • E-Mail erfordert einen funktionierenden Mailer. Die Ersteinrichtung erzwingt die E-Mail-Verifizierung, daher muss entweder RESEND_API_KEY oder ein SMTP-Relay (MAIL_SMTP_*) konfiguriert werden. Nachdem sich der erste Admin angemeldet hat, kann jede Organisation auch ihren eigenen SMTP- oder Resend-Mailer im Dashboard konfigurieren.
    • Die Desktop-App benötigt Node.js auf dem Computer, um ihren eingebetteten Server zu starten.
    • Kein Dokumentationsassistent. Der KI-Dokumentationsassistent von intlayer.org (/api/ai/ask, /api/search/doc) basiert auf ca. 130 MB vorberechneter Dokumentations-Embeddings, die die Self-Host-Images nicht mitliefern; diese beiden Routen werden im selbst gehosteten Modus nicht registriert. Die eigenen KI-Funktionen des Dashboards (Übersetzung, Audit, Autovervollständigung, Chat) sind nicht betroffen und benötigen nur OPENAI_API_KEY.