2 min read
This website (trettstadt.de)
flowchart LR
    gh[GitHub Actions\nCI/CD Pipeline] -->|docker push| ghcr[GHCR\nContainer Registry]
    ghcr -->|docker compose pull| hetzner[Hetzner CX23\nnbg1, Debian 13]
    pulumi[Pulumi IaC\nJava] -.->|provisions| hetzner
    hetzner --> caddy[Caddy\nTLS / Let's Encrypt]
    caddy -->|reverse proxy| astro[Astro\nNginx / Static Site]
    user[Visitor] -->|HTTPS :443| caddy

The goal was to build a fast and simple website that can basically deployed anywhere. I chose Astro because it builds a static site and there is no need for a database. Also all changes are versioned in Git. Pushing to the repo builds a Docker image and triggers an update on the server. On the server we run the website container and a Caddy container as proxy that also handles TLS including getting certificates from Let’s Encrypt. The server is a small Hetzner cloud server located in Germany.