Autor:
    Creación:2026-06-30Última actualización:2026-09-27

    Autoalojamiento de Intlayer

    Intlayer puede ejecutarse en su propia infraestructura, sin necesidad de una cuenta de Intlayer Cloud. Hay tres configuraciones disponibles, todas gestionadas por el mismo instalador (install.sh, install.ps1 en Windows o npx intlayer init infra):

    SetupWhat it isPick it for
    Aplicación de escritorioPanel nativo para macOS, Linux y WindowsUn cliente local, nada que alojar
    Docker todo en unoPanel, API, MongoDB, Redis y MinIO en un solo contenedorPruebas e instalaciones pequeñas en una sola máquina
    Docker ComposeUn contenedor por servicio, cada almacén reemplazable por un servicio administradoProducción, escalado, bases de datos gestionadas

    Table of Contents

    Imágenes y paquetes publicados

    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)

    Las tres imágenes se compilan a partir del mismo docker/selfhost/Dockerfile y se publican con cada versión. El stack de Compose también descarga las imágenes oficiales mongo:8, redis:8-alpine y quay.io/minio/minio.

    Configuración

    El instalador pregunta qué configuración desea, verifica los requisitos previos (ofreciendo instalar Docker), escribe el archivo de entorno con los secretos ya generados y descarga las imágenes. Nunca inicia nada por sí solo: los modos Docker necesitan primero un servicio de correo, por lo que finaliza mostrando el comando a ejecutar. Volver a ejecutarlo es seguro: un archivo de entorno existente nunca se sobrescribe, por lo que también es la vía de actualización.

    El panel de Intlayer como aplicación nativa, construida con Tauri. Inicia sesión en Intlayer Cloud (https://app.intlayer.org), por lo que no hay nada que alojar. Es la opción ideal cuando prefiere un cliente local en lugar de una pestaña del navegador.

    Instalación

    El instalador descarga el paquete correspondiente a su sistema operativo y CPU y luego lo abre (macOS), lo instala (dpkg / rpm en Linux) o ejecuta el asistente de instalación (Windows). También puede descargarlo manualmente desde la página de releases.

    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
    

    Requisitos

    • Node.js: la aplicación incorpora el servidor del panel y lo inicia con el binario node de la máquina. Instálelo desde nodejs.org si la aplicación no se inicia.
    La compilación de escritorio publicada se comunica con el backend de Intlayer Cloud. Apuntarla a un backend autoalojado requiere reconstruir la aplicación con VITE_BACKEND_URL configurado en su API, consulte Limitaciones.

    Todo se ejecuta dentro de un único contenedor intlayer/cms-all, supervisado por s6-overlay, con cada almacén de datos persistido en un solo volumen.

    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
    
    ServicioPuerto(s) del hostPropósito
    app3000Panel de control (interfaz de usuario CMS)
    backend3100API REST (endpoint /health)
    mongointernoMongoDB 8, conjunto de réplicas de un solo nodo rs0
    redisinternoColas de trabajo (BullMQ) y almacenamiento en caché
    minio9000 (S3), 9001 (consola)Almacenamiento de objetos compatible con S3 para avatares y capturas

    El orden de inicio está regulado por las dependencias de s6 (mongod → inicio de replica-set, minio → creación del bucket, luego backend, luego app), y los servicios se reinician si fallan, por lo que el primer inicio se recupera solo.

    Requisitos previos

    • Docker ≥ 24: el instalador ofrece instalarlo (mediante get.docker.com en Linux, Homebrew en macOS). En Windows, instale primero Docker Desktop (backend WSL 2).
    • Puertos 3000, 3100, 9000 y 9001 libres en el host. MinIO 9000 debe ser accesible desde el navegador, ya que carga los recursos directamente desde S3_PUBLIC_URL.
    • Un servicio de correo: una clave API de Resend o un relay SMTP.

    1. Instalación

    Escribe ./intlayer.env con BETTER_AUTH_SECRET y S3_SECRET_ACCESS_KEY generados, hace algunas preguntas para completar el resto, y descarga intlayer/cms-all:latest.

    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. Responder a las preguntas de configuración

    El instalador solicita (pulse Intro para aceptar una sugerencia; cada respuesta puede modificarse en el archivo más adelante):

    • El dominio en el que se sirve Intlayer. Déjelo vacío para quedarse en localhost. Con un dominio como example.org, sugiere https://cms.example.org para el panel, https://back.example.org para la API y https://s3.example.org/intlayer para el almacenamiento de objetos, y escribe DOMAIN, APP_URL, BACKEND_URL y S3_PUBLIC_URL. Consulte Dominio personalizado para los pasos siguientes.
    • El servicio de correo: Resend (clave de API) o un relé SMTP (host, puerto, credenciales), además de la dirección del remitente. Este paso puede omitirse y hacerse a mano más tarde.
    • Una clave de API de OpenAI opcional para las funcionalidades de IA.

    Sin terminal (por ejemplo, cuando el script se ejecuta desde la CI), las preguntas se omiten y solo se generan los secretos. Abra intlayer.env y configure Resend o SMTP a mano (detalles en Servicio de correo global):

    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. Iniciar

    Este es el comando que imprime el instalador (con un dominio personalizado, va precedido del docker build que produce intlayer/cms-all:custom, consulte Dominio personalizado):

    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
    

    La CLI ejecuta el instalador, que muestra el comando docker run … visto en las otras pestañas. Cópielo en su terminal una vez configurado el servicio de correo.

    Abra http://localhost:3000 (o la URL de su panel) y siga la Configuración inicial. El primer inicio inicializa el conjunto de réplicas y el bucket, por lo que puede tardar un minuto.

    Copia de seguridad y actualización

    Todo el estado reside en el volumen 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 /
    

    Para actualizar, vuelva a ejecutar el instalador (descarga la imagen más reciente y mantiene intlayer.env), luego ejecute docker rm -f intlayer y lance nuevamente el comando de inicio. Para utilizar un MongoDB administrado en lugar del integrado, configure MONGODB_URI en intlayer.env.

    Un contenedor por servicio en una red privada de Compose. El panel y la API utilizan las imágenes publicadas intlayer/cms-frontend e intlayer/cms-backend; los almacenes de datos utilizan las imágenes oficiales mongo, redis y 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
    
    ServicioImagenRol
    appintlayer/cms-frontendPanel en :3000; espera a que el backend esté listo
    backendintlayer/cms-backendAPI en :3100 con Chromium; espera a Mongo, Redis y el bucket de MinIO
    mongomongo:8Conjunto de réplicas de un solo nodo rs0, iniciado por su propio healthcheck
    redisredis:8-alpineColas y caché, persistencia append-only
    minioquay.io/minio/minioAlmacenamiento S3 en :9000, consola en :9001
    minio-initquay.io/minio/mcTarea única: crea el bucket y la política de descarga anónima

    Los datos se conservan en los volúmenes intlayer_mongo-data, intlayer_redis-data e intlayer_minio-data. La conexión entre servicios (MONGODB_URI, REDIS_URL, S3_ENDPOINT, la URL interna del backend utilizada por el renderizado del lado del servidor) está fija en el archivo compose y prevalece sobre .env, que solo contiene secretos e integraciones opcionales.

    Requisitos previos

    • Docker ≥ 24 con el plugin de Compose: el instalador ofrece instalarlo en Linux y macOS. En Windows, instale primero Docker Desktop (backend WSL 2).
    • Puertos 3000, 3100, 9000 y 9001 libres en el host.
    • Un servicio de correo: una clave API de Resend o un relay SMTP.

    1. Instalación

    Escribe docker-compose.yml y un .env con los secretos generados en ./intlayer/, hace las mismas preguntas de configuración que el modo todo en uno (dominio, servicio de correo, clave de OpenAI), y descarga las imágenes.

    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. Configurar un servicio de correo

    Si omitió la pregunta sobre el servicio de correo, complete Resend o SMTP en intlayer/.env, exactamente igual que para el contenedor todo en uno (consulte Servicio de correo global).

    3. Iniciar

    sh
    cd intlayer && docker compose up -d
    

    Con un dominio personalizado, el instalador también descarga docker-compose.build.yml y el comando de inicio pasa a ser docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build (consulte Dominio personalizado).

    Abra http://localhost:3000 (o la URL de su panel) y siga la Configuración inicial.

    Almacenes de datos gestionados

    Elimine del archivo compose el servicio que desea reemplazar (así como su entrada en depends_on dentro de backend), y luego sobrescriba la variable correspondiente:

    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 mantienen su significado frente a cualquier proveedor compatible con S3.

    Escalabilidad

    app y backend son stateless (sin estado). Detrás de un balanceador de carga, docker compose up -d --scale backend=3 funciona una vez eliminados los mapeos fijos de puertos del host y cuando el proxy direcciona los servicios por nombre. Las tareas en segundo plano se coordinan a través de Redis (BullMQ), por lo que varias réplicas del backend comparten la cola de forma segura.

    Compilación desde el código fuente

    Una configuración de anulación cambia los dos servicios de Intlayer de image: a build:. Desde una copia del repositorio:

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

    Sin una copia, apunte el contexto de build al propio repositorio definiendo INTLAYER_BUILD_CONTEXT=https://github.com/aymericzip/intlayer.git#main en .env. Los build args VITE_* del panel siguen DOMAIN, APP_URL y BACKEND_URL del mismo archivo, que es como se aplica un dominio personalizado.

    Copia de seguridad y actualización

    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
    

    Configuración del instalador

    Sin --mode (o INTLAYER_MODE), el instalador muestra un menú: desktop, docker (todo en uno) o compose. También lee algunas variables de entorno. Al pasarse por tubería a la shell, declárelas en la shell en lugar de pasarlas a 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
    Las variables de puerto solo cambian el lado del host del mapeo. Las imágenes publicadas tienen http://localhost:3000, http://localhost:3100 y http://localhost:9000 compiladas en el paquete del panel, por lo que mantenga los valores predeterminados a menos que construya sus propias imágenes, consulte Limitaciones.

    Configuración inicial

    En una instancia nueva (base de datos vacía), al abrir el panel se le redirige a la página /init:

    1. Cree la primera cuenta. Al estar vacía la colección de usuarios, esta cuenta se asciende automáticamente a superadministrador.
    2. Se envía un correo electrónico de verificación a través de Resend o de su relay SMTP. La verificación del correo es obligatoria, por lo que se debe configurar un servicio de correo antes de comenzar.
    3. Haga clic en el enlace del correo y luego inicie sesión.

    Una vez que existe un administrador, /init redirige a la página de inicio de sesión estándar.

    Variables de entorno

    Ambos modos Docker leen el mismo archivo (intlayer.env para el contenedor, .env para Compose), generado a partir de docker/selfhost/.env.template.

    Requeridas

    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)

    Fijadas por el despliegue

    Estas las define la imagen (todo en uno) o el archivo compose, y solo es necesario sobrescribirlas para una topología no estándar. DOMAIN, APP_URL, BACKEND_URL y S3_PUBLIC_URL son la excepción: si se definen en el archivo env, tienen prioridad en ambos modos (consulte Dominio personalizado).

    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

    El servicio app de Compose recibe adicionalmente INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100: el navegador accede a la API en localhost:3100, pero el renderizado del lado del servidor se ejecuta dentro de la red Compose y debe usar el nombre del servicio.

    Dominio personalizado

    El backend lee sus URLs públicas en tiempo de ejecución, pero el panel las tiene compiladas: las imágenes publicadas intlayer/cms-frontend e intlayer/cms-all solo funcionan en http://localhost:3000. Servir Intlayer en su propio dominio requiere, por tanto, dos cosas, ambas preparadas por el instalador cuando responde a la pregunta del dominio:

    1. Cuatro variables en el archivo env, leídas por el backend (cookies, enlaces de correo, callbacks de OAuth, URLs de recursos) y usadas como build args por docker-compose.build.yml:

      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. Una imagen del panel compilada con esas URLs. Docker la compila directamente desde el repositorio, sin necesidad de una copia local:

      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
      

    Después, coloque un reverse proxy con TLS delante del contenedor: cms.example.org → puerto 3000, back.example.org → 3100, s3.example.org → 9000. Los tres hosts deben compartir el sufijo DOMAIN, ya que la cookie de sesión está limitada a él.

    Opcionales (las funciones se degradan suavemente si están ausentes)

    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

    Servicio de correo global

    Cada correo electrónico transaccional, incluidos los correos no pertenecientes a la organización (como restablecimientos de contraseña y enlaces mágicos), pasa a través de uno de dos transportes globales:

    • Resend, usando RESEND_API_KEY.
    • SMTP, usando las variables MAIL_SMTP_*. Tan pronto como se define MAIL_SMTP_HOST, se utiliza SMTP y se ignora RESEND_API_KEY.

    MAIL_PROVIDER solo es necesario para forzar un transporte cuando ambos están configurados (por ejemplo, MAIL_PROVIDER=resend para mantener Resend aunque esté presente un host SMTP).

    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
    Prioridad: el servicio de correo propio de una organización (configurado en el panel de Organización) tiene prioridad sobre el servicio de correo global, que a su vez tiene prioridad sobre la clave predeterminada de Resend.

    Conectar su proyecto Intlayer

    Una vez que el stack esté funcionando, apunte su proyecto al backend y al panel autoalojados en lugar de intlayer.org.

    Configuración del proyecto

    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>
    

    Cree credenciales de acceso en su panel autoalojado en Proyectos → Claves de acceso en http://localhost:3000/projects.

    SDK @intlayer/api

    Al usar el SDK @intlayer/api de forma programática, pase backendURL explícitamente:

    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();
    

    Limitaciones

    • Un dominio personalizado implica recompilar. Todas las URLs VITE_* visibles para el navegador se integran en el panel durante la compilación, y las imágenes publicadas (y la aplicación de escritorio) se entregan con valores de localhost / Intlayer Cloud. Por defecto, se debe acceder al panel en http://localhost:3000, a la API en :3100 y a MinIO en :9000; reasignar los puertos del host tiene el mismo efecto. El instalador prepara todo para una recompilación desde el repositorio cuando le indica un dominio (consulte Dominio personalizado), pero la compilación en sí tarda varios minutos. No se admite apuntar la aplicación de escritorio a un backend autoalojado.
    • El correo electrónico requiere un servicio funcional. La configuración inicial exige la verificación por correo electrónico, por lo que se debe configurar RESEND_API_KEY o un relay SMTP (MAIL_SMTP_*). Después de que el primer administrador inicie sesión, cada organización puede configurar su propio servicio SMTP o Resend desde el panel.
    • La aplicación de escritorio necesita Node.js en la máquina para iniciar su servidor integrado.
    • Sin asistente de documentación. El asistente de documentación con IA de intlayer.org (/api/ai/ask, /api/search/doc) se basa en unos 130 MB de embeddings de documentación precalculados que las imágenes autoalojadas no incluyen; esas dos rutas no se registran en modo autoalojado. Las funcionalidades de IA propias del panel (traducción, auditoría, autocompletado, chat) no se ven afectadas y solo necesitan OPENAI_API_KEY.

    Enlaces útiles