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-composeencapsula isso com um.env.exampledocumentado.)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 combun 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:3000O 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ável | Padrão | Descrição |
|---|---|---|
BETTER_AUTH_SECRET | local-dev-better-auth-secret-change-me (inseguro) | Secret de autenticação — sempre defina um de verdade. Gere com openssl rand -base64 32 |
ENCRYPTION_KEY | fallback 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_REPOSITORY | ghcr.io/decocms/studio/studio | Repositório da imagem |
IMAGE_TAG | latest | Tag da imagem |
PORT | 3000 | Porta exposta no host |
BASE_URL / BETTER_AUTH_URL | http://localhost:3000 | URLs públicas da aplicação |
DATABASE_URL | veja abaixo | Connection string do PostgreSQL |
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB | studio / studio / studio | Credenciais 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_namedocker compose up -dlocalhost 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 decocmsAtualizar a imagem
docker compose pull
docker compose up -dFixe 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.sqlResetar todos os dados
docker compose down -v # remove os volumes nomeados (studio-data, postgres-data)
docker compose -f docker-compose.postgres.yml up -ddocker 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_SECRETeENCRYPTION_KEY(openssl rand -base64 32) e umPOSTGRES_PASSWORDde 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
.envou no arquivo do compose.