Faça sua pergunta e obtenha um resumo do documento referenciando esta página e o provedor AI de sua escolha
O conteúdo desta página foi traduzido com uma IA.
Veja a última versão do conteúdo original em inglêsSe você tiver uma ideia para melhorar esta documentação, sinta-se à vontade para contribuir enviando uma pull request no GitHub.
Link do GitHub para a documentaçãoCopiar o Markdown do documento para a área de transferência
Auto-hospedagem do Intlayer
O Intlayer pode ser executado em sua própria infraestrutura, sem necessidade de conta no Intlayer Cloud. Três configurações estão disponíveis, todas gerenciadas pelo mesmo instalador (install.sh, install.ps1 no Windows ou npx intlayer init infra):
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Setup | What it is | Pick it for |
|---|---|---|
| Aplicativo desktop | Painel nativo para macOS, Linux e Windows | Um cliente local, nada para hospedar |
| Docker tudo-em-um | Painel, API, MongoDB, Redis e MinIO em um único contêiner | Testes e instalações pequenas em máquina única |
| Docker Compose | Um contêiner por serviço, cada armazenamento de dados substituível por serviço gerenciado | Produção, escalabilidade, bancos de dados gerenciados |
Table of Contents
Imagens e pacotes publicados
Abrir a tabela em um modal para ver todo o conteúdo 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) |
Todas as três imagens são construídas a partir do mesmo docker/selfhost/Dockerfile e publicadas a cada versão. A stack do Compose também baixa as imagens oficiais mongo:8, redis:8-alpine e quay.io/minio/minio.
Configuração
O instalador pergunta qual configuração você deseja, verifica os pré-requisitos (oferecendo a instalação do Docker), grava o arquivo de ambiente com os segredos já gerados e baixa as imagens. Ele nunca inicia nada por conta própria: os modos Docker precisam primeiro de um serviço de e-mail, portanto ele termina imprimindo o comando a ser executado. Executá-lo novamente é seguro: um arquivo de ambiente existente nunca é sobrescrito, servindo também como caminho de atualização.
O painel do Intlayer como aplicativo nativo, construído com Tauri. Faz login no Intlayer Cloud (https://app.intlayer.org), portanto não há nada para hospedar. É a escolha certa quando você prefere um cliente local em vez de uma aba do navegador.
Instalação
O instalador baixa o pacote para seu SO e CPU e, em seguida, o abre (macOS), instala (dpkg / rpm no Linux) ou executa o assistente de instalação (Windows). Você também pode baixá-lo manualmente na página de releases.
Copiar o código para a área de transferência
In PowerShell:
Copiar o código para a área de transferência
Copiar o código para a área de transferência
Requisitos
- Node.js: o aplicativo incorpora o servidor do painel e o inicia com o binário
nodeda máquina. Instale-o a partir de nodejs.org se o aplicativo não iniciar.
A versão desktop publicada comunica-se com o backend Intlayer Cloud. Apontá-la para um backend auto-hospedado requer a reconstrução do aplicativo com VITE_BACKEND_URL definido para sua API, consulte Limitações.
Tudo é executado dentro do contêiner único intlayer/cms-all, supervisionado pelo s6-overlay, com cada armazenamento persistido em um único volume.
Copiar o código para a área de transferência
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Serviço | Porta(s) do host | Finalidade |
|---|---|---|
| app | 3000 | Painel (interface do usuário do CMS) |
| backend | 3100 | API REST (endpoint /health) |
| mongo | interno | MongoDB 8, conjunto de réplicas de nó único rs0 |
| redis | interno | Filas de tarefas (BullMQ) e cache |
| minio | 9000 (S3), 9001 (console) | Armazenamento de objetos compatível com S3 para avatares e capturas |
A ordem de inicialização é gerenciada pelas dependências s6 (mongod → início do replica-set, minio → criação do bucket, depois backend, depois app), e os serviços são reiniciados ao encerrar, para que a primeira inicialização se recupere sozinha.
Pré-requisitos
- Docker ≥ 24: o instalador oferece instalá-lo (via get.docker.com no Linux, Homebrew no macOS). No Windows, instale primeiro o Docker Desktop (backend WSL 2).
- Portas
3000,3100,9000e9001livres no host. MinIO9000deve permanecer acessível pelo navegador, que carrega ativos diretamente deS3_PUBLIC_URL. - Um serviço de envio de e-mails: uma chave de API do Resend ou um relay SMTP.
1. Instalação
Grava ./intlayer.env com BETTER_AUTH_SECRET e S3_SECRET_ACCESS_KEY gerados, faz algumas perguntas para preencher o restante, e baixa intlayer/cms-all:latest.
Copiar o código para a área de transferência
In PowerShell:
Copiar o código para a área de transferência
Copiar o código para a área de transferência
2. Responder às perguntas de configuração
O instalador pergunta (pressione Enter para aceitar uma sugestão; cada resposta pode ser alterada no arquivo depois):
- O domínio em que o Intlayer é servido. Deixe vazio para permanecer em
localhost. Com um domínio comoexample.org, ele sugerehttps://cms.example.orgpara o painel,https://back.example.orgpara a API ehttps://s3.example.org/intlayerpara o armazenamento de objetos, e gravaDOMAIN,APP_URL,BACKEND_URLeS3_PUBLIC_URL. Consulte Domínio personalizado para os próximos passos. - O serviço de e-mail: Resend (chave de API) ou um relay SMTP (host, porta, credenciais), além do endereço do remetente. Esta etapa pode ser pulada e feita manualmente depois.
- Uma chave de API da OpenAI opcional para os recursos de IA.
Sem um terminal (por exemplo, quando o script é executado a partir da CI), as perguntas são puladas e apenas os segredos são gerados. Abra intlayer.env e preencha Resend ou SMTP manualmente (detalhes em Mailer global):
Copiar o código para a área de transferência
3. Iniciar
Este é o comando que o instalador imprime (com um domínio personalizado, ele é precedido pelo docker build que produz intlayer/cms-all:custom, consulte Domínio personalizado):
Copiar o código para a área de transferência
Copiar o código para a área de transferência
A CLI executa o instalador, que imprime o comando docker run … mostrado nas outras abas. Copie-o no terminal depois de configurar o serviço de e-mail.
Abra http://localhost:3000 (ou a URL do seu painel) e siga a Configuração inicial. A primeira inicialização inicializa o conjunto de réplicas e o bucket, aguarde um minuto.
Backup e atualização
Todo o estado reside no volume intlayer-data (/data/mongo, /data/redis, /data/minio).
Copiar o código para a área de transferência
Para atualizar, execute o instalador novamente (ele baixa a imagem mais recente e mantém intlayer.env), execute docker rm -f intlayer e execute novamente o comando de inicialização. Para usar um MongoDB gerenciado em vez do integrado, defina MONGODB_URI no intlayer.env.
Um contêiner por serviço em uma rede Compose privada. O painel e a API usam as imagens publicadas intlayer/cms-frontend e intlayer/cms-backend; os armazenamentos usam as imagens oficiais mongo, redis e minio.
Copiar o código para a área de transferência
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Serviço | Imagem | Papel |
|---|---|---|
app | intlayer/cms-frontend | Painel em :3000; aguarda o backend ficar saudável |
backend | intlayer/cms-backend | API em :3100 com Chromium; aguarda Mongo, Redis e o bucket MinIO |
mongo | mongo:8 | Conjunto de réplicas de nó único rs0, iniciado por seu próprio healthcheck |
redis | redis:8-alpine | Filas e cache, persistência append-only |
minio | quay.io/minio/minio | Armazenamento S3 em :9000, console em :9001 |
minio-init | quay.io/minio/mc | Execução única: cria o bucket e sua política de download anônimo |
Os dados são mantidos nos volumes intlayer_mongo-data, intlayer_redis-data e intlayer_minio-data. As conexões dos serviços (MONGODB_URI, REDIS_URL, S3_ENDPOINT, a URL interna de backend usada pela renderização no servidor) são fixas no arquivo compose e têm precedência sobre o .env, que transporta apenas segredos e integrações opcionais.
Pré-requisitos
- Docker ≥ 24 com o plugin Compose: o instalador oferece instalá-lo no Linux e macOS. No Windows, instale primeiro o Docker Desktop (backend WSL 2).
- Portas
3000,3100,9000e9001livres no host. - Um serviço de envio de e-mails: uma chave de API do Resend ou um relay SMTP.
1. Instalação
Grava docker-compose.yml e um .env com os segredos gerados em ./intlayer/, faz as mesmas perguntas de configuração do modo tudo-em-um (domínio, serviço de e-mail, chave da OpenAI), e baixa as imagens.
Copiar o código para a área de transferência
Or by hand:
Copiar o código para a área de transferência
In PowerShell:
Copiar o código para a área de transferência
Or by hand:
Copiar o código para a área de transferência
Copiar o código para a área de transferência
2. Configurar um serviço de e-mail
Se você pulou a pergunta sobre o serviço de e-mail, preencha Resend ou SMTP em intlayer/.env, exatamente como para o contêiner tudo-em-um (consulte Mailer global).
3. Iniciar
Copiar o código para a área de transferência
Com um domínio personalizado, o instalador também baixa docker-compose.build.yml e o comando de inicialização passa a ser docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build (consulte Domínio personalizado).
Abra http://localhost:3000 (ou a URL do seu painel) e siga a Configuração inicial.
Bancos de dados gerenciados
Exclua o serviço que está substituindo do arquivo compose (e sua entrada depends_on em backend), e substitua a variável correspondente:
Copiar o código para a área de transferência
S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY / S3_BUCKET_NAME mantêm seu significado com qualquer provedor compatível com S3.
Escalabilidade
app e backend são stateless (sem estado). Atrás de um balanceador de carga, docker compose up -d --scale backend=3 funciona após remover os mapeamentos fixos de portas do host e quando o proxy acessa os serviços pelo nome. As tarefas em segundo plano são coordenadas através do Redis (BullMQ), permitindo que várias réplicas do backend compartilhem a fila com segurança.
Construindo a partir do código-fonte
Uma substituição altera os dois serviços Intlayer de image: para build:. A partir de uma cópia do repositório:
Copiar o código para a área de transferência
Sem uma cópia, aponte o contexto de build para o próprio repositório definindo INTLAYER_BUILD_CONTEXT=https://github.com/aymericzip/intlayer.git#main em .env. Os build args VITE_* do painel seguem DOMAIN, APP_URL e BACKEND_URL do mesmo arquivo, e é assim que um domínio personalizado é aplicado.
Backup e atualização
Copiar o código para a área de transferência
Configurações do instalador
Sem --mode (ou INTLAYER_MODE), o instalador exibe um menu: desktop, docker (tudo-em-um) ou compose. Ele também lê algumas variáveis de ambiente. Como é passado via pipe para a shell, passe-as para a shell em vez do curl:
Copiar o código para a área de transferência
Copiar o código para a área de transferência
Abrir a tabela em um modal para ver todo o conteúdo 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 |
As variáveis de porta alteram apenas o lado do host do mapeamento. As imagens publicadas possuemhttp://localhost:3000,http://localhost:3100ehttp://localhost:9000compiladas no pacote do painel, portanto mantenha os padrões a menos que construa suas próprias imagens, consulte Limitações.
Configuração inicial
Em uma nova instância (banco de dados vazio), a abertura do painel redireciona você para a página /init:
- Crie a primeira conta. Como a coleção de usuários está vazia, esta conta é automaticamente promovida a super admin.
- Um e-mail de verificação é enviado pelo Resend ou relay SMTP. A verificação do e-mail é obrigatória, por isso um serviço de e-mail deve ser configurado antes de iniciar.
- Clique no link no e-mail e depois faça login.
Quando um administrador já existir, /init redireciona para a página de login padrão.
Variáveis de ambiente
Ambos os modos Docker leem o mesmo arquivo (intlayer.env para o contêiner, .env para Compose), gerado a partir de docker/selfhost/.env.template.
Obrigatórias
Abrir a tabela em um modal para ver todo o conteúdo 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) |
Fixadas pela implantação
Estas são definidas pela imagem (tudo-em-um) ou pelo arquivo compose, e só precisam ser sobrescritas para uma topologia fora do padrão. DOMAIN, APP_URL, BACKEND_URL e S3_PUBLIC_URL são a exceção: definidas no arquivo env, elas têm precedência em ambos os modos (consulte Domínio personalizado).
Abrir a tabela em um modal para ver todo o conteúdo 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 |
O serviço Compose app recebe adicionalmente INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100: o navegador acessa a API em localhost:3100, mas a renderização do lado do servidor é executada dentro da rede Compose e deve usar o nome do serviço.
Domínio personalizado
O backend lê suas URLs públicas em tempo de execução, mas o painel as tem compiladas: as imagens publicadas intlayer/cms-frontend e intlayer/cms-all só funcionam em http://localhost:3000. Servir o Intlayer no seu próprio domínio exige, portanto, duas coisas, ambas preparadas pelo instalador quando você responde à pergunta do domínio:
Quatro variáveis no arquivo env, lidas pelo backend (cookies, links de e-mail, callbacks OAuth, URLs de recursos) e usadas como build args pelo
docker-compose.build.yml:intlayer.envCopiar códigoCopiar o código para a área de transferência
Uma imagem do painel compilada com essas URLs. O Docker a compila diretamente a partir do repositório, sem necessidade de cópia local:
shCopiar códigoCopiar o código para a área de transferência
Em seguida, coloque um reverse proxy com TLS na frente do contêiner: cms.example.org → porta 3000, back.example.org → 3100, s3.example.org → 9000. Os três hosts devem compartilhar o sufixo DOMAIN, já que o cookie de sessão é restrito a ele.
Opcionais (as funcionalidades degradam graciosamente quando ausentes)
Abrir a tabela em um modal para ver todo o conteúdo 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 |
Mailer global
Cada e-mail transacional, incluindo e-mails fora da organização como redefinições de senha e links mágicos, passa por um dos dois transportes globais:
- Resend, usando
RESEND_API_KEY. - SMTP, usando as variáveis
MAIL_SMTP_*. Assim queMAIL_SMTP_HOSTfor definido, o SMTP será usado eRESEND_API_KEYserá ignorado.
MAIL_PROVIDER só é necessário para forçar um transporte quando ambos estiverem configurados (por exemplo, MAIL_PROVIDER=resend para manter o Resend enquanto um host SMTP estiver presente).
Abrir a tabela em um modal para ver todo o conteúdo 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 |
Precedência: o mailer da própria organização (configurado no painel da Organização) tem prioridade sobre o mailer global, que por sua vez tem prioridade sobre a chave padrão do Resend.
Conectando seu projeto Intlayer
Assim que a stack estiver em execução, aponte seu projeto para o backend e painel auto-hospedados em vez de intlayer.org.
Configuração do projeto
Copiar o código para a área de transferência
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 o código para a área de transferência
Crie credenciais de acesso em seu painel auto-hospedado em Projetos → Chaves de acesso em http://localhost:3000/projects.
SDK @intlayer/api
Ao usar o SDK @intlayer/api programaticamente, passe backendURL explicitamente:
Copiar o código para a área de transferência
Limitações
- Um domínio personalizado exige recompilar. Todas as URLs
VITE_*voltadas para o navegador são embutidas no painel no momento da compilação, e as imagens publicadas (e o aplicativo desktop) vêm com valores delocalhost/ Intlayer Cloud. Por padrão, o painel deve ser acessado emhttp://localhost:3000, a API em:3100e o MinIO em:9000; remapear as portas do host tem o mesmo efeito. O instalador prepara tudo para uma recompilação a partir do repositório quando você informa um domínio (consulte Domínio personalizado), mas a compilação em si leva vários minutos. Apontar o aplicativo desktop para um backend auto-hospedado não é suportado. - O e-mail requer um serviço funcional. A configuração inicial impõe a verificação de e-mail, portanto
RESEND_API_KEYou um relay SMTP (MAIL_SMTP_*) deve ser configurado. Depois que o primeiro administrador faz login, cada organização também pode configurar seu próprio serviço SMTP ou Resend a partir do painel. - O aplicativo desktop precisa de Node.js na máquina para iniciar seu servidor embutido.
- Sem assistente de documentação. O assistente de documentação com IA do intlayer.org (
/api/ai/ask,/api/search/doc) depende de cerca de 130 MB de embeddings de documentação pré-calculados que as imagens auto-hospedadas não incluem; essas duas rotas não são registradas no modo auto-hospedado. Os recursos de IA próprios do painel (tradução, auditoria, autocompletar, chat) não são afetados e só precisam deOPENAI_API_KEY.
Links úteis
- Documentação do Intlayer CMS
- Referência de configuração
- SDK do CMS:
@intlayer/api - Releases do aplicativo desktop
- Docker Hub:
intlayer/cms-all,intlayer/cms-frontend,intlayer/cms-backend, espelhado no GHCR emghcr.io/aymericzip/intlayer/ docker/selfhost/: Dockerfile,docker-compose.ymle.env.template
