Quickstart
This guide takes you from a fresh clone to a running deployment in five steps.
1. Install tools
make install
Ensure terraform, ansible, kamal, and op are also available on your PATH. See Setup for details.
2. Configure
Edit confit.toml with your project name, DNS zone, and vault names. Verify everything resolves:
make validate
3. Provision infrastructure
make infra ARGS="init"
make infra ARGS="plan"
make infra ARGS="apply"
This creates a DigitalOcean droplet, generates SSH keys stored in Terraform state, and creates Cloudflare DNS records for each service domain.
4. Bootstrap the server
make bootstrap
Ansible connects via the Terraform-generated SSH key and installs Docker, creates users, hardens SSH, and configures the firewall.
5. Deploy a service
make kamal ARGS="py setup"
make kamal ARGS="py deploy"
Kamal builds the Docker image from web/py/, pushes it to Docker Hub, and deploys it behind Traefik with automatic SSL.
Verify
make ssh USER=admin
curl https://py.example.com/_status/livez