My journey in managing online services
- Related pages
As part of my journey to centralize and automate my computing life, one of my annoyances is having to configure services such as DNS or GitHub repositories every time I need to create or modify one.
I use Cloudflare to manage my domains and handle DNS configurations. Every time I got a new domain and/or DNS configuration, I had to go to Cloudflare and update the entries. Maybe a week later, I would realize I had made a mistake and had to track down what I had before to roll it back. Further, I use UptimeRobot to monitor some of my personal domains and get notified in case they become unavailable.
Over the years, GitHub and GitLab have become a little more complex. We now have CI/CD pipelines, deployment keys, secrets, branch rules, etc. With that, whenever I created a new repository, I had to configure all of that. Many of my repositories use similar configurations, so I had to replicate them across all of them.
Managing all of that was tedious. It was difficult to remember why I had created a dummy DNS entry in one of my Cloudflare zones, and it was tedious to configure a GitHub/GitLab repo.
For a couple of years now, I’ve been managing all of that with Terraform. It has reduced the risk of incorrect configurations, and I can look into the history to remember why I made a particular change and easily revert it.
I modularized my default GitHub/GitLab settings so that once I create a repository, it uses many of my default values unless specified otherwise. I can now copy and paste UptimeRobot configurations and change the domain to immediately start monitoring—no need to go to the dashboard, no need for mouse clicks 🤓.
Finally, I use Terraform Cloud to plan, apply, and store state, which makes it
particularly simple and cost-effective. Terraform Cloud is connected to my
GitHub repository, so on every push to main
, it will plan and apply any
changes.