Columbia Games / August 2026

When hosting started working against the release process: PogoZone → DigitalOcean

Moving from PogoZone to DigitalOcean was not a simple hosting-provider switch. WordPress, commerce, data, DNS and email dependencies had to be separated while keeping production controllable and recoverable throughout the migration.

3 min read
Columbia GamesDevOpsInfrastructure
DigitalOceanLinuxNginxDockermigrationproductionrollbackCI/CD
Columbia Games commerce system
The PogoZone → DigitalOcean migration was about creating a controllable production model, not merely changing servers.

Situation

The main problem with the old hosting was not that it suddenly became unusable. It was more subtle: years of accumulated operational state had become increasingly opaque. The public WordPress site, commerce system, PHP runtimes, cron jobs, files, TLS, DNS, backups and email were tied to the provider environment in several places. A release therefore depended not only on correct application code but also on whatever manual configuration, permissions or historical setting happened to keep that server alive. That was increasingly incompatible with the direction of Columbia Games development, where Git, CI/CD, Docker, smoke tests and reproducible releases were becoming the standard. Eventually the question stopped being whether we could stay a little longer and became how much risk was being generated by an environment we could not describe and verify with the same precision as the application itself.

Approach

I therefore started the migration with a dependency map, not a DNS change. I separated what belonged to the public WordPress site, what the commerce/CCM system depended on, where persistent data and uploads lived, which background jobs were running, which components sent email, and what the domain or old provider supplied implicitly. I then built the new DigitalOcean environment on Ubuntu with controlled Nginx and TLS configuration and Docker-based services where containerization made sense. The migration was deliberately layered: server and network foundations first, then application runtimes, WordPress and commerce components, data and files, and finally external integrations, DNS and email. Each major step had its own smoke verification instead of one large test at the end. Before public cutover, I tested the new environment directly so DNS was not part of the debugging problem. The old environment also remained available for rollback until the critical web and background processes had proven themselves together on the new server.

Outcome

The move to DigitalOcean changed more than the server; it changed the operating model. Production components became explicit: which service runs, why it exists, where its configuration lives, what must be checked after deployment and which layer owns a failure. That made later GitHub Actions and Make-based deployment, Docker rebuilds, PageSpeed and smoke checks, security hardening and recoverable releases much more meaningful. The most important result was not a lower response time or a new IP address. It was that infrastructure stopped behaving like a separate, partly unknown system. Code, runtime and release process finally became parts of the same engineered system.