Solution One
Published: 28 February 2026
I was an Infrastructure Engineer in Solution One’s corporate team from June 2025 to February 2026, working across the MSP’s internal platforms and client infrastructure. Across the time there I led the observability migration from Graylog to Grafana, laid infrastructure-as-code foundations using Docker and Azure DevOps, built the tooling to migrate 150+ WordPress customer sites to a modern CloudLinux stack, and shipped a lot of automation.

Context
Solution One is a Mornington-based MSP with a broad small-to-medium business client portfolio, and a sponsor of the Technical Support to Schools Program (TSSP). I was employed through TSSP at Nossal High School for almost three years before moving across to the corporate team in June 2025. Most of the role was maintaining the infrastructure that Solution One and its clients depended on. Client-side work made up a smaller share, but I contributed significantly there too.
The environment had the usual shape of a provider at that size: Nutanix and Hyper-V virtualisation, cPanel hosting for customer websites, MikroTik networking with BGP upstream, Microsoft 365 and Entra ID for identity, and Veeam for backup.
The starting point
A lot of the environment had grown organically. Monitoring was Graylog-driven and mostly log-focused. Configuration for internal services lived on individual servers and in scattered scripts rather than in version control. The cPanel fleet still ran on CloudLinux 7, which was approaching end of life. Certificate rotation, backup validation, and device management were more ad-hoc than they should have been.
Observability: Graylog to Grafana
I led the migration from Graylog to a Grafana-based monitoring stack. The new stack runs Prometheus for metrics, Loki for logs, Alertmanager for routing, SNMP Exporter for network devices, and Alloy as the agent on Windows and Linux hosts. It covers both Solution One’s own platforms and the systems running client workloads.
The move gave us proactive alerting across network devices, Windows security events, and virtualisation. It also gave the team a single place to look when something went wrong.
Infrastructure as code
I laid down the infrastructure-as-code foundations for the new monitoring stack and a handful of supporting services. The pattern is Docker Compose on the stack side, git-tracked configuration on the repo side, and Azure DevOps pipeline agents handling the deployment. Changes go through PR review and get picked up automatically.
The payoff is that the monitoring stack can be redeployed from source, and configuration changes show up in git rather than being discovered during an incident.
CloudLinux 7 to 8 WordPress migration
The MSP’s customer WordPress hosting sat on two legacy cPanel servers running CloudLinux 7, which was reaching end of life. The two servers had drifted into incompatible configurations over the years, so the migration to new CloudLinux 8 servers couldn’t be a straight account move.
I wrote custom tooling to manage and migrate the 150+ customer sites off both legacy servers onto a new pair running CloudLinux 8 and the latest cPanel. The tooling handled inventory, pre-flight checks, account transfer, and post-migration validation. We cut over in waves with minimal downtime and no data loss.
Certificates and backups
Certificate management needed tightening across the board. I ran a bulk IIS SSL bindings update, rotated the wildcard across the systems that used it, and wrote certificate-expiry and certificate-usage checkers so we could see problems before they bit rather than after.
On the backup side, I built out backup procedures for network appliances and other devices that didn’t have them, and worked on Veeam coverage for the Linux servers.
NetBox
I deployed NetBox for the MSP and wrote the import and sync tools to seed it from the real state of the environment. That included Nutanix-to-NetBox and Hyper-V-to-NetBox importers in Python, the Nutanix one with a Textual-based interactive TUI, plus a collection of smaller NetBox-adjacent utilities. NetBox became the working source of truth for device records and IP space across Solution One’s infrastructure.
Scripting
A lot of the day-to-day got faster through small scripts. PowerShell for the Active Directory lifecycle, IIS SSL bindings, certificate checks, and the Datto RMM components. Python for the NetBox importers and Textual TUI, the WHM/cPanel management toolkit, and spam-filter verification. Bash for NetBox upgrades and the cPanel migration tooling.
The tooling wasn’t throwaway. The Textual TUI, the Python importers, and the PowerShell and Bash automation were substantial engineering in their own right. The role ended up being as much full-stack development as infrastructure engineering.
What stayed
All of the work I did was documented and built to be reproducible, so it’s easy for the next person to pick up where I left off.