My blog architecture in 2026: infrastructure for one person

Ever since I was little, I have enjoyed experimenting with servers and infrastructure. This has led me to manage high-traffic websites in production, using tools such as Kubernetes on cloud providers like AWS. The potential is enormous, but so is the maintenance. If you are thinking about setting up something just for yourself, let me tell you how I manage my personal services.

A VPS at Hetzner

In the past, I have tried many tools, such as serverless services like Vercel or Cloudflare Pages. They are great, but personally I prefer the peace of mind of not getting any surprises on the bill if there is a traffic spike.

So, for some time now I have had a VPS at Hetzner that really requires very little maintenance and, these days, you can ask an AI agent such as Codex or Claude to review its security. Managing a VPS is not that difficult if you make sure to guarantee a minimum level of security.

From web traffic to the container

To serve web traffic, I use Cloudflare because I think its product is one of the most interesting out there. I like how they are evolving it, as well as the convenience it offers.

Inside the VPS, I have a reverse proxy (initially Nginx, now Caddy) that routes traffic to Docker containers managed by a small service.

The build runs with GitHub Actions, and I use the container registry (GHCR) to upload the image. Once it finishes, I send a webhook to the VPS, where the service I mentioned above is listening for it so it can rotate the image.

flowchart LR
    visitor[Visitor] --> cloudflare[Cloudflare]

    subgraph ci[CI]
        actions[GitHub Actions] --> ghcr[GHCR]
    end

    subgraph vps[VPS]
        caddy[Caddy] --> containers[Docker containers]
        service[Deployment service] --> containers
    end

    push[Git push] --> actions
    cloudflare --> caddy
    actions -->|Webhook| service
    ghcr --> service

I have to admit that CI is something I would like to rethink because it does not quite work for me, but at least I have a stable solution that I like, together with a dashboard where I can keep track of things whenever I do a git push.

The blog and the homelab

I built the blog with Astro because, in general, I find JavaScript (or TypeScript) very convenient for web development, but I did not want React, and honestly, I am very happy with it. For the little interactivity the website has, a bit of vanilla JavaScript is more than enough.

Finally, I use Tailscale to connect my homelab, my VPS, and my devices so that I can interact with them remotely, something we will look at in another post.

Conclusion

What I have realised over the years is that infra is not static, it is something that evolves with you over time, and that it is good to try things and experiment until you find what suits you best.