Step 14 · Operations layer · Operations layer · Infra e deploy ENPT
Alembic Complete Visual Course

Infra e deploy

DevOps-as-code para a topologia de três planos: host, droplet e CI.

Read the plain version, or open the technical layer on any section.
1

Topologia de três planos


@alembic/infra codifica a topologia operacional do Alembic:

  • Host (Mac): modelos locais, agent-browser, cron jobs noturnos. Privado.
  • Droplet (DigitalOcean): terminação TLS pública, council-api, gateway. O único plano público.
  • CI (GitHub Actions): builds, tests, deploys. Stateless.

O pacote envia artefatos Terraform, Docker Compose, Caddy, launchd e GitHub Actions como diretórios irmãos, e expõe um validador de config tipado sem dependências externas.

Pense assim… um plano urbano: residencial (host), centro (droplet) e canteiro de obras (CI), cada um com suas próprias regras de zoneamento.

Under the hood

parseInfraConfig valida config de DigitalOcean e GitHub sem lançar. findExposureViolations impõe que apenas workloads droplet podem ser públicos. Helpers de provisionamento para Terraform, docker compose e launchd são stubs dry-run atualmente. Segredos são referenciados por nome de env-var, nunca inline.

2

In one picture


host (Mac)private · local models droplet (DO)public · TLS · api ci (GitHub)stateless · tests Secrets via env vars
Host é privado, droplet é o único plano público, CI é stateless.
3

In the code


# workflow de CI existente
.github/workflows/ci.yml

# diretórios de artefatos de infra
packages/infra/terraform
packages/infra/docker
packages/infra/caddy
packages/infra/host

Implementation notes

O workflow de CI instala pnpm, executa typecheck/build/test, roda alembic doctor --json e executa impeccable detect como design gate. Helpers de provisionamento de infra são TODOs aguardando credenciais reais e lógica de apply.

4

Try it


Leia packages/infra/src/topology.ts e liste os workloads padrão. Em qual plano cada um está?

Design: Por que o plano host nunca deve ser público?
5

Quick check


Qual plano pode ser público?