Ir para o conteúdo
decodecodeveloper docs
Studio → Deploy e hospedagem própria do Studio → Deploy

Docker Compose

Faça deploy do deco Studio localmente usando Docker Compose para testes e desenvolvimento

Este guia cobre como rodar o deco Studio com Docker Compose para testes e avaliação self-hosted.

Código-fonte (arquivos de compose): decocms/studio → deploy/docker-compose

Visão geral

O Studio usa PostgreSQL como banco de dados. O repositório inclui três arquivos de compose em deploy/docker-compose/ — escolha pelo caso de uso:

  • docker-compose.postgres.yml — self-host, tudo-em-um: Studio (imagem publicada) mais a stack completa embutida (PostgreSQL + NATS + MinIO), tudo ligado para que o app não provisione nada sozinho. É o ponto de partida recomendado. (selfhost/examples/docker-compose encapsula isso com um .env.example documentado.)
  • docker-compose.yml — self-host, com seu próprio banco: apenas o Studio (imagem publicada), esperando um PostgreSQL fornecido por você.
  • docker-compose.dev.yml — desenvolvimento: só as dependências (PostgreSQL + um cluster NATS de 3 nós, topologia prod-like); você roda os apps de API e web do código-fonte com bun run dev:servers. Sem sandbox aqui — isso precisa de Kubernetes (veja o loop dev-hybrid).

Os arquivos de self-host usam um volume Docker para persistência e um health check automático em /health.

Pré-requisitos

  • Docker 20.10+
  • Docker Compose 2.0+
  • Um banco PostgreSQL — embutido (via docker-compose.postgres.yml) ou o seu próprio

Início rápido (PostgreSQL embutido)

# 1. Clone o repositório e entre no diretório do compose
git clone https://github.com/decocms/studio.git
cd studio/deploy/docker-compose
 
# 2. Crie um .env com um auth secret, uma chave do vault e credenciais do Postgres
cat > .env << EOF
BETTER_AUTH_SECRET=$(openssl rand -base64 32)
ENCRYPTION_KEY=$(openssl rand -base64 32)
POSTGRES_USER=studio_user
POSTGRES_PASSWORD=$(openssl rand -base64 24)
POSTGRES_DB=studio_db
EOF
 
# 3. Inicie o Studio + PostgreSQL
docker compose -f docker-compose.postgres.yml up -d
 
# 4. Acesse
open http://localhost:3000

O arquivo docker-compose.postgres.yml monta o DATABASE_URL automaticamente a partir das variáveis POSTGRES_*, usando o serviço postgres como host.

BETTER_AUTH_SECRET e ENCRYPTION_KEY caem para valores padrão inseguros (só para dev) se não forem definidos — sempre defina valores de verdade para qualquer ambiente compartilhado. As variáveis POSTGRES_* também têm valores padrão, mas sempre defina uma senha de verdade.

Variáveis de ambiente

Defina estas no .env ao lado do arquivo de compose:

VariávelPadrãoDescrição
BETTER_AUTH_SECRETlocal-dev-better-auth-secret-change-me (inseguro)Secret de autenticação — sempre defina um de verdade. Gere com openssl rand -base64 32
ENCRYPTION_KEYfallback determinístico só para dev (inseguro)Chave do vault de credenciais para criptografar secrets/tokens armazenados — precisa se manter estável entre reinicializações. Sempre defina um valor de verdade para qualquer ambiente compartilhado.
IMAGE_REPOSITORYghcr.io/decocms/studio/studioRepositório da imagem
IMAGE_TAGlatestTag da imagem
PORT3000Porta exposta no host
BASE_URL / BETTER_AUTH_URLhttp://localhost:3000URLs públicas da aplicação
DATABASE_URLveja abaixoConnection string do PostgreSQL
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DBstudio / studio / studioCredenciais do Postgres embutido (apenas no compose postgres)

O container roda como usuário 1001:1001 e persiste dados no volume studio-data; o Postgres embutido persiste em postgres-data.

Usando seu próprio PostgreSQL

Para apontar o Studio para um banco externo, use o docker-compose.yml base e defina DATABASE_URL:

# .env
BETTER_AUTH_SECRET=your_generated_secret_here
DATABASE_URL=postgresql://user:password@host:5432/database_name
docker compose up -d

localhost dentro do container se refere ao próprio container. Para alcançar um PostgreSQL rodando na sua máquina, use host.docker.internal (Docker Desktop) ou o IP da sua máquina na rede local. Com o docker-compose.postgres.yml embutido, o host é o nome do serviço postgres.

Opções de autenticação

Por padrão, a stack embutida usa autenticação por email/senha. Para habilitar login social, descomente e defina as variáveis dos provedores no bloco environment do compose (ou no seu .env):

AUTH_GOOGLE_CLIENT_ID=...
AUTH_GOOGLE_CLIENT_SECRET=...
AUTH_GITHUB_CLIENT_ID=...
AUTH_GITHUB_CLIENT_SECRET=...

Para configurações mais ricas (SSO de deployment inteiro, provedores de email, magic links), defina as variáveis AUTH_* correspondentes no bloco environment do compose — não há arquivo de configuração para montar. Veja Autenticação para a referência completa.

Operações

Logs e status

# Acompanhe os logs da aplicação
docker compose logs -f studio
 
# Status do container
docker compose ps
 
# Uso de recursos (o nome do container é "decocms")
docker stats decocms

Atualizar a imagem

docker compose pull
docker compose up -d

Fixe uma versão definindo IMAGE_TAG no .env antes do pull.

Backup e restauração (PostgreSQL)

# Backup (serviço Postgres embutido)
docker compose exec postgres pg_dump -U studio_user studio_db > backup-$(date +%Y%m%d).sql
 
# Restauração
docker compose exec -T postgres psql -U studio_user studio_db < backup-20240101.sql

Resetar todos os dados

docker compose down -v   # remove os volumes nomeados (studio-data, postgres-data)
docker compose -f docker-compose.postgres.yml up -d

docker compose down -v apaga os volumes permanentemente. Faça backup primeiro se os dados importam. Um docker compose down simples (sem -v) mantém seus volumes.

Segurança

  • Sempre gere valores fortes para BETTER_AUTH_SECRET e ENCRYPTION_KEY (openssl rand -base64 32) e um POSTGRES_PASSWORD de verdade.
  • Não faça commit do .env (echo ".env" >> .gitignore; chmod 600 .env).
  • Não faça commit de secrets (client secrets, API keys) no .env ou no arquivo do compose.