@ehmatthes Docker swarm on whatever vps (loving the ARM vps from hetzner recently!); traefik and portainer for managing docker. External Managed Postgres. CloudFlare in front.
Django itself is usually granian with asgi, and a huey or django-tasks worker.
Deploy pushes container img to GitHub container registry (packages) and does an API call to the portainer stack to update to newly built image tag.
Traefik+swarm handles blue-green so no downtime, if it fails it rolls back to old container.