A pasta /opt/server/infra/ contém todos os serviços compartilhados do servidor. Cada subpasta é um serviço independente.

Serviços ativos

Nginx Proxy Manager

Reverse proxy com UI. Recebe HTTP/HTTPS da Internet e roteia para os serviços internos. Cuida de TLS via Let’s Encrypt.

Postgres 16

Banco relacional compartilhado. Cada projeto ganha seu próprio DB e usuário via create-db.sh.

Redis 7

Cache e pub/sub. Protegido por senha, persistência via AOF.

n8n

Plataforma de automação (workflows tipo Zapier self-hosted). Usa o Postgres compartilhado.

Anatomia de cada pasta de serviço

Todas seguem o mesmo padrão:
infra/<servico>/
├── docker-compose.yml   # como subir
├── .env.example         # variáveis necessárias (placeholders)
├── .env                 # variáveis reais (gerado pelo bootstrap, não versionado)
└── data/                # dados persistentes (criado no primeiro `up`)
Postgres tem um extra:
infra/postgres/
├── create-db.sh         # script para provisionar DB de novos projetos
└── secrets/             # credenciais de cada DB criado (modo 600)

Arquivos top-level da infra

infra/
├── .env.example         # vars compartilhadas (TZ, DOMAIN_BASE)
└── bootstrap.sh         # cria rede server_net + gera segredos
Veja Bootstrap para detalhes do que esse script faz.

O que NÃO está na infra

  • Aplicações de projeto: ficam em /opt/server/projetos/<nome>/, com seu próprio compose.
  • Imagens base: usamos imagens oficiais (postgres:16-alpine, redis:7-alpine, etc.). Sem Dockerfile customizado por enquanto.