October 26, 2026 · StackPioneer
Adding a second web server to a legacy PHP app is mostly not a load-balancer problem. Sessions on local disk, uploads in the document root, cron running twice, and caches that only clear on one node — here is how to find each one and fix it without a rewrite.
Read moreOctober 19, 2026 · StackPioneer Engineering
do-release-upgrade moves your OS and your PHP, MySQL, Apache and OpenSSL versions in one step. Here is how to split that into separately reversible changes, what each hop actually ships, and when to build a new box instead.
Read moreOctober 12, 2026 · StackPioneer
Most legacy PHP apps have no usable staging environment, so upgrades get rehearsed in production. Here is a repeatable way to build one from a restored backup: scripted anonymization of the MySQL dump, neutered outbound mail and payment keys, and a refresh job that runs on a schedule.
Read moreOctober 5, 2026 · StackPioneer
The maximum TLS certificate lifetime dropped to 200 days in March 2026, 100 days follows in 2027 and 47 days in 2029. Here is how to get an older Apache server off calendar reminders and onto ACME renewal that fails loudly.
Read moreSeptember 28, 2026 · StackPioneer
Automated traffic now outnumbers humans on a lot of older PHP sites. Here is how to measure it from Apache logs, separate the crawlers you want from the ones you do not, and cut the load with rate limits, caching, and a few Apache rules — before buying a bigger server.
Read moreSeptember 21, 2026 · StackPioneer
You do not need a rewrite to replace a legacy PHP application. One Apache virtual host, a shared session store, and a route-by-route cutover let new code run beside the old app in production — and let you delete the old route once the new one has earned it.
Read moreSeptember 21, 2026 · StackPioneer
Before you change a single PHP version on a server, get a file-by-file list of what will break. PHPCompatibility scans for version incompatibilities, Rector fixes the mechanical ones, and a characterization test suite tells you whether the fixes held.
Read moreSeptember 21, 2026 · StackPioneer
Deploying by rsync or FTP into the live document root means every visitor during the copy sees a half-updated application. Symlinked release directories, a deliberate OPcache reset, and migrations split from code deploys fix that in an afternoon — no pipeline rewrite required.
Read moreSeptember 18, 2026 · StackPioneer
A lift-and-shift plan for a production PHP/MySQL app: inventory the server you actually have, EC2 plus RDS instead of a rewrite, uploads off the local disk, a replica-based database cutover, and a rollback path that stays warm for a week.
Read moreSeptember 16, 2026 · StackPioneer
ALTER TABLE on a large InnoDB table is the migration that takes the site down at 2 a.m. Here is how to tell which changes are instant in MySQL 8, when to reach for pt-online-schema-change or gh-ost, and how to rehearse either one.
Read moreSeptember 15, 2026 · StackPioneer
TLS 1.0/1.1 off, an honest cipher list, HSTS you can roll back, security headers that do not break the admin, mod_status and .git left exposed, and renewals that fail loudly instead of silently.
Read moreSeptember 14, 2026
The 5.x-to-8.0 jump gets all the attention, but the minor-version treadmill is where most estates are stuck now. Security support for PHP 8.1 ended on 31 December 2025. Here is what actually breaks between 8.1 and 8.4, and how to roll it out with a warm rollback.
Read moreSeptember 14, 2026 · StackPioneer
`composer audit` takes seconds and usually produces an alarming list. Here is how to read it honestly, separate reachable CVEs from noise, handle abandoned and vendored code, and get the count to zero without a rewrite.
Read moreSeptember 14, 2026 · StackPioneer
CentOS 7 lost updates in June 2024. Here is the honest comparison of in-place upgrade versus build-new-and-cut-over, plus the four things that actually break on EL9: OpenSSL 3 crypto policies, MariaDB-by-default, SELinux, and the PHP that came from SCL.
Read moreSeptember 11, 2026
MySQL 8.0 reaches end of life in April 2026 and 8.4 LTS is the successor. What actually breaks — mysql_native_password, removed replication options, retired variables — and how to rehearse the upgrade on a replica.
Read moreSeptember 10, 2026
PHP 8.1 and MySQL 5.7 are out of security support, and CentOS 7 and Ubuntu 20.04 followed them. Here are the commands that turn "we think we're patched" into a dated inventory with a remediation order.
Read moreAugust 11, 2026
pm.max_children from measured worker memory, timeouts that fail cleanly, slowlogs that name the bottleneck, and a load test that maps your actual ceiling — tuning from numbers, not blog-post folklore.
Read moreJuly 21, 2026
A backup you have never restored is a hope. A monthly drill — restore, verify, boot the app, write it down — catches missing routines, charset mangling, and silent cron failures before the incident does.
Read moreMay 19, 2026
The 8.0 upgrade is one-way, so the checklist matters: the upgrade checker, the vanished query cache, collation strategy, auth-plugin compatibility, and a rehearsal that doubles as a backup test.
Read more