With my own custom build, 😌, deployer that uses a build server with podman and then SystemD for managing the application runtime.
Typically test any changes on dev then build/deploy to my home build server. After that, deploy to production. It's cheap and easy to do. I should consider adding cheaper checks for duplicate deploys so that an app restart is the only thing that's needed if a build is already on target server.
Nevertheless, feels good. No Kubernetes, no docker containers, no bs complication. Scales as needed.
Kinda wish I built the build/deployer runtime in rust instead of nodejs. It's been easier to debug any issues with nodejs though.