Início rápido
A auto-hospedagem roda a partir do pacote de implantação — os arquivos compose, o Helm chart e o
modelo de .env. Solicite-o em help@seeyu.ai e execute os comandos
abaixo na raiz do pacote descompactado.
cat > .env << EOF
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
INTERNAL_API_SECRET=$(openssl rand -hex 32)
CRON_SECRET=$(openssl rand -hex 32)
EOF
docker compose -f docker-compose.prod.yml up -dConfiguração de produção
1. Configurar o ambiente
cat > .env << EOF
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
INTERNAL_API_SECRET=$(openssl rand -hex 32)
API_ENCRYPTION_KEY=$(openssl rand -hex 32)
CRON_SECRET=$(openssl rand -hex 32)
# Your public origin. BETTER_AUTH_URL is derived from this automatically.
NEXT_PUBLIC_APP_URL=https://studio.yourdomain.com
# Database credentials. DATABASE_URL is composed from these by the compose file.
POSTGRES_USER=postgres
POSTGRES_PASSWORD=$(openssl rand -hex 24)
POSTGRES_DB=studio
EOFNão defina DATABASE_URL nem BETTER_AUTH_URL no .env — o docker-compose.prod.yml compõe as duas na definição do serviço, e um valor colocado aqui é ignorado. Altere POSTGRES_* e NEXT_PUBLIC_APP_URL no lugar disso.
Guarde a ENCRYPTION_KEY e a API_ENCRYPTION_KEY em algum lugar fora deste servidor. A ENCRYPTION_KEY criptografa as variáveis de ambiente do workspace e pessoais, as chaves de API de provedores armazenadas, as credenciais OAuth de MCP e os secrets de deploy e de chat; a API_ENCRYPTION_KEY criptografa as chaves de API do Studio geradas pelos usuários. Nenhuma das duas pode ser regerada — restaurar o banco de dados com uma chave diferente deixa os dados que ela protegia permanentemente ilegíveis.
O arquivo compose se recusa a iniciar se BETTER_AUTH_SECRET, ENCRYPTION_KEY ou INTERNAL_API_SECRET estiver faltando, em vez de subir com valores vazios. O CRON_SECRET é tratado com mais leveza: sem ele, o serviço cron imprime o que definir e encerra, deixando o resto da stack rodando — assim, atualizar a partir de um arquivo compose anterior ao agendador continua funcionando.
As imagens acompanham a latest, a menos que você as fixe. Para produção, veja Upgrades.
2. Iniciar os serviços
docker compose -f docker-compose.prod.yml up -dSeis serviços sobem:
| Serviço | Porta | Finalidade |
|---|---|---|
studio | 3000 | Aplicação principal (limite de 8 GB de memória) |
realtime | 3002 | Servidor WebSocket (limite de 1 GB de memória) |
db | 5432 | PostgreSQL 17 com pgvector |
redis | interna | Pub/sub e cache compartilhado — não publicado no host |
cron | — | Roda os jobs em segundo plano conforme o agendamento |
migrations | — | Aplica as migrações de schema uma vez e encerra |
Confirme que os cinco serviços de longa duração estão em pé e que o migrations encerrou sem erro (é um job de execução única, sem healthcheck):
docker compose -f docker-compose.prod.yml ps3. Colocar atrás de TLS
O Caddy é a opção de menor esforço — ele obtém e renova certificados automaticamente.
studio.yourdomain.com {
request_body {
max_size 250MB
}
handle /socket.io/* {
reverse_proxy localhost:3002
}
reverse_proxy localhost:3000 {
flush_interval -1
}
}Três pontos dessa configuração são específicos do Studio e fáceis de errar: /socket.io precisa alcançar o serviço realtime na 3002, o flush_interval -1 impede que o Caddy acumule a saída transmitida do agente em um único bloco atrasado, e o max_size precisa ficar acima do limite de 220 MB do endpoint de chat.
Para nginx, Traefik ou um load balancer de nuvem — e para o timeout de websocket do GKE — veja Rede.
Ollama
# With GPU
docker compose -f docker-compose.ollama.yml --profile gpu --profile setup up -d
# CPU only
docker compose -f docker-compose.ollama.yml --profile cpu --profile setup up -dBaixe modelos adicionais — o nome do serviço muda conforme o profile:
# GPU profile
docker compose -f docker-compose.ollama.yml exec ollama ollama pull llama3.2
# CPU profile
docker compose -f docker-compose.ollama.yml exec ollama-cpu ollama pull llama3.2Ollama externo
Se o Ollama roda na sua máquina host (e não no Docker):
# macOS/Windows
OLLAMA_URL=http://host.docker.internal:11434 docker compose -f docker-compose.prod.yml up -d
# Linux - use your host IP
OLLAMA_URL=http://192.168.1.100:11434 docker compose -f docker-compose.prod.yml up -dDentro do Docker, localhost se refere ao contêiner, não ao seu host. Use
host.docker.internal ou o IP do host.
Comandos
# Did migrations succeed?
docker compose -f docker-compose.prod.yml logs migrations
# Is the scheduler firing?
docker compose -f docker-compose.prod.yml logs -f cron
# Upgrade: bump STUDIO_VERSION in .env when pinned, then
bun run studio update