Why an air-gapped LMS is a different build from a connected one
On a disconnected network, your training function cannot reach a vendor repository, a SaaS identity provider or a public video host. Every package, course, plugin and identity source has to arrive through a controlled transfer that your security team approves, and the LMS has to keep working once it is inside. Moodle is the most-documented fit for offline work, since it is self-hosted under GPL-3.0 with no license fee and its core ships local authentication options such as manual accounts, LDAP and external database sources. Open edX and Canvas can also be self-hosted, but whether either suits your environment depends on the offline installation path, the dependency set and the support you can get for disconnected operation, so confirm those with the vendor and your own architects before you commit.
The hard parts are not the initial install. They are repeatable offline installation, plugin and security updates that arrive as reviewed bundles, SCORM packages that make no external calls when a learner launches them, local video streaming with no dependence on a public player or CDN, and identity that resolves against directories inside the boundary. Each of these needs a named owner and a documented transfer procedure. Moodle 5.1 also changed the web server document root to a public directory, so your offline build and your transfer manifest must reflect the exact release line you carry across. The control logic is similar to what utilities apply under NERC CIP-013-2, which expects verified software integrity and authenticity for vendor software and patches before they are used.
Do not assume air-gap support. Several vendors reserve disconnected deployment for paid editions, so the licensing question comes before the architecture question. Ask each candidate platform in writing whether offline installation, offline updates and offline licensing are included in the edition you would deploy, what the update bundle contains, and who supports it when a transfer fails. Confirm the plugin licenses too, because a plugin that phones home for a license check or loads assets from an external domain will break the boundary even when the core platform is clean.
Which requirements shape an air-gapped LMS build
This table maps each requirement that applies to an air-gapped LMS to its source, what it asks for, and what it means for the build. Read it as a checklist of decisions to make before procurement, since several rows (remote access, software integrity, and PHP and database versions) affect hosting and the upgrade path from day one.
| Requirement | What it asks for | What it means for the build |
|---|---|---|
| NERC CIP-005-7 remote access | Interactive remote access to high and medium impact systems passes through an Intermediate System with encryption and multi-factor authentication, and active vendor sessions can be detected and disabled | Place the LMS behind a controlled access point, route vendor support sessions through it, and confirm with your compliance team whether the LMS falls in scope at all |
| NERC CIP-013-2 supply chain | Procurement processes address verification of software integrity and authenticity for vendor software and patches | Verify checksums and signatures for every Moodle, plugin and OS package before it crosses the boundary, and keep a record of each transfer |
| Offline package mirror | Operating system packages, PHP extensions, Composer dependencies and container images must be available without internet access | Build an internal package mirror and image registry, and pin versions so rebuilds on the disconnected side match the tested release |
| Moodle 5.3 runtime versions | 64-bit PHP 8.3 or later (8.4 supported), PostgreSQL 17, MySQL 8.4, MariaDB 11.4 or SQL Server 2019 or later | Confirm which database and PHP builds your mirror carries before choosing the target release, because a missing dependency blocks the upgrade |
| Moodle 5.1 document root | From Moodle 5.1 the web server document root points to the /public directory | Set the web server configuration in the offline image and test it, since a wrong document root shows directory listings or errors |
| Upgrade path | Moodle 5.3 upgrades require sites to run Moodle 4.4 or later | Plan staged upgrades across the gap, and confirm each intermediate version is available as signed media before starting |
| Internal identity source | Moodle core authentication plugins include LDAP, external database, OAuth 2 and Shibboleth; SAML2 is available as a plugin | Connect to an internal directory rather than external identity services, and confirm which protocol your enclave's directory supports |
| ADA Title II WCAG 2.1 AA dates | Public entities with 50,000 or more people must meet WCAG 2.1 AA by April 26, 2027 (interim final rule, April 20, 2026); smaller entities and special districts by April 26, 2028 | Audit theme, plugins and course content offline, since the tools used to test accessibility may also need to be carried across the gap |
Which LMS platforms fit a disconnected network and why
Moodle is licensed under GPL-3.0 and is maintained by Moodle HQ, which means the code can be downloaded, carried into a disconnected network and self-hosted without a license fee tied to connectivity. Its core ships authentication plugins for manual accounts, LDAP, external database, LTI, OAuth 2, Shibboleth and web services, so identity can stay inside the enclave. Moodle 5.3 is designated the next long-term support release and receives security fixes until October 1, 2029, which matches the planning horizon many defense and critical sites use.
- Identity inside the enclave: Core LDAP and external database authentication let accounts stay on internal directories without an outbound call.
- Long support window: Moodle 5.3 has security support until October 1, 2029, a useful anchor for accreditation cycles.
- Upgrade prerequisites: Moodle 5.3 requires 64-bit PHP 8.3 or later, PostgreSQL 17, MySQL 8.4, MariaDB 11.4 or SQL Server 2019 or later, and sites must run Moodle 4.4 or later to upgrade.
- Public directory change: From Moodle 5.1, the web server document root must point to the /public directory.
- Plugins need review: Any plugin you add, including SAML2 single sign on, must be checked for outbound calls before it enters the enclave.
Confirm that every package, theme and plugin you carry across the gap has a verified origin, because the platform itself does not decide whether your plugins are safe to run offline.
The Open edX platform is licensed under AGPL-3.0, so a disconnected deployment of the code is permitted, but the license does not reduce the operational work of keeping the platform current. Verawood is the current named release, Willow is planned for December 2026 and Xylon for June 2027, and only the latest release is supported. That means a network that cannot pull patches must plan every upgrade as a discrete project, not as routine maintenance.
- Latest release only: Only the newest release receives support, so older offline builds fall outside vendor coverage quickly.
- Known cadence: Verawood, Willow (December 2026) and Xylon (June 2027) are the named releases to plan around.
- Heavier stack: Open edX is a larger application than a typical LMS, so confirm the hardware, database and container tooling you can build and verify offline.
- Content delivery: Confirm how course video and assets are hosted locally, since external video services will fail silently in an enclave.
- Upgrade bundles: Plan a repeatable way to carry each new release across the gap with checksums and a signed record of what was imported.
Ask any partner to show the offline upgrade procedure for the release you would run, including how the team would handle a new release arriving between two maintenance windows.
Canvas LMS by Instructure is licensed under AGPL-3.0, so the source code is available for self-hosting. The license is the start of the evaluation, not the end. Instructure's offline install and update tooling for a fully disconnected network is not established by the facts available here, so confirm it directly with the vendor before you design around it. Ask whether the hosted product, the open source code or a commercial distribution is what you would actually receive for an enclave.
- License clarity: AGPL-3.0 governs the open source code, but confirm which build, support terms and update path apply to your network.
- Offline installation: Ask the vendor to document the offline installation steps, dependencies and container images required.
- Update tooling: Confirm how security and feature updates are delivered, verified and imported without an internet connection.
- Integration dependencies: Identify every external service the product calls by default, including content, analytics and notification services, and confirm how each is disabled.
- Written support terms: Get the offline support and update commitments in writing, since paid-edition terms often differ from the open source code.
Do not select Canvas for a disconnected network until the vendor has answered each of these points in writing and a test install on an isolated network has been completed.
How an air-gapped LMS rollout moves from staging to the enclave
The sequence builds and tests the LMS on the outside, carries a verified set of packages across the boundary, and proves identity, content and records work inside the enclave before any learner logs in.
Define requirements and the enclave boundary
The client and DeployOpen agree on learner counts, course types, SCORM or video content, identity sources and the exact boundary of the enclave, including which systems sit inside it and how media enters and leaves. The team also records which Moodle release line is chosen and checks it against the PHP and database versions in the release notes, because those versions must be carried across the gap. The step closes with a written boundary and requirements document signed by the client's security owner, which becomes the reference for every later transfer decision.
Build the staging environment outside the enclave
On a connected staging network that mirrors the enclave's operating system, PHP, database and web server, DeployOpen builds the Moodle stack, applies the chosen theme and plugins, and runs the configuration that will later be reproduced inside. Container images and packages are pulled and pinned here, and the build is documented so that every component can be traced to a source. The step closes when the staging instance installs cleanly from a scripted build and the configuration is stored as code the client can review.
Assemble and verify the bill of materials
Every artifact that will cross the gap is listed in a bill of materials: core code, plugins, language packs, container images, operating system packages, database binaries, certificates and offline content. Each item is recorded with its version and a checksum or signature, and the client's supply chain process checks the integrity and authenticity of each vendor package before it is approved for transfer. This is the control that NERC CIP-013-2 describes for supply chain procurement in utility settings, and the same discipline applies in other sectors. The step closes when the client signs off the list and the transfer media are sealed with a matching manifest.
Install offline inside the enclave
DeployOpen installs the approved bill of materials on enclave hosts using only local repositories and media, with no calls to public package registries, content delivery networks or update services. The web server document root is set to the public directory required by the chosen Moodle release, and the database, cron, mail relay and file storage are pointed at internal services. Anything that fails to resolve is treated as a finding and fixed in staging, then re-carried through the verified process. The step closes with an install log that shows no outbound connections during setup and a running instance that passes health checks.
Import content and video locally
Existing SCORM packages, xAPI content and training videos are imported from sealed media and hosted on enclave storage, so that no course launches a resource on an external domain. DeployOpen tests each package for external calls, font loading, analytics scripts and embedded players, and replaces or repackages anything that reaches outside. Video is transcoded or uploaded in formats the local streaming setup can serve, and captions are checked against the client's accessibility requirements. The step closes with a content inventory in which every course is marked as tested for offline launch and completion tracking.
Test identity integration offline
The LMS is connected to the enclave's directory and single sign-on service, using the authentication methods the client has approved, such as LDAP, SAML 2.0 or an internal OAuth 2 provider. DeployOpen tests account creation, role mapping, group enrollment, session timeouts and account disablement using test identities, and confirms that no step depends on an external identity provider. Administrator access and break-glass accounts are tested against the client's access rules. The step closes when each login and enrollment path has a documented test result and an owner for the directory attributes.
Run acceptance tests and check training records
The client's training and compliance owners run scripted acceptance scenarios that cover enrollment, course completion, quiz scoring, certificate issue, report generation and export. Training records are checked for completeness, timestamps, retention settings and the ability to produce a completion report for an auditor without manual editing. Backup and restore are tested inside the enclave, because a training record that cannot be restored is not evidence. The step closes with a signed acceptance report and a records check that lists which evidence the client can produce and where it is stored.
Document and rehearse the upgrade runbook
DeployOpen writes a runbook for carrying Moodle point releases and LTS upgrades across the gap, covering how the next release is selected, which PHP and database versions it requires, how the staging copy is upgraded and tested, how the new bill of materials is verified, and how the enclave is updated and rolled back. The runbook also records the support window of the current release line so the client can plan upgrades before security support ends. The step closes when the team has rehearsed one point release from staging to the enclave and the runbook has been approved for use by the client's operations staff.
Integration points and deployment pattern inside the enclave
An LMS in an air-gapped network is only as useful as the services around it. Identity, database, video, content playback, package mirrors and logging all have to run inside the boundary, and each one needs a deliberate decision about what it reaches and how it gets updated. The cards below cover the components that most often break offline deployments.
Internal identity and SSO
Moodle core ships LDAP and Shibboleth-capable authentication plugins, so learner accounts can come from a directory that lives inside the enclave. Confirm which directory the site uses, how group membership maps to course enrollment, and whether a SAML2 plugin is approved through the same change process as core code. The identity source must be reachable without any external lookup, including for password resets and account lockouts.
Database service
Moodle 5.3 requires PostgreSQL 17, MySQL 8.4, MariaDB 11.4 or SQL Server 2019 or later, so the database engine must be one that the site can install and patch from internal media. Place the database on a segment that only the application tier can reach, and confirm backup and restore procedures are tested inside the boundary. The database version must match the target Moodle release before any upgrade is scheduled.
Local video delivery
Video hosted on public platforms fails inside a disconnected network, so course media has to be stored and streamed from local storage. Decide whether video is transcoded before it enters the enclave, which formats the learner devices can play, and how large files are transferred across the gap. Confirm that no embedded player, captions service or analytics script attempts a call to an external host, because a single blocked request can stall a whole course page.
SCORM and xAPI content handling
Existing SCORM packages usually run without external calls, but some authoring tools insert links to CDNs or hosted fonts that break offline. Review each package before import, and test that completion and score data reach the LMS without leaving the boundary. For xAPI, the learning record store must sit inside the enclave, because statements sent to an external store would carry learner activity across the gap. Confirm how the site validates content from outside before it is admitted.
Internal package and dependency mirror
Plugin updates, PHP libraries, container images and operating system packages must come from a mirror inside the enclave. Each item carried across the boundary should be verified for integrity and authenticity against the vendor's published information, which is the control NERC CIP-013-2 describes for vendor software and patches. Record what was imported, when and by whom, so the mirror can be audited as part of the change record.
Monitoring and logs inside the boundary
Application logs, web server logs, database audit logs and authentication events should flow to a collector inside the enclave, not to a hosted monitoring service. Set retention periods that match the training evidence policy, and confirm that alerting does not depend on external email or messaging. Test a log export path that an auditor can use without introducing an unapproved transfer. The logs themselves become training evidence when completion or access questions come up.
Evidence to keep for the boundary review
What evidence does an assessor ask for when reviewing an air-gapped LMS?
The assessor typically asks for proof of what was installed, how it got across the boundary, what plugins and versions run, where training records live, and how changes were made over time. Each item maps to a component of the platform. DeployOpen prepares this evidence inside your environment, but it does not issue audit reports or certifications. Independent auditors and certification bodies make that determination, and the assessor's specific request list should be confirmed with them before the review starts.
What should the install bill of materials and hashes contain?
The install bill of materials is the list of every package, container image, language dependency, plugin and content file staged for the isolated network, with its version and cryptographic hash. It shows the assessor exactly what was installed and lets them confirm that nothing was altered after it was verified. Keep it under change control alongside the signed release packages from the platform vendor. Confirm with your assessor how they expect hashes to be recorded and which signing keys they will accept.
How do transfer logs prove what crossed the air gap?
Transfer logs record each import into the isolated network: the date, the media or transfer method, the operator, the files moved, and the hash check result before and after. Each import should be a separate entry so the assessor can trace any plugin or content item back to a specific transfer. Store the logs inside the boundary or in a controlled system, and confirm with your security team how media handling and scanning steps are documented. The Wazuh and Security Onion airgap guides describe offline update processes that can feed these records.
Which plugin inventory and version history does the LMS need to keep?
Keep a current inventory of every Moodle core component and third-party plugin, with the installed version, source, license, and the date it was approved and installed. Version history should show each upgrade and rollback. Moodle plugins can change behavior across core releases, so the inventory must match the core version in use. Moodle core already ships several authentication plugins, which should be listed as enabled or disabled. Confirm with your change board how unapproved plugins are detected and removed.
Which training and completion records must stay inside the boundary?
Completion records, assessment results, enrollment history, and acknowledgments of policy or security training must be retained within the isolated network under the retention rules your program requires. Records should include learner identity, course version, completion date, and the assessor or system that recorded it. Confirm the retention period with your compliance lead and the applicable standard, since it varies by program. Export or reporting processes should also be logged so the assessor can see who accessed the data and when.
What upgrade change records should an air-gapped LMS maintain?
Each upgrade should have a change record covering the target version, the reason, the approval, the test results in a staging environment, the rollback plan, and the post-upgrade verification. Moodle publishes its release support windows and minimum requirements for PHP and database versions in its release notes, so the record should show that prerequisites were checked before the transfer. Upgrade media should pass through the same import and hash steps as the original install. Confirm with your change board how long records are kept and who signs off.
Can our own team prepare this evidence without outside help?
Yes, many organizations assemble this evidence with their own staff, provided they have a clear owner for each record and a process that captures it at the time of each change. The work usually splits into a one-time setup, such as the baseline bill of materials and logging design, and a recurring effort, such as logging each import and upgrade. DeployOpen can plan the evidence model, configure the records, and document the procedures under a fixed written scope, and it can run ongoing support under a retainer. Ask any partner to show a sample record set before agreeing on scope.
What should we ask a partner about boundary evidence before signing?
Ask which records the partner will produce, in what format, and where they will be stored after handover. Confirm who keeps the signing keys, how hashes are generated and verified, and whether transfer logs can be audited independently. Ask how plugin and upgrade records link back to the bill of materials, and how the partner handles evidence gaps found during testing. Request the scope in writing, including which items are the partner's responsibility and which remain with your team or your assessor.
What to ask an implementation partner for a disconnected LMS
Start with the offline install procedure, because it decides whether the enclave can be rebuilt without anyone reaching an outside repository. Ask the partner to write down every artifact the install needs: the Moodle code package, the PHP extensions, the database server packages, the web server modules and the Composer or plugin dependencies. Ask how each one is fetched on the outside, checksummed, and moved across the boundary, and who signs off the transfer record. Ask for the exact database and PHP versions the chosen Moodle release requires, such as PHP 8.3 or later and PostgreSQL 17 for Moodle 5.3, and confirm that the partner has built the install from that media alone on a network with no route to the internet. Ask whether the web server document root will point to the /public directory, since Moodle 5.1 and later require it.
Next, ask how plugin and security updates are verified and carried across. The partner should describe a repeatable intake process: which plugins are approved, how each release is pulled from its source, how hashes are recorded, what a code review or static scan covers, and where the signed bundle is stored before import. Ask how this maps to the supplier integrity and authenticity controls in NERC CIP-013-2 if the enclave supports a utility, or to your own supply chain policy elsewhere. Ask who runs the Moodle security advisory watch, how fast an advisory becomes a transfer request, and whether the partner keeps a register of every plugin version in the enclave. Confirm that the update path also covers the theme and any SAML2 or LTI plugins, not only core.
Finally, ask for test evidence on the parts that most often break offline. For SCORM packages, the partner should show a test run where the package launches, records completion and score, and generates no external requests, using a network capture or proxy log as proof. For local video, ask how files are transcoded and served from the enclave, and whether the player loads any external scripts or fonts. For identity, ask how the directory is reached inside the enclave, whether LDAP or a SAML2 identity provider is hosted locally, and how sessions and multi-factor steps work without internet access. Last, ask for a rehearsed upgrade across the gap, run against a copy of production, with the rollback steps and the support model for the enclave: named engineers, on-site or cleared staff, and how tickets are handled when no remote session is allowed.
How much work and what it costs to run an LMS offline
Does Moodle cost money to run on an air-gapped network?
Moodle is licensed under GPL-3.0, so there is no license fee for the core platform, but an air-gapped deployment still has costs. You pay for the hardware or cloud capacity inside the boundary, the staff or partner time to install and configure it, the plugins and themes you select, and the upkeep that follows. Those costs are one-time for the build and recurring for hosting, patching and support. Ask any partner for a written scope that separates setup, content migration, plugin vetting, upgrades and support so you can compare quotes line by line. DeployOpen does not publish a price list, and a quote follows from that written scope.
What drives the effort of an offline LMS deployment?
The biggest effort drivers are how many components must be moved across the boundary and how many of them depend on outside services. Expect the work to grow with:
- The number of plugins, themes and LTI tools, since each needs a vetted offline copy and a test cycle.
- Identity integration with an internal directory, such as LDAP or SAML2, which must be tested without external calls.
- Video and SCORM content that must be served locally rather than from a public host.
- Database, PHP and web server prerequisites that must be mirrored internally.
The more of these you have on day one, the more setup and testing you should plan for in the written scope.
How long does an air-gapped LMS take to deploy?
The timeline depends mostly on accreditation and boundary review, not on the install itself. Before any system goes live, many defense and critical sites require a security authorization, a boundary review and sign-off on how software enters the network. Those steps can run in parallel with build work, but they often set the critical path. Ask for a schedule that names each approval gate, who owns it and what evidence it needs. A written scope should state durations only where they are agreed, and any timeline you receive should be tied to your authorization calendar rather than to a generic install estimate.
What must our team supply for an offline LMS project?
A partner cannot complete an offline deployment alone. Your side typically supplies:
- Named staff who can approve access, accept the boundary design and sign off on test results.
- The identity source, with directory schema, group structure and the authentication method the network already uses.
- A documented transfer procedure for moving installers, plugin updates and content across the gap, including who scans and approves each import.
- Hardware or virtual capacity inside the boundary, and access to your change process.
Confirm each item in the written scope, because gaps here are a common reason for delay.
Can our own team run an offline Moodle without an outside partner?
Some organizations do, provided they have skilled Linux, PHP, database and web server administrators, a tested offline update path and a clear owner for security patches. The Moodle 5.1 release notes require 64-bit PHP 8.2 or later and specify database versions, and the web server document root must point to the new /public directory. Upgrades must start from supported versions, so your team needs to track release dates closely. Decide early which tasks stay in-house, such as daily operations, and which you outsource, such as major upgrades, plugin validation and boundary documentation. Put that split in writing before procurement.
How do retainers cover upgrades on an offline LMS?
A retainer covers recurring work after go-live, such as applying point releases, validating plugins against a new core version, rehearsing offline upgrades and keeping documentation current. Moodle ships minor point releases every two months and major releases every six months, and Moodle 5.3 is the next long-term support release with security fixes until October 1, 2029, as stated in the Moodle releases page. Because each transfer across the gap needs verification, ask whether the retainer includes checking every package and documenting the chain of custody. DeployOpen offers ongoing support, upgrades and continuous testing as retainers, and the exact scope is set in writing.
Which recurring costs should we budget for after launch?
Recurring costs usually include infrastructure inside the boundary, staff time for administration, the upgrade cycle, plugin and theme maintenance, backup testing and any vendor support subscriptions you choose to keep. Security software that updates from offline media may also need periodic staff time. The NERC CIP-013-2 standard requires supply chain procurement processes to address verification of software integrity and authenticity of vendor software and patches, so budget time for those checks each time you bring updates in. Ask any partner to itemize these recurring items in the quote so you can see what continues after the one-time build ends.
Are paid editions needed to run an LMS offline?
Not for Moodle or Open edX, which are open source and can be self-hosted without an edition fee. Other tools in a learning stack often treat air-gapped deployment as a paid feature. For example, Mattermost lists air-gapped deployment in its Enterprise Advanced plan, and Rocket.Chat excludes it from its free Starter plan. Check every adjacent tool, such as chat, analytics or video, against its vendor pricing page before you commit to an architecture, because an LMS that works offline can still be blocked by a companion product that does not.
How DeployOpen scopes and supports disconnected LMS deployments
DeployOpen plans, installs and supports self-hosted learning platforms inside the client's own infrastructure, including networks with no route to the internet. Each engagement starts with a written, fixed scope that names the platform and version, the enclosure boundary, the content types to be carried in, the identity sources, the roles that will administer the system, and the deliverables and timeline both sides agree to before work begins. For a disconnected Moodle deployment, that scope should state which server builds and PHP and database versions are staged inside the enclosure, how the web server document root is configured to the /public directory required from Moodle 5.1 onward, and which plugin set is approved. Ask any partner, DeployOpen included, to show that written scope before discussing price.
Once the platform is running, the work that matters for a disconnected LMS is hardening, backup and documented upgrades. Hardening covers the web server, PHP, the database, administrative roles, and the authentication methods in use, including whether the LDAP or Shibboleth connectors are enabled only where needed. Backups should be tested by restoring them into a separate system inside the enclosure, because a backup that has never been restored is not evidence of recovery. Upgrade documentation should record each staged package, its checksum, the version gap and the database migration steps, so that a point release or long-term support move can be repeated by the client's own staff. DeployOpen offers these as deliverables within a project or as ongoing retainer support, and the retainer terms should state response expectations in writing. Security testing of the LMS, its plugins and its integrations, and rehearsal of incidents in a private cyber range, can be scoped as separate fixed-scope work so that findings feed back into the hardening baseline.

