I'm afraid after Heroku is not enough for you, if you don't use Kubernetes, you may end up inventing one.
If you need a bit more than Heroku:
1. Try Render[0].
2. If it is not enough, go with any Kubernetes you can afford, any docker registry and Pulumi or Pulumi+Helm[1]. For monitoring you can use either NewRelic[2] or Weave Cloud[3].
3. If you find big cloud kubernetes too expensive, need more bandwidth, or are just willing to try more affordable alternative new players, maybe Civo[4] fits the need.
In my case[5], since I've been bootstrapping for three years, a low-budget setup is key to keeping the lights on. Here are a few constraints I need to satisfy permanently-ish:
- My workload is bandwidth-intensive, so EC2 egress is too expensive for my case and my situation.
- It is not that cheap to run 12 micro-services in any of the existing Heroku-ish platforms, also private networking and routing of my app are a bit above "12 factor" at this point.
- I can't afford the same availability as everyone else: I'm in the business of supporting other apps but I don't want to pass down the cost of AWS, so I can't afford to be "down because everyone else in AWS is down".
- I don't know many things, and until I find PMF, keeping a low-cost setup gives me the resilience that I need as a founder.
Therefore to solve my problem I use an unholy combination of Ansible and Pulumi to manage 3 clusters of Kubernetes for both stateful and stateless workloads.
Why am I doing this to myself? I have mad respect for people who can run things in a VPS, use the hosting daily backup, and don't see the need to apply patches because they're behind Cloudflare; I just can't.
More details:
- Dedicated servers, 32GB RAM, 8 Cores, 500GB SSD(RAID 1), /29 ipv4, 30TB of Bandwidth for $70/mo each. XCP-NG[6] as hypervisor.
- To assign public IP to virtual machines, I run a tiny DHCP ubuntu VM managed by Ansible.
- On top of XCP virtual machines, k3s cluster managed with Ansible.
- To manage XCP and virtual machines, I use Xen-Orchestra[7] managed with Ansible.
- Pulumi+AWS ECR builds and pushes docker images, secret and configuration management using paraphrase secret provider.
- Hashicorp Vault backed by Postgres+AWS KMS managed by Ansible.
- Ansible+Pulumi+Helm to self-host Apache Pulsar with ZFS snapshots, a cron-job and rsync.net alerts.
WAL-G+AWS S3 to backup and archive Postgres/TimescaleDB managed with Ansible.
- All logs aggregated by Gelf and Fluentbit into a self-hosted instance of Seq[8] managed with Pulumi+Helm.
- Tailscale between all virtual machines
- DNSimple for domains
- Cloudflare for all things except the self-hosted docker registry.
- Github Actions for CI but not a hard a requirement, I can run ops in my local computer when Github Actions is down.
Cost: $210 /mo.
Estimated cost in AWS: $2,800 /mo
[0] https://render.com
[1] https://newrelic.com/platform
[2] https://www.weave.works/product/cloud/
[3] https://www.pulumi.com/docs/reference/pkg/kubernetes/helm/v3...
[4] https://www.civo.com/pricing
[5] https://widemesh.com
[6] https://xcp-ng.org
[7] https://xen-orchestra.com
[8] https://datalust.co/seq