Lee Ashcroft

Linux systems and hosting engineer. Blackpool, works remotely.

cPanel/WHM · WordPress · PHP · mail and DNS · security

Pen sketch of Lee Ashcroft

Now

I look after servers for a living and have done, one way or another, since 2007. The last few years have been web hosting: two and a half years as the senior escalation engineer at Sub6 (Clook Internet), across 350+ cPanel/WHM servers and around 35,000 WordPress sites, then RedRaw Travel, where I built the dev, production and standby servers from bare Ubuntu installs and co-develop the Laravel platform that runs the business on them.

I'm the person the ticket comes to when first and second line are stuck. I like finding the actual cause, fixing it so it stays fixed, and writing down what happened so the next person doesn't have to work it out again.

350+cPanel/WHM servers supported at Sub6
35,000WordPress sites on them
8,200+commits on JM3 since March 2026
89 msp95 after the production move, from 146 ms

What I built and run at RedRaw

Cloudflare edge, TLS, WAF HTTPS, real IP restored prod1 · Hetzner nginx · PHP 8.3-FPM MariaDB 10.11 · Redis · systemd UFW · fail2ban · key-only SSH restic, encrypted Object storage DB every 15 min · full nightly dev1 · OVH CyberPanel · OpenLiteSpeed Forgejo git · runners git pull deploy script WireGuard tunnel GTID replication 0 s behind standby · second provider MariaDB replica · code + uploads promote in minutes, runbook written monitor every 5 min Pager SMS + email on lag or stale backup Blue dashed lines are the disaster-recovery paths. Everything inside a box runs as an unprivileged service user.
RedRaw's servers as I built them. Production on Hetzner sits behind Cloudflare; its database replicates to a standby on a second provider over WireGuard and is backed up with restic to object storage; the standby's monitor pages me by SMS and email; the dev server on OVH deploys to production over git.

Illustrative output from two scripts I wrote and run for RedRaw: the DR monitor that checks replication, tunnels and backups every five minutes, and the certificate watchdog that covers both certbot and acme.sh.

Four things from this year

A failed PCI scan, fixed properly

RedRaw takes card payments, so the production server gets a quarterly ASV scan from SecurityMetrics. In June 2026 it failed. The box had an sshd with a spoofed version banner, left by a previous admin, and the scanner wasn't fooled.

I built OpenSSH 10.3 from source with the PGP signature checked, installed it under /usr/local with a systemd drop-in so an apt upgrade couldn't quietly put the old one back, smoke-tested it on a spare port before swapping, removed the SHA-1 MACs, and closed the websocket and PowerDNS ports that had no business being public. It passed on the rescan. The version-string false positives it still throws get a written dispute each quarter.

A standby that pages me first

JM3 is the system the whole business runs on, so losing the database isn't an option. I built a warm standby on a second provider: MariaDB replicating over a WireGuard tunnel using GTIDs, code and uploads synced from production, and restic backups off-site (database every 15 minutes, everything nightly).

A monitor checks replication lag, whether the replica is actually applying anything, and whether the backups ran, and pages me by SMS and email when something's wrong. The failover, reseed and secrets-recovery procedures are written down so someone who isn't me could run them.

Moving production to a new host

In August 2026 we moved JM3 from a shared OVH VPS to a dedicated Hetzner server. I did the hosting comparison, wrote the build as repeatable Bash scripts (nginx, PHP 8.3-FPM, MariaDB, Redis, systemd units, Postfix with DKIM), rehearsed the data import on a day-old copy, and set a benchmark the new server had to beat before DNS moved. p95 response time went from 146 ms to 89 ms.

On the day I found Hetzner blocks outbound port 25 on new accounts, and moved mail to a relay before go-live rather than after.

The time I broke TLS

An OpenLiteSpeed upgrade on the dev server broke the SSL listener maps, so browsers on the office network got the wrong certificate and pages hung. I traced it with openssl s_client, fixed the maps, rolled back to the previous version and pinned it, and added the IPv6 QUIC firewall rule that was missing. Then I wrote it up.

I'd rather you knew I make mistakes and fix them than think I don't make any.

Where I've worked

2025 – now
Lead Systems & Infrastructure Engineer
RedRaw Travel, Blackpool (hybrid)
2022 – 2025
Senior Support Agent / Linux System Administrator
Sub6 Ltd (Clook Internet), fully remote
2014 – 2022
Police Constable, Specialist Operations Unit
Greater Manchester Police
2011 – 2014
2nd Line Network Support Engineer
Vodafone / Cable & Wireless Worldwide
2007 – 2011
2nd Line Support Engineer, then Support Operations Lead (Mumbai)
TalkTalk

Outside the day job

I run Blackpool Web Design, pay-monthly WordPress sites and reseller cPanel hosting for 13 local businesses, and co-founded Snap The Day, an event photo booth company whose booking platform, boothzen.com, I built and host on my own Ubuntu server (OpenLiteSpeed, PHP-FPM, MariaDB, Redis, Cloudflare).

Before all of this I spent eight years as a police officer in Manchester, including the Arena attack in 2017 and a deployment to the British Virgin Islands after Hurricanes Irma and Maria. It's where I learned to stay level when things are going wrong and to write things down properly.

Get in touch

Email is best: [email protected].