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êsIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
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:
Copiar o código para a área de transferência
curl -fsSL https://intlayer.org/install.sh | shO 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.
Sumário
Arquitetura
Copiar o código para a área de transferência
┌─────────────────────────────┐ browser ──────▶ │ app (TanStack Start) :3000│ ──┐ └─────────────────────────────┘ │ VITE_BACKEND_URL ┌─────────────────────────────┐ │ │ backend (Fastify/Bun) :3100│ ◀─┘ └──────────────┬──────────────┘ ┌──────────┬─────────┼──────────┬───────────┐ ▼ ▼ ▼ ▼ ▼ mongo:27017 redis:6379 minio:9000 mailpit:1025 Chromium (1-node RS) (S3 API) (SMTP) (in-image) minio:9001 mailpit:8025 (console) (web UI)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).
Início rápido
Copiar o código para a área de transferência
curl -fsSL https://intlayer.org/install.sh | shO 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 |
As portas internas (mongo, redis) não são expostas ao host por padrão.
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
O instalador gera um arquivo .env pronto para uso. A tabela abaixo descreve cada variável.
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 |
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
INTLAYER_CMS_URL=http://localhost:3000INTLAYER_BACKEND_URL=http://localhost:3100INTLAYER_CLIENT_ID=<your-client-id>INTLAYER_CLIENT_SECRET=<your-client-secret>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
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();Atualizando
Reexecutar o instalador em uma implantação existente realiza uma atualização contínua:
Copiar o código para a área de transferência
curl -fsSL https://intlayer.org/install.sh | shIsso 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.
Para atualizar manualmente de dentro do diretório ./intlayer/:
Copiar o código para a área de transferência
docker compose pulldocker compose up -dBackup 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
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/mongo-data.tar.gz /datadocker run --rm \ -v intlayer_redis-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/redis-data.tar.gz /datadocker run --rm \ -v intlayer_minio-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/minio-data.tar.gz /dataRestauração
Copiar o código para a área de transferência
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar xzf /backup/mongo-data.tar.gz -C /# Repita para redis-data e minio-dataUsando um proxy reverso (Nginx / Caddy)
Para implantações em produção, coloque um proxy reverso na frente dos containers do aplicativo e do backend, em vez de expô-los diretamente.
Exemplo de Nginx
Copiar o código para a área de transferência
server { listen 80; server_name cms.example.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:3100; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}Atualize as seguintes variáveis .env para corresponder aos seus domínios públicos:
Copiar o código para a área de transferência
BACKEND_URL=https://api.example.comAPP_URL=https://cms.example.comDOMAIN=example.comVITE_BACKEND_URL=https://api.example.comVITE_DOMAIN=example.comAs variáveisVITE_*são incorporadas à imagem do dashboard no momento da compilação. Se você as alterar após a imagem ser construída, precisará reconstruir a imagem doapp(docker compose build app) ou usar a injeção de configuração em tempo de execução.
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
docker compose psdocker compose logs mongodocker compose logs redisDashboard 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:
Copiar o código para a área de transferência
docker compose build appdocker compose up -d appE-mail não está sendo enviado
Por padrão, todos os e-mails de saída são capturados pelo Mailpit. Abra http://localhost:8025 para ver as mensagens enviadas. Para enviar e-mails reais, defina MAIL_PROVIDER=resend e RESEND_API_KEY=<sua-chave> no .env, então reinicie o backend:
Copiar o código para a área de transferência
docker compose restart backendBucket 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
docker compose run --rm minio-init