Faça sua pergunta e obtenha um resumo do documento referenciando esta página e o provedor AI de sua escolha
Este documento está desatualizado, a versão base foi atualizada em 23 de agosto de 2026.
Ir para a documentação em inglêsHistórico de versões
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 inteiramente na sua própria infraestrutura — nenhuma conta Intlayer Cloud é necessária. Um único comando inicializa uma stack pronta para produção:
Um comando instala tudo:
Copiar o código para a área de transferência
O instalador baixa um docker-compose.yml e um .env, gera automaticamente os segredos necessários e inicia todos os containers com docker compose up -d.
A única dependência externa é MongoDB: o backend se conecta a um cluster MongoDB Atlas, que você fornece. Tudo mais é executado dentro do container.
Sumário
Arquitetura
Copiar o código para a área de transferência
O Chromium (usado para a geração de screenshots do Puppeteer) é empacotado dentro da imagem do backend — nenhum container separado é necessário.
Pré-requisitos
- Docker ≥ 24 e Docker Compose ≥ v2. Se algum deles estiver faltando, o instalador exibe o link de instalação e sai.
- Portas
3000,3100,8025,9000e9001disponíveis no host. - Um host Linux ou macOS (ou WSL2 no Windows).
Tudo o resto — Bun, Redis, MinIO, Chromium — é enviado dentro da imagem.
Início rápido
1. Executar o instalador
Copiar o código para a área de transferência
Ele verifica se o Docker está instalado e em execução, escreve ./intlayer.env com BETTER_AUTH_SECRET e S3_SECRET_ACCESS_KEY já gerados, e baixa a imagem. Ele não inicia o contêiner — o backend não pode inicializar sem suas credenciais de banco de dados.
Executar o instalador novamente é seguro: um intlayer.env existente nunca será sobrescrito, então ele funciona também como o caminho para atualização.
2. Preencha suas credenciais
Abra intlayer.env e complete os valores marcados como TODO:
Copiar o código para a área de transferência
O arquivo também contém blocos comentados para recursos opcionais — SMTP mailer, OPENAI_API_KEY e os provedores OAuth. Descomente o que você precisar.
O arquivo é lido pordocker run --env-file, que não remove aspas e trata tudo após=como o valor. Escreva valores simples e mantenha comentários em suas próprias linhas.
3. Iniciar o container
Este é o comando que o instalador imprime quando termina:
Copiar o código para a área de transferência
Em seguida, abra http://localhost:3000. O primeiro boot inicializa os datastores, então aguarde um minuto.
O dashboard é servido em localhost. Consulte Limitações — domínios personalizados não são suportados pela imagem publicada.
Configurações do instalador
O instalador lê algumas variáveis de ambiente. Como é canalizado para sh, passe-as para o shell em vez de para curl:
Copiar o código para a área de transferência
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Variável | Padrão | Descrição |
|---|---|---|
INTLAYER_IMAGE | ghcr.io/aymericzip/intlayer-selfhost:latest | Imagem a descarregar |
INTLAYER_ENV_FILE | ./intlayer.env | Onde escrever o arquivo env |
INTLAYER_CONTAINER_NAME | intlayer | Nome do container |
INTLAYER_DATA_VOLUME | intlayer-data | Volume nomeado montado em /data |
INTLAYER_APP_PORT | 3000 | Porta do host para o painel |
INTLAYER_API_PORT | 3100 | Porta do host para a API |
INTLAYER_S3_PORT | 9000 | Porta do host para a API MinIO S3 |
INTLAYER_CONSOLE_PORT | 9001 | Porta do host para o console MinIO |
As quatro variáveis de porta apenas mudam o lado host do mapeamento impresso no comandodocker run. A imagem publicada temhttp://localhost:3000,http://localhost:3100ehttp://localhost:9000compilados no pacote do painel no momento da compilação, portanto remapeá-los deixa o navegador apontando para as portas antigas. Mantenha os padrões a menos que esteja criando sua própria imagem — veja Limitações.
Início rápido
O que o instalador faz:
- Verifica se
dockeredocker composeestão presentes. - Baixa
docker-compose.ymle.env.examplepara./intlayer/. - Se nenhum
.envexistir, copia o exemplo e gera segredos aleatórios paraBETTER_AUTH_SECRET,S3_ACCESS_KEY_IDeS3_SECRET_ACCESS_KEYviaopenssl rand. - Executa
docker compose pull+docker compose up -d. - Imprime as URLs: dashboard
:3000, API:3100, UI de e-mail:8025, console MinIO:9001.
Após a stack estar ativa, abra http://localhost:3000 e crie sua primeira conta.
Serviços
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Serviço | Imagem | Porta(s) do Host | Finalidade |
|---|---|---|---|
| app | built from apps/app/Dockerfile | 3000 | Dashboard TanStack Start (UI do CMS) |
| backend | built from apps/backend/Dockerfile | 3100 | API REST Fastify (endpoint /health) |
| mongo | mongo:7 | internal | Conjunto de réplicas de nó único (rs0) |
| redis | redis:7-alpine | internal | Filas de trabalho (BullMQ) e cache (ioredis) |
| minio | minio/minio | 9000 (S3), 9001 (console) | Armazenamento de objetos compatível com S3 para avatares e screenshots |
| mailpit | axllent/mailpit | 1025 (SMTP), 8025 (web UI) | Sink local de e-mail transacional |
A porta9000do MinIO deve ser acessível pelo navegador porque os ativos carregados (avatares, screenshots) são carregados diretamente deS3_PUBLIC_URL=http://localhost:9000/intlayer.
Variáveis de ambiente
Obrigatório
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Variável | Exemplo | Descrição |
|---|---|---|
DB_ID | intlayer | Usuário MongoDB Atlas |
DB_MDP | (sua senha) | Senha MongoDB Atlas |
DB_CLUSTER | cluster0.xxxxx.mongodb.net | Host do cluster MongoDB Atlas (usado na URI mongodb+srv://) |
BETTER_AUTH_SECRET | (gerado) | Secret de 32 bytes para assinatura de sessão |
S3_SECRET_ACCESS_KEY | (gerado) | Secret para o MinIO incluído |
RESEND_API_KEY | (sua chave) | Email transacional via Resend. Obrigatório para configuração inicial, a menos que você configure um mailer SMTP global (veja Global mailer) |
Obrigatórias (auto-geradas ou solicitadas)
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Variável | Exemplo | Descrição |
|---|---|---|
NODE_ENV | production | Ambiente de tempo de execução |
PORT | 3100 | Porta de escuta do backend |
BACKEND_URL | http://localhost:3100 | URL pública da API do backend |
APP_URL | http://localhost:3000 | URL pública do dashboard |
DOMAIN | localhost | Domínio do cookie |
MONGODB_URI | mongodb://mongo:27017/intlayer?replicaSet=rs0 | URI de conexão completa do MongoDB |
REDIS_URL | redis://redis:6379 | URL de conexão do Redis |
BETTER_AUTH_SECRET | (generated) | Segredo de 32 bytes para assinatura de sessão |
MAIL_PROVIDER | smtp | Transporte de e-mail: smtp ou resend |
MAIL_SMTP_HOST | mailpit | Nome de host SMTP (nome do container Mailpit) |
MAIL_SMTP_PORT | 1025 | Porta SMTP |
MAIL_FROM | Intlayer <no-reply@localhost> | Endereço do remetente |
S3_ENDPOINT | http://minio:9000 | Endpoint compatível com S3 |
S3_PUBLIC_URL | http://localhost:9000/intlayer | URL pública para carregamento de ativos no navegador |
S3_BUCKET_NAME | intlayer | Nome do bucket |
S3_ACCESS_KEY_ID | (generated) | Chave de acesso do MinIO |
S3_SECRET_ACCESS_KEY | (generated) | Chave secreta do MinIO |
VITE_BACKEND_URL | http://localhost:3100 | URL do backend incorporada ao dashboard no momento da compilação |
VITE_DOMAIN | localhost | Domínio incorporado ao dashboard no momento da compilação |
Opcionais (recursos são degradados graciosamente quando ausentes)
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Variável | Recurso |
|---|---|
OPENAI_API_KEY | Tradução assistida por IA e auditoria de conteúdo |
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_* | Gerenciamento de faturamento e assinaturas |
RESEND_API_KEY | E-mail transacional via Resend (sobrescreve Mailpit quando definido) |
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET | Login OAuth do GitHub |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Login OAuth do Google |
GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET | Login OAuth do GitLab |
MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET | Login OAuth da Microsoft |
LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET | Login OAuth do LinkedIn |
ATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRET | Login OAuth da Atlassian |
Global mailer
Por padrão, todos os emails transacionais são enviados através do Resend usando RESEND_API_KEY. Implantações auto-hospedadas podem, em vez disso, rotear todos os emails — incluindo emails não-organizacionais, como redefinições de senha e magic links — através de um mailer global configurado com variáveis de ambiente.
Configure MAIL_PROVIDER para ativá-lo. Quando não configurado, o mailer padrão do Resend é usado.
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Variable | Example | Description |
|---|---|---|
MAIL_PROVIDER | smtp | Global transport: smtp ou resend. Deixe não configurado para usar padrões |
MAIL_FROM | Intlayer <no-reply@acme.com> | Sender header. Aceita um endereço simples ou formato Name <email> |
MAIL_SMTP_HOST | smtp.acme.com | SMTP host (obrigatório quando MAIL_PROVIDER=smtp) |
MAIL_SMTP_PORT | 587 | SMTP port (padrão é 587) |
MAIL_SMTP_SECURE | false | Implicit TLS. Configure true para a porta 465 |
MAIL_SMTP_USER | (seu usuário) | SMTP username (opcional; omita para relays não autenticados) |
MAIL_SMTP_PASSWORD | (sua senha) | SMTP password |
Precedência: o próprio mailer de uma organização (configurado a partir do dashboard Organization) tem prioridade sobre o mailer global, que por sua vez tem prioridade sobre a chave padrão do Resend.
Conectando seu projeto Intlayer
Uma vez que a stack esteja em execução, aponte seu projeto para o backend e dashboard 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 do dashboard CMS auto-hospedado.
* Padrão: https://app.intlayer.org
*/
cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
/**
* URL da API do backend auto-hospedado.
* Padrão: https://back.intlayer.org
*/
backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
},
};
export default config;
Defina as variáveis de ambiente no arquivo .env do seu projeto:
Copiar o código para a área de transferência
Crie credenciais de acesso no seu dashboard 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
Atualizando
Isso baixa as imagens mais recentes e reinicia os containers com docker compose pull && docker compose up -d. Os volumes existentes (mongo-data, redis-data, minio-data) são preservados — sem perda de dados.
Copiar o código para a área de transferência
Backup e restauração
Todos os dados persistentes residem em três volumes Docker nomeados.
Backup
Copiar o código para a área de transferência
Restauração
Copiar o código para a área de transferência
Limitações
- MongoDB deve ser externo (Atlas). O backend conecta apenas via
mongodb+srv://(construído a partir deDB_ID/DB_MDP/DB_CLUSTER), então um simplesmongodb://host:27017— incluindo omongodincluído no container — não pode ser usado. Forneça um cluster MongoDB Atlas. - Sem domínio personalizado. Todas as URLs
VITE_*voltadas para o navegador são inseridas no app em tempo de construção, e a imagem publicada é enviada com valoreslocalhost. O dashboard deve ser acessado emhttp://localhost:3000; servir em um domínio público exigiria reconstruir a imagem com as URLs de destino incorporadas e não é suportado por padrão. - Email requer um mailer funcionando. A configuração da primeira execução impõe verificação de email, portanto,
RESEND_API_KEYou um mailer SMTP global (MAIL_PROVIDER=smtp+MAIL_SMTP_*) deve ser configurado. Após o primeiro admin se conectar, cada organização também pode configurar seu próprio mailer SMTP ou Resend no dashboard.
Solução de problemas
Backend em loop de falha na primeira inicialização
MongoDB e Redis devem estar saudáveis antes que o backend possa iniciar. O arquivo compose usa depends_on com condition: service_healthy. Se você notar reinícios repetidos do backend, verifique se os healthchecks do mongo e redis estão passando:
Copiar o código para a área de transferência
Procure por MongoDB connection error próximo ao topo do log.
Dashboard não consegue acessar a API
Verifique se VITE_BACKEND_URL corresponde à URL onde o backend é acessível a partir do navegador (não da rede Docker). Se você alterou a porta do backend ou adicionou um proxy reverso, reconstrua a imagem do dashboard:
Bucket MinIO ausente
Se o serviço minio-init de execução única não foi executado (ou executou antes que o MinIO estivesse pronto), crie o bucket manualmente:
Copiar o código para a área de transferência
