I guess everyone has their own solution to this. Here's mine:

- Write some static html and one stylesheet

- Pay DigitalOcean for the cheap plan

- Run nginx + letsencrypt

- Apply linux security updates promptly

- Occasionally pay to renew the domain

So yeah, that does take a little bit of (very simple) systems administration skills, and it's a recurring commitment. But there is no such thing as a successful but unmaintained web site. Even if you don't have to maintain the infrastructure, you have to maintain the content. So I don't mind the occasional maintenance tasks. They keep me in touch with linux systems administration in a good way.

It's cool to write your own web server software, I guess. But serving static html is pretty much a solved problem. I felt like the OP was inventing problems with it that don't really exist in practice.

I used to do something similar, but DigitalOcean App Platform's $0/month "starter" plan[0] hosts a static site for even less effort.

When I was self-hosting on a DigitalOcean droplet, I was using Caddy instead of nginx, which handled letsencrypt for me, so that was nice.

[0]: https://www.digitalocean.com/pricing/app-platform

I'm using Caddy with Docker labels auto-configuration.

It's somewhat PITA to configure if you don't need a public cert, eg something for testing or not having a public A/AAAA record, but otherwise the automagik just works.

The only negative moment is what Caddy container restarts when the dependent containers starts|restarts, so you briefly lose all connectivity to all sites behind Caddy.

[0] https://github.com/lucaslorentz/caddy-docker-proxy