We use Terraform to manage our cloud infrastructure (things such as servers, S3 buckets, databases, managed kubernetes, etc.), following the concept of Infrastructure as Code.
Moreover, we use Terraform Cloud's free tier as the Terraform backend. Terraform uses a backend to store and manage its state. One could also use a local file or an S3 bucket to store the state, but Terraform Cloud has the additional advantage - besides having a free tier - of also including a CI/CD integration for GitHub, meaning that changes will be applied automatically as soon as we merge a PR affecting files in the /cloud-resources
directory.
Most cloud providers have their own terraform plugins, these are usually quite well-documented. Here is a list of providers used by us:
Provider (country) | Our usage | Docs |
---|---|---|
Hetzner (:de: Germany) | Kubernetes cluster and workers, via kube-hetzner ❤️ | docs |
DigitalOcean (:us: U.S.) | Domain(s) | docs |
MongoDB Atlas (:us: U.S.) | Document database(s) | docs |
Better Uptime (:us: U.S.) | Uptime monitoring (dashboard) | docs |
Furthermore, we make use of the GitHub and Flux providers to set up GitHub API tokens and deploy flux to our kubernetes cluster, respectively.
Some parts of our setup are not managed via terraform - sometimes because we just didn't have time/ambition to do so just yet, otherwise because some companies don't provide any terraform providers to manage their services.
- Grafana Cloud - storage and dashboards for logging, metrics, etc.
- DigitalOcean - S3 bucket(s)
Our expenses and donation incomes are documented here.