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

What’s next

  • Terraform — understand the infrastructure modules
  • Deploying — add and configure new services