Haz tu pregunta y obtén un resumen del documento referenciando esta página y el proveedor AI de tu elección
El contenido de esta página ha sido traducido con una IA.
Ver la última versión del contenido original en inglésSi tienes una idea para mejorar esta documentación, no dudes en contribuir enviando una pull request en GitHub.
Enlace de GitHub a la documentaciónCopiar el Markdown del documento a la portapapeles
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):
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Setup | What it is | Pick it for |
|---|---|---|
| Aplicación de escritorio | Panel nativo para macOS, Linux y Windows | Un cliente local, nada que alojar |
| Docker todo en uno | Panel, API, MongoDB, Redis y MinIO en un solo contenedor | Pruebas e instalaciones pequeñas en una sola máquina |
| Docker Compose | Un contenedor por servicio, cada almacén reemplazable por un servicio administrado | Producción, escalado, bases de datos gestionadas |
Table of Contents
Imágenes y paquetes publicados
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Artifact | Docker Hub | GHCR mirror | Contents |
|---|---|---|---|
| All-in-one container | intlayer/cms-all | ghcr.io/aymericzip/intlayer/cms-all | app + backend + MongoDB 8 + Redis + MinIO + Chromium |
| Dashboard (frontend) | intlayer/cms-frontend | ghcr.io/aymericzip/intlayer/cms-frontend | TanStack Start dashboard on Bun |
| API (backend) | intlayer/cms-backend | ghcr.io/aymericzip/intlayer/cms-backend | Fastify REST API on Bun + Chromium |
| Desktop app | GitHub releases | n/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.
Copiar el código al portapapeles
In PowerShell:
Copiar el código al portapapeles
Copiar el código al portapapeles
Requisitos
- Node.js: la aplicación incorpora el servidor del panel y lo inicia con el binario
nodede 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.
Copiar el código al portapapeles
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Servicio | Puerto(s) del host | Propósito |
|---|---|---|
| app | 3000 | Panel de control (interfaz de usuario CMS) |
| backend | 3100 | API REST (endpoint /health) |
| mongo | interno | MongoDB 8, conjunto de réplicas de un solo nodo rs0 |
| redis | interno | Colas de trabajo (BullMQ) y almacenamiento en caché |
| minio | 9000 (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,9000y9001libres en el host. MinIO9000debe ser accesible desde el navegador, ya que carga los recursos directamente desdeS3_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.
Copiar el código al portapapeles
In PowerShell:
Copiar el código al portapapeles
Copiar el código al portapapeles
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 comoexample.org, sugierehttps://cms.example.orgpara el panel,https://back.example.orgpara la API yhttps://s3.example.org/intlayerpara el almacenamiento de objetos, y escribeDOMAIN,APP_URL,BACKEND_URLyS3_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):
Copiar el código al portapapeles
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):
Copiar el código al portapapeles
Copiar el código al portapapeles
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).
Copiar el código al portapapeles
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.
Copiar el código al portapapeles
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Servicio | Imagen | Rol |
|---|---|---|
app | intlayer/cms-frontend | Panel en :3000; espera a que el backend esté listo |
backend | intlayer/cms-backend | API en :3100 con Chromium; espera a Mongo, Redis y el bucket de MinIO |
mongo | mongo:8 | Conjunto de réplicas de un solo nodo rs0, iniciado por su propio healthcheck |
redis | redis:8-alpine | Colas y caché, persistencia append-only |
minio | quay.io/minio/minio | Almacenamiento S3 en :9000, consola en :9001 |
minio-init | quay.io/minio/mc | Tarea ú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,9000y9001libres 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.
Copiar el código al portapapeles
Or by hand:
Copiar el código al portapapeles
In PowerShell:
Copiar el código al portapapeles
Or by hand:
Copiar el código al portapapeles
Copiar el código al portapapeles
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
Copiar el código al portapapeles
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:
Copiar el código al portapapeles
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:
Copiar el código al portapapeles
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
Copiar el código al portapapeles
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:
Copiar el código al portapapeles
Copiar el código al portapapeles
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Variable | Default | Applies to | Description |
|---|---|---|---|
INTLAYER_MODE | (asked) | all | desktop, docker or compose, same as --mode |
INTLAYER_DOWNLOAD_DIR | ~/Downloads | desktop | Where the app installer is saved |
INTLAYER_IMAGE | intlayer/cms-all:latest | docker | All-in-one image to pull |
INTLAYER_ENV_FILE | ./intlayer.env | docker | Where to write the environment file |
INTLAYER_CONTAINER_NAME | intlayer | docker | Container name |
INTLAYER_DATA_VOLUME | intlayer-data | docker | Named volume mounted at /data |
INTLAYER_APP_PORT | 3000 | docker | Host port for the dashboard |
INTLAYER_API_PORT | 3100 | docker | Host port for the API |
INTLAYER_S3_PORT | 9000 | docker | Host port for the MinIO S3 API |
INTLAYER_CONSOLE_PORT | 9001 | docker | Host port for the MinIO console |
INTLAYER_COMPOSE_DIR | ./intlayer | compose | Where docker-compose.yml and .env are written |
INTLAYER_SELFHOST_REF | main | both | Git ref the compose file and env template are fetched from |
INTLAYER_BUILD_CONTEXT | …/intlayer.git#main | both | Build context used when a custom domain requires a rebuild |
INTLAYER_CUSTOM_IMAGE | intlayer/cms-all:custom | docker | Tag 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 tienenhttp://localhost:3000,http://localhost:3100yhttp://localhost:9000compiladas 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:
- Cree la primera cuenta. Al estar vacía la colección de usuarios, esta cuenta se asciende automáticamente a superadministrador.
- 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.
- 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
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Variable | Example | Description |
|---|---|---|
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).
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Variable | All-in-one | Docker Compose | Description |
|---|---|---|---|
PORT | 3100 | 3100 | Backend listening port |
APP_URL | http://localhost:3000 | http://localhost:3000 | Public URL of the dashboard |
BACKEND_URL | http://localhost:3100 | http://localhost:3100 | Public URL of the backend API |
DOMAIN | localhost | localhost | Cookie domain |
SELF_HOSTED | true | true | Disables the cloud-only API endpoints (billing, subscriptions, marketplace) |
MONGODB_URI | mongodb://127.0.0.1:27017/intlayer?replicaSet=rs0 | mongodb://mongo:27017/… | MongoDB connection string, any mongodb:// or mongodb+srv:// cluster works |
REDIS_URL | redis://127.0.0.1:6379 | redis://redis:6379 | Redis |
S3_ENDPOINT | http://127.0.0.1:9000 | http://minio:9000 | MinIO (server-to-server) |
S3_PUBLIC_URL | http://localhost:9000/intlayer | http://localhost:9000/intlayer | Public URL for browser asset loading |
S3_BUCKET_NAME | intlayer | intlayer | Bucket name |
S3_ACCESS_KEY_ID | intlayer | intlayer | MinIO 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:
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.envCopiar códigoCopiar el código al portapapeles
Una imagen del panel compilada con esas URLs. Docker la compila directamente desde el repositorio, sin necesidad de una copia local:
shCopiar códigoCopiar el código al portapapeles
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)
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Variable | Feature |
|---|---|
OPENAI_API_KEY | AI-assisted translation and content audit |
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 |
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 defineMAIL_SMTP_HOST, se utiliza SMTP y se ignoraRESEND_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).
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Variable | Example | Description |
|---|---|---|
MAIL_FROM | Intlayer <no-reply@acme.com> | Sender header for either transport. Accepts a bare address or Name <email> |
MAIL_SMTP_HOST | smtp.acme.com | SMTP host. Setting it selects the SMTP transport |
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 |
MAIL_PROVIDER | resend | Optional 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
Copiar el código al portapapeles
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:
Copiar el código al portapapeles
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:
Copiar el código al portapapeles
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 delocalhost/ Intlayer Cloud. Por defecto, se debe acceder al panel enhttp://localhost:3000, a la API en:3100y 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_KEYo 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 necesitanOPENAI_API_KEY.
Enlaces útiles
- Documentación de Intlayer CMS
- Referencia de configuración
- SDK de CMS:
@intlayer/api - Releases de la aplicación de escritorio
- Docker Hub:
intlayer/cms-all,intlayer/cms-frontend,intlayer/cms-backend, alojado en GHCR bajoghcr.io/aymericzip/intlayer/ docker/selfhost/: Dockerfile,docker-compose.ymly.env.template
