As for updates, caddy v1 used to support pulling in from git, but I don't think that got ported to v2. So what I do is build+push a docker image, and have a cron job on my vps to pull+restart my website's container.
My preferences go Traefik > Caddy > Nginx, but traefik definitely has a bit of a learning curve.
https://github.com/andrewzah/andrewzah-com-source/blob/maste...
https://github.com/andrewzah/andrewzah.com-docker/tree/maste...