Initally some local site, then I transferred to GoDaddy, then to OVH (since GD is shit). One is still at Cloudflare (tried to move there, but they don’t support al TLDs that I use, like “.eu”).
For DNS I use Cloudflare. They provide a layer of privacy, i.e. your server IPs don’t get exposed directly.
Have a look at GitLab.
I’m doing the same thing you are doing, but automatically. I have a repo per app and a few GitLab runners connected on my Raspis/servers. Everytime I push a change, the shell runner runs the commands configured for the pipeline. I don’t have to lift a finger after changes.