The Challenge

Intellinez hosted its websites, applications and automated jobs on Windows Server 2016 and Ubuntu 20.04 LTS. Both platforms were aging, and putting off the OS upgrade carried a growing cost. Windows Server 2016 is heading toward the end of Microsoft’s extended support in January 2027, while Ubuntu 20.04 LTS has already moved past the standard security maintenance window listed in the Ubuntu release cycle.

Staying on older operating systems, instead of completing an OS upgrade, created recurring problems: rising security and compliance risk, compatibility gaps with newer applications and software packages, growing reliance on legacy configurations, and a server estate that was harder to keep consistent and supportable. The platform also had to serve four separate environments (DEV, QA, UAT and PROD), spread workloads across more than one server, and keep traffic management and availability under control. Any OS upgrade had to avoid disrupting the websites and scheduled jobs the business relied on every day.

The Approach

The objective was to treat the OS upgrade as an end-to-end infrastructure modernization project, not a simple version bump. Windows Server 2016 would move to Windows Server 2019 and Ubuntu 20.04 LTS to Ubuntu 22.04 LTS, and the websites, applications and automated jobs affected by the OS upgrade would be migrated onto the upgraded servers, environment by environment.

Every stage of the Windows and Linux OS upgrade followed the same sequence: assess what exists, upgrade the operating system, rebuild and validate the hosting configuration, migrate the workloads, and test before moving on. Keeping DEV, QA, UAT and PROD strictly separate meant each environment could be proven before it was trusted, and it kept every OS upgrade step testable and backed by recovery planning. The goal of the OS upgrade was a more secure, stable, scalable and maintainable platform, with minimal disruption to the business.

Implementing the Windows and Linux OS Upgrade

The Windows and Linux OS upgrade ran in nine controlled stages, from infrastructure assessment through to production validation. Each stage of the OS upgrade had its own checks before the next one began. The diagram below shows how the stages fit together.

Nine-stage Windows and Linux OS upgrade flow from infrastructure assessment to production validation

Assessing Dependencies Before the OS Upgrade

Before any server was touched, the team inventoried every server and its operating system version, along with the websites and applications it hosted. It also recorded application dependencies and runtime requirements, IIS configurations and application pools, domains, bindings and SSL/TLS certificates, firewall and network settings, scheduled tasks, monitoring and security agents, database connectivity, file permissions, and backup and recovery requirements. Every OS upgrade decision started from this inventory. The assessment shaped the OS upgrade plan and reduced the risk of OS incompatibility, configuration loss and application failure, while backups and maintenance windows kept rollback and downtime risk under control.

Windows Server 2016 to 2019: OS Upgrade and IIS Migration

On the Windows side, the OS upgrade from Windows Server 2016 to Windows Server 2019 was followed by validation of server roles and features, IIS, application pools, Windows services and scheduled tasks, plus network, firewall, file permission, monitoring and security settings. The team then migrated the websites to their designated servers: 20 websites to a dedicated Development application server, 10 sites to each of the two QA/UAT application servers, and 5 sites to each of the two Production application servers.

IIS websites, application pools, domain and HTTPS bindings, SSL/TLS certificates, physical path mappings, permissions and web.config settings were recreated and validated with environment-specific domains, so no DEV, QA, UAT or PROD site was mixed with another during the OS upgrade. It is the same discipline behind our web applications work.

Ubuntu 20.04 to 22.04: Linux OS Upgrade and Application Migration

The Linux OS upgrade moved Ubuntu 20.04 LTS to Ubuntu 22.04 LTS, with checks on SSH access, network configuration, installed packages, web and application services, systemd services, cron jobs, file permissions, SSL certificates and monitoring agents. Twenty WordPress websites were then migrated to the Development Linux server and twenty to the Production Linux server, the kind of site covered by our marketing websites services.

WordPress and CodeIgniter applications, two sites per environment, were hosted on a shared DEV/QA/UAT Linux server, with a separate Production Linux server so production workloads stayed apart from non-production ones throughout the OS upgrade.

Load Balancing and Automated Job Separation

Load balancers were configured for QA/UAT and Production so traffic is distributed across the parallel application servers, reducing dependence on any single server and leaving room to add capacity later. Automated jobs were migrated and configured separately: a dedicated automated-job server for Development, separate QA and UAT job configurations, and a dedicated automated-job server for Production. This kept background processing apart from the primary web workloads and made the OS upgrade easier to validate one workload at a time.

Validating Every Environment After the OS Upgrade

Finishing the OS upgrade was not the end of the work. Each environment was tested at four levels. Server checks covered accessibility, CPU, memory, disk, network, DNS, firewall, services and logs. Application checks covered website access, login, APIs, database connectivity, file processing, background jobs, scheduled tasks and third-party integrations. Hosting checks covered IIS site configuration, application pools, bindings, SSL certificates, web.config, permissions and paths. Load balancer checks covered traffic distribution, backend server health, failover behavior and domain accessibility. A final production validation confirmed that live applications were accessible and working correctly after the OS upgrade.

The Results

Intellinez completed the Windows and Linux OS upgrade for all targeted servers: Windows Server 2016 now runs as Windows Server 2019, and Ubuntu 20.04 LTS as Ubuntu 22.04 LTS. Websites, applications and automated jobs were migrated across DEV, QA, UAT and PROD with each environment kept separate, including 40 WordPress websites across the Linux Development and Production servers and 8 additional WordPress and CodeIgniter site instances.

The OS upgrade delivers a stronger security baseline with less reliance on aging OS components, better compatibility with modern applications, libraries and security tools, and better availability through load balancing across parallel application servers. Standardized configurations and clear environment separation make administration simpler after the OS upgrade, and the distributed layout gives the infrastructure room to scale. It builds on the same modernization thinking as our SDDC infrastructure migration and PHP and WordPress upgrade projects.

This is what a well-planned OS upgrade delivers in practice: a more stable, secure and maintainable foundation for future application upgrades, monitoring improvements and expansion, while maintaining application continuity. Explore more infrastructure and engineering projects from our team.