Dependency-ordered modernization of a learning platform and an institutional repository, cut over with no downtime.
Context
A federal university runs two systems everybody touches: the learning platform every course lives in, and the institutional repository holding what the university publishes. Both were years behind, on an operating system that had reached end of life underneath them.
End of life set the clock. Coursework, grades and academic records were sitting on a platform that would receive no further security patches. Closing that gap meant two moves rather than one: the learning platform from Moodle 3.1.x to 4.5 LTS, and the operating system from CentOS 7 to Rocky 9.
The repository's move from DSpace 5 to 7 was a rearchitecture as well as a version step. DSpace 7 replaced the frontend outright, so that half of the work was building onto Angular instead of carrying forward what was there.
Constraints
Rocky 9 ships a PHP the live learning platform could not run. The obvious order, moving the operating system and then bringing the application up to meet it, was not available.
No maintenance window anyone would accept. A university does not have a quiet week. Coursework, grades and academic records are consulted continuously, including by people who are neither on campus nor on its timetable.
The plugin that had issued historical course certificates no longer existed, and no supported path existed for the records it had produced.
Each step was one-way in practice. Rolling a live academic system back after a version migration means reconciling everything written since the cutover, and that is a data problem of its own.
The application steps forward on the old operating system, because the new one cannot run the version that was live. Only once it has can the platform move.
Decisions
Move the application first, through intermediate versions, then the operating system
Instead of
Move the operating system first, the conventional order
Why
Rocky 9's PHP could not run the version that was live, so the learning platform had to be stepped forward to 4.5 LTS on CentOS 7 before the operating system underneath it could change at all. Moodle does not support crossing that distance in a single move, so the path ran through intermediate versions on the old OS. That was the least comfortable place to do it and the only place it could be done.
What it cost
Several intermediate migrations, each with its own schema changes and its own plugin compatibility to establish, all performed on an operating system already past end of life. The work got slower before the security position got better.
A production-clone environment for the whole path
Instead of
A smaller representative staging environment
Why
The sequence had too many steps to trust on anything but real data at real shape. Plugin behavior and content edge cases accumulate over years, and a reduced dataset leaves out exactly those. Every version step ran on the clone before it ran anywhere else, which turned the cutover into a rehearsal.
What it cost
A second full environment to build, and then to keep current while the live system carried on changing underneath it.
Rebuild certificate issuance and migrate the history into it
Instead of
Leave historical certificates behind in the old system
Why
The original plugin was gone. I stood up its replacement, rebuilt the templates against it, and carried the historical course certificates across by hand. A certificate a student earned stays the institution's record whether or not the plugin that issued it is still maintained.
What it cost
Hand migration with no tooling to inherit, and a verification pass that was equally manual.
What I owned
I coordinated the modernization of both systems: the sequencing that made it possible, the production-clone environment it was rehearsed in, the repository's frontend rearchitecture onto Angular, and the certificate rescue. Standing up the replacement plugin and moving the certificate history into it was mine directly.
Outcome
Both cutovers ran with no downtime, on systems the whole university depends on.
No student lost an academic record. The historical certificates came through the plugin's disappearance intact, and they are issued now by something that is still maintained.
Application and operating system are on supported versions and back in step with each other, so the next move is an ordinary one.