Scaling a self-hosted course platform to large learner numbers

Scaling a self-hosted course platform to tens of thousands of learners depends on the platform, the hosting pattern, video delivery, data tiers and a team that can run them through launches and upgrades.

On this page

Why scaling a self-hosted course platform is a different job

An academy or MOOC team expecting tens of thousands of learners at launch needs to know which platform can carry that load while staying under its own control. Scale changes the build more than the feature set. A catalog that works well for a few thousand learners can fail during a cohort start, when many learners log in, open video and submit assessments within the same minutes. The decisions that matter are concurrent session capacity, video bandwidth, database and cache sizing, and whether someone on your team can operate the stack after launch. For MOOC-style catalogs, the short answer is Open edX on Kubernetes, deployed with Tutor. Moodle clustering fits better when the institution already runs Moodle or depends on its plugin ecosystem. Neither should go live at scale without load testing against your own content, traffic pattern and integrations.

Start by confirming the release you will build on. Open edX states that the latest named release is the only supported release, and Verawood is the current one. The next release, Willow, is planned for December 2026, so a platform launched on Verawood will need a planned upgrade path before its support window closes. The edx-platform maintainers recommend running Open edX in production through a service provider or with Tutor, and they note that bare-metal installation is complex and has limited community support. Ask any partner how they will handle that upgrade, who signs off on it and how it will be rehearsed in a non-production environment before it touches live learners. Open edX release notes lists the current and planned releases.

Which requirements a large launch places on the build

This table maps each requirement a large cohort launch places on an Open edX or Moodle build to what it means for the architecture and what to confirm in your own environment. Read each row as a question to answer before choosing a platform layout, a hosting model or a support contract. The main takeaway is that peak load, video, identity and upgrade cadence are decided early, and they are cheaper to design for than to retrofit before a launch date.

RequirementWhat it means for the buildWhat to confirm in your environment
Concurrent learner peaks at cohort startsTraffic clusters at enrollment opening and the first lesson release, so the LMS web tier, cache and database must absorb a sharp spike. Open edX multi-node deployments need a shared Django cache backend such as Redis or Memcached.Expected concurrent users at the first hour, the number of cohorts per term, and whether enrollment and first access open at the same time.
Video deliveryVideo should be served through a CDN and object storage rather than from the LMS application servers, so lesson playback does not compete with course pages for capacity. Tutor on Kubernetes supports this pattern through plugins and external storage.Video hosting location, the bandwidth and CDN contract, whether learners in some regions need in-country delivery, and the video encoding workflow.
Uptime during launchesLaunch windows need a highly available control plane, at least three control plane nodes behind a TCP load balancer for Kubernetes, and a clear plan for scaling before, not during, the launch. Freeze windows for upgrades and schema changes should be written down.The availability target agreed with the business, the launch calendar, who can approve a change during a launch week, and whether a managed hosting provider carries any service level.
Identity integrationLearners often arrive from corporate or partner identity providers. Open edX supports OAuth2 providers, SAML 2.0, Shibboleth and LTI. Moodle core includes OAuth 2, LDAP, Shibboleth and LTI, and SAML 2.0 is available through a marketplace plugin. Each login path adds load and a support burden.Which identity providers must be supported at launch, whether SSO is required or optional, and how learner accounts are merged across providers.
Accessibility under the ADA Title II rulePublic entities must meet WCAG 2.1 Level AA for web content and mobile apps under the DOJ rule. The interim final rule published April 20, 2026 sets compliance dates of April 26, 2027 for entities serving 50,000 or more people and April 26, 2028 for smaller entities and special districts. Theme, video player and course content all need testing, not only the platform core.Whether your organization is a public entity covered by Title II, which population threshold applies to you, the accessibility testing method you will use, and who owns remediation of course content authored by instructors.
Upgrade cadence tied to named releasesOpen edX supports only the latest named release, and Verawood is current with Willow planned for December 2026 and Xylon for June 2027. Moodle 5.3 is the next long-term support release, with security fixes until October 1, 2029. The build should keep a tested upgrade path, a staging copy of production, and a plan that matches the chosen release model.Which release line you will track, who approves upgrades, the test window before each launch, and whether your partner includes upgrades in its scope.
Backup and restore of learner recordsEnrollment, grades, certificates and progress data must be restorable to a consistent point in time across MySQL, MongoDB where applicable, object storage and the etcd data behind Kubernetes. Kubernetes recommends a documented etcd backup plan, and Secrets are stored unencrypted in etcd by default unless encryption at rest is configured.Recovery time and recovery point objectives set by the business, backup retention rules for learner records, restore test frequency, and where backups are stored and encrypted.

Open edX on Kubernetes or Moodle clustering: which fits large cohorts

Large cohorts push the choice between platforms down to operations: how the application scales, which database and cache it needs, and who keeps it upgraded. The four options below differ mainly in how much container and cache engineering you take on and how quickly you must move between named releases.

Open edX with Tutor on Kubernetes

Tutor is the official Docker-based Open edX distribution, licensed under AGPL, with Kubernetes deployment support and a plugin system under Apache 2.0. Multi-node deployments need a shared Django cache such as Redis or Memcached, and the stack depends on MySQL 8.0, MongoDB 7.x and Memcached. Check who runs the cluster after launch, because Open edX supports only the latest named release at a time, so every upgrade is a planned migration. Edly offers professional support for Tutor if you want a vendor behind the distribution.

Open edX without Kubernetes

Running Open edX on bare metal or virtual machines is complex, and the edx-platform maintainers recommend production through a service provider or Tutor. This option suits organizations that already run a mature infrastructure team and want fewer moving parts than a cluster. It still needs a shared cache for multiple web nodes, and it gives you less built-in horizontal scaling. Ask any partner to show how they would scale web and worker nodes independently before committing to this path.

Moodle 5.3 LTS with database clustering

Moodle 5.3 is the next long-term support line, with bug fixes until October 4, 2027 and security fixes until October 1, 2029. It requires 64-bit PHP 8.3 or later, and PostgreSQL 17, MySQL 8.4, MariaDB 11.4 or SQL Server 2019 or later, so the database tier is where most scaling decisions sit. From Moodle 5.1, the web server document root must point to the /public directory, which affects load balancer and deployment configuration. Sites must run Moodle 4.4 or later to upgrade to 5.3.

Canvas LMS for institutions already on it

Canvas LMS is licensed under AGPL-3.0, so you can self-host it, but it fits best where your institution already runs Canvas and its integrations, grading and LTI tools. Moving learners and course history to a different platform for a large cohort adds migration risk that often outweighs the scaling benefit. Confirm the current deployment guidance, supported database and cache stack, and upgrade cadence with the Instructure documentation before you size infrastructure, because those details are not part of this comparison.

Moodle managed hosting through partners

Moodle offers managed hosting through MoodleCloud or Moodle Partners, which moves database tuning, patching and backups to the hosting provider. You keep less control over the server stack, network placement and data location, so check where learner data lives and what the contract says about upgrades to each named release. This route suits programs that need predictable operations without building a platform team. Ask for the scaling limits and the process for load testing before a launch in writing.

How video delivery and database sizing change at tens of thousands of learners

Video is usually the largest bandwidth consumer on a course platform, and it should not be served from the Open edX or Moodle application servers. A common pattern is to host source files in object storage or a video service, place a CDN in front of it, and let the LMS issue links that point to the CDN. Origin protection means the storage bucket accepts requests only from the CDN, so learners cannot bypass it. Signed access means each playback URL carries a short-lived signature tied to an enrolled learner, which limits sharing of paid content.

  • Origin protection: restrict the storage origin so direct requests are refused and only the CDN can fetch objects.
  • Signed URLs or tokens: set expiry windows that are long enough for a lesson but short enough to limit reuse, and confirm how the LMS generates them.
  • Transcoding and renditions: plan adaptive bitrate outputs at build time, since their storage and egress costs recur.
  • Egress and regions: ask the CDN provider for regional points of presence that match your learner geography, and whether egress pricing is metered per gigabyte.
  • Measurement: ask the partner to measure peak concurrent viewers and average bitrate from a pilot cohort instead of assuming them.

Before launch, confirm which video component your chosen platform version supports and who holds the signing keys and CDN contract.

How a large-scale rollout moves from pilot to launch

The sequence turns a pilot into a platform that has been sized, tested against the launch profile and handed to the team that will run it after go-live. Each phase closes with a named output that the next phase depends on.

  1. Sign off baseline and scope

    DeployOpen and your team write down the expected learner volumes, peak concurrency around launches, course and video catalog size, languages, identity sources and the integrations in scope. The output is a signed scope document with a launch load profile that every later test is measured against. Without that profile, neither the cluster sizing nor the load test has a target to meet. Ask the partner to show how the profile was derived from your own enrollment forecasts rather than from a generic template.

  2. Choose the platform and pin the release

    The team decides between Open edX on Tutor and Moodle clustering, based on the authoring model, course types, LTI and identity needs and the skills you already hold. The chosen platform is pinned to its currently supported named release or long-term support line, with the Python, database and PHP versions it requires recorded in the build. The output is a version decision record that names the upgrade path. Open edX supports only its latest named release, and Moodle requires specific PHP and database versions for each release, so confirm these in the vendor documentation before the build starts.

  3. Build the Kubernetes cluster with HA control plane

    The infrastructure team provisions a highly available control plane, with the etcd topology chosen as stacked or external, a load balancer in front of the API server and encryption at rest enabled for Secrets. Backups of etcd are scheduled and a restore is rehearsed on a separate cluster. The output is a cluster that passes a failover test (one control plane node stopped during a dry run) and a restore test documented in a runbook. Confirm which Kubernetes minor version your provider supports and how upgrades will be sequenced.

  4. Integrate identity and analytics

    Single sign-on is connected to your identity provider through the protocols the chosen platform supports, such as SAML 2.0, OAuth2 or LTI, and role mapping is tested for instructors, learners and administrators. Learning analytics pipelines and the data store are configured and checked against a known set of test enrollments. The output is a signed-off test matrix covering login, role assignment, deprovisioning and a sample of events arriving in the analytics store. Ask which identity providers the platform supports natively and which need a plugin.

  5. Run load tests against the launch profile

    The test plan is written from the launch profile, covering logins, course page loads, video playback, quiz submissions and enrollment spikes. Tests run in a non-production environment that matches production sizing, including database, cache and CDN configuration. Results are compared with the targets in the profile, and bottlenecks are fixed and retested. The output is a load test report listing each scenario, the measured results, the remaining risks and the agreed go or no-go criteria for launch. A test that runs only on a smaller environment does not prove the launch will hold.

  6. Cut over and provide hypercare

    The production cutover is rehearsed, including DNS changes, content migration, the CDN origin settings and a rollback plan. After launch, the team watches dashboards, error rates and database and cache health during an agreed hypercare window with named responders for each problem type. The output is a cutover record, a list of issues found in hypercare with their resolutions, and a sign-off that production has met the criteria set in the load test report. Confirm in writing how the hypercare window is defined and who on each side is on call.

  7. Hand over to the operating team

    DeployOpen transfers runbooks for upgrades, etcd restores, scaling, backup checks, security patching and incident response to your operating team, and walks them through each one on the live system. Ownership of cloud accounts, secrets and the release calendar is confirmed in writing. The output is a handover pack and a completed training log showing that your staff have run the restore and upgrade procedures themselves. Ask whether the handover includes a retainer for ongoing support and upgrades, and what that retainer covers.

Security controls a large public learner base needs on Kubernetes

A platform serving tens of thousands of learners concentrates student accounts, course content and operator access in one cluster. The controls below protect the credentials, workloads, identities and data stores that every other part of the platform depends on, and each one should leave evidence you can show an auditor or a university security office.

Encrypt Kubernetes Secrets at rest

Kubernetes stores Secrets unencrypted in etcd by default, so database passwords, LMS service keys and LTI credentials sit in plain form in the cluster data store unless you change that. Configure encryption at rest for Secrets in the API server, then confirm that existing Secrets were re-written after the change. For external stores, the Secrets Store CSI Driver can keep credentials outside etcd. Evidence: the encryption configuration file, a test read of etcd showing ciphertext, and the rotation record for keys.

Restrict list and watch access

Read access to Secrets is the most dangerous permission in a course platform namespace, because listing or watching Secrets exposes every credential at once. Grant list and watch on Secrets only to the service accounts and operators that need them, and give developers and support staff read access to workloads without Secret rights. Review role bindings after each staff change. Evidence: exported RBAC role and binding manifests, and a quarterly access review signed by the platform owner.

Enforce Pod Security Standards

Learner-facing containers run code and content from many sources, so a compromised pod should not be able to run as root or mount host paths. Apply the Pod Security Standards at the restricted level to the namespaces that run the LMS, the workers and the media services, and test the labels in warn mode before enforcing them. Some Open edX and Moodle components may need exceptions, so document each one. Evidence: namespace labels, admission logs and a list of approved exceptions.

Federate learner and staff sign-in

Learners and staff should authenticate through an identity provider, not through local Kubernetes or database accounts, and Kubernetes itself authenticates operators through X.509 certificates, OpenID Connect tokens or an authenticating proxy. Open edX supports OAuth2, SAML 2.0, Shibboleth and LTI sign-in, and Moodle core includes OAuth 2, LDAP, Shibboleth and SAML-based options through plugins. Confirm token lifetimes, group mapping for administrator roles, and what happens to access when a staff member leaves. Evidence: identity provider configuration, group-to-role mappings and offboarding logs.

Benchmark the cluster against CIS

The CIS Kubernetes Benchmark is a widely used set of configuration checks for control plane, worker node and policy settings, and it gives the operations team a shared list to review against. Run an automated scan against your cluster distribution, record each failed check, and either fix it or document the accepted risk with an owner and a review date. Confirm the benchmark version that matches your Kubernetes release before you start. Evidence: scan reports, a risk register of accepted findings and the dated remediation log.

Separate learner records from video and analytics

Learner records, such as names, grades, certificates and payment references, should live in a database that is not shared with video storage, log pipelines or analytics dashboards. Video files and analytics events are high-volume and often served to many users, so a shared store widens the blast radius of any misconfiguration. Keep learner-identifying fields out of the analytics path, and use separate credentials and network policies for each store. Evidence: a data flow diagram, network policy manifests and a list of which services can reach the learner database.

Evidence a launch review or auditor asks for, and what produces it

This table lists the records a launch review or external assessor is likely to request for a large-scale course platform, the component or activity that produces each one, and what a reviewer looks for. Use it to decide what to instrument before launch rather than reconstructing records afterward. DeployOpen prepares this evidence, but independent auditors and certification bodies are the ones who issue any attestation.

EvidenceWhat produces itWhat the reviewer checks
Load test reports against the launch profileLoad testing tool run against a staging copy of the LMS with the expected concurrent learner profile, plus Kubernetes and database metricsTest profile matches the expected launch traffic, error rates and response times are recorded, and the findings are linked to a sizing decision
etcd snapshot and restore test recordsetcdctl snapshot save output logs, scheduled backup job history, and a timed restore run using etcdutl in a non-production clusterA snapshot exists for the stated backup interval, a restore has actually been performed, and the restore steps and results are written down
Kubernetes version and skew recordsCluster version inventory from the control plane and each node pool, with a record of upgrade order against the version skew policyControl plane upgraded before nodes, node versions within the allowed skew, and a named Kubernetes release still receiving patches
Open edX or Moodle upgrade logs with release versionsTutor or Moodle upgrade change records, staging test results, database migration output and the release notes version appliedThe running release is one the vendor still supports, each upgrade was tested first, and rollback steps exist
RBAC and secrets configuration exportskubectl exports of Role and RoleBinding objects, encryption at rest configuration for Secrets, and Secrets Store CSI Driver settings if usedLeast-privilege access to Secrets, encryption at rest is enabled, and service accounts are not granted broad cluster rights
Accessibility test results against WCAG 2.1 AAAutomated accessibility scans of course, theme and checkout pages, plus manual keyboard and screen reader testing by a qualified testerResults map to WCAG 2.1 Level AA success criteria, open defects are tracked with owners, and tests cover video players and custom themes
Incident and on-call logsMonitoring and alerting platform, ticketing system and on-call rota, with post-incident reviews for load and platform failuresAlerts were acted on within the agreed response process, incidents have root cause notes, and launch-period coverage is documented

Which roles the platform needs after launch

What does a platform engineer do for Kubernetes and etcd after launch?

A platform engineer owns the cluster that runs Open edX or Moodle, including node pools, the control plane, etcd, ingress, autoscaling and upgrades. Kubernetes releases come about three times a year on a cycle of roughly 14 weeks, and the project supports only the three most recent minor releases, so upgrades are recurring work, not a one-time task. The engineer also owns etcd backups using etcdctl snapshot save, restore drills, and the control plane topology chosen at build time. Confirm with your partner which of these are included in the fixed-scope build and which move to an ongoing retainer. The Kubernetes release cycle page explains the cadence your team must plan around.

Who manages courses and enrollments on the LMS day to day?

An LMS administrator manages course catalogs, enrollment rules, instructor accounts, course cloning for new cohorts, certificate settings and the learner-facing configuration of the platform. This work is recurring and grows with each launch, since every cohort needs its own dates, access windows and enrollment logic. One-time work includes writing the enrollment and naming conventions, training instructors and building the cohort checklist. Ask your partner to document these procedures during the rollout so the role can be filled by a trained staff member instead of the original build team. Staffing levels depend on catalog size and launch frequency, which you should set against your own plan.

Why does a release manager need to track named releases and patch windows?

A release manager tracks which Open edX or Moodle release is in use, when it stops receiving support, and when upgrades must happen. Open edX supports only its latest named release and cannot support more than one at a time, so staying on an old release leaves the platform without a supported path. Moodle publishes long-term support releases with separate bug fix and security fix end dates, and Moodle 5.3 requires PostgreSQL 17, MySQL 8.4, MariaDB 11.4 or SQL Server 2019 or later. The release manager schedules test upgrades in a staging environment, coordinates Kubernetes patch windows and keeps a dated record of every change. This is recurring work for the life of the platform.

What does a security engineer handle for secrets and access reviews?

A security engineer controls how secrets and administrator access are stored, rotated and reviewed. Kubernetes stores Secrets unencrypted in etcd by default, so the engineer must confirm encryption at rest is enabled, restrict list and watch access with least-privilege RBAC, and decide whether an external store is used through the Secrets Store CSI Driver. Access reviews of cluster roles, LMS staff accounts and identity provider connections are recurring. Setup of the identity provider, such as SAML 2.0 or LDAP, is usually one-time, while reviews and rotation continue indefinitely. Confirm the review frequency and the evidence format your compliance team needs before the build starts.

What does a support lead do for learner tickets during cohort starts?

A support lead runs the queue of learner questions, from login and enrollment problems to video playback and certificate requests, and sets the escalation path to the platform engineers. Cohort starts concentrate tickets into a short window, so the lead needs a rota, a published help page, and canned responses prepared before launch. Ticket volume depends on learner numbers, course design and how clearly access rules are explained, so ask your partner for a load test result and a support playbook before setting staffing. The recurring part is the queue and the knowledge base. The one-time part is the playbook and the escalation contacts.

Can the client's own team run the platform after launch, or does it need a partner?

Your team can run the platform if it has the skills for Kubernetes operations, database administration, LMS configuration and security review, and if the runbooks are written and tested. DeployOpen plans, implements, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms inside the client's own infrastructure, and ongoing support, upgrades and continuous testing are available as retainers. Most engagements are fixed-scope, so the handover, runbooks and training should be written into the scope. Ask any partner which roles it will cover, which the client keeps, and how responsibilities split during an incident.

What is one-time work and what is recurring for the operating team?

One-time work includes the initial cluster design, the first load test, the identity integration, the runbooks, and the training of staff. Recurring work includes Kubernetes and LMS upgrades, etcd backup checks, secret rotation, access reviews, cohort setup and learner support. Recurring costs are driven by how often you launch, how many releases you track, and how many people you need on call. Ask any quote to separate build effort from ongoing operations so you can compare the two over the life of the platform.

What to ask an implementation partner before a large launch

Start with the load test, because it decides almost everything else. Ask the partner to write down the launch profile they tested against: peak concurrent learners, the share who log in within the first hour, the assessment and video calls each learner makes, and the spike shape for enrollment day. Then ask who owns the results. You should receive the scripts, raw metrics, dashboards and a findings report in writing, and you should be able to rerun the scripts yourself before go-live. Ask whether the test covers the LMS, Studio, the authentication path and the video path, and whether it runs against a production-sized copy of the database. For database and cache sizing, ask which inputs they require from you: expected course count, enrollment volume, grade and progress write rates, and the Redis or Memcached tier they plan to use for the shared Django cache. Request the sizing worksheet and the assumptions behind each number.

Next, ask how video reaches learners during a peak. Ask whether lecture video is served from a CDN or from the application origin, what happens to origin load when a popular course opens, and which cache rules and signed URL settings they plan to use. Ask for a written statement of what fails first under overload and how the team would detect it. For upgrades, ask which named Open edX release the platform starts on, how they will move to the next named release, and how they handle the rule that only the latest named release is supported. On the Kubernetes side, ask how they follow the version skew policy when they upgrade the kube-apiserver before the nodes, and whether they test that sequence on a staging cluster first. Finally, ask who is on call after launch, which hours they cover, what response times they commit to in a signed document, and who holds the runbooks, etcd backup and restore procedures and access to the cluster.

How long, how much effort and what the team must provide

What drives the cost of scaling a self-hosted course platform?

The cost is driven mainly by scope, cluster design, video volume, integrations and the depth of load testing. A platform for a few thousand learners needs a smaller cluster, fewer managed database replicas and lighter testing than one expecting tens of thousands of concurrent learners during a launch. Video volume adds CDN and storage spend that grows with hours published and viewers reached. Each integration with a identity provider, payment system or student records system adds build and test effort. Ask every quote to split one-time work (architecture, build, migration, load testing, training) from recurring costs (cloud infrastructure, CDN traffic, backups, monitoring, support). Also ask who pays cloud accounts and third-party licenses directly, since that changes what the quote includes.

How long does it take to prepare Open edX or Moodle for a large launch?

No timeline can be set until the scope is written, because duration depends on the cluster design, the number of integrations, the video pipeline and how many named releases must be upgraded before launch. Treat the published release calendars as planning inputs rather than fixed deadlines. For Open edX, the latest named release is the only supported one, and Verawood is the current release, with Willow listed for December 2026 and Xylon for June 2027. For Moodle, the 5.3 release is the current long-term support line, with security support until 1 October 2029. Ask the partner to lay out a schedule that includes a load test window and a freeze before the launch date, and to name the milestones that need your sign-off.

Can our internal team run a platform of this size alone?

Some teams can, but running a large course platform is an operating job, not a one-time installation. The maintainers of edx-platform recommend running Open edX in production through a service provider or with Tutor, and note that bare-metal installation is complex and receives limited community support. A capable operating team usually covers Kubernetes cluster administration, database and cache tuning, backups and restores, security patching, release upgrades, CDN and video configuration, and incident response. Assess your team against each of these areas. Gaps in any of them are worth naming in the quote so the engagement can cover training, runbooks or ongoing support.

What does our organization need to provide before the work starts?

The implementation team needs a clear learner profile, a launch date, access and decision owners before work can be scoped accurately. Provide expected peak concurrency, enrollment volume by month, course catalog size and video hours, plus any region or language requirements. Grant access to cloud accounts or data center networks, identity provider metadata, DNS, certificate authorities and payment or student information system contacts. Name one business owner who signs off on scope changes and one technical owner for security decisions. Delays usually come from missing access or unresolved decisions rather than from the engineering work itself, so confirm these items in writing at kickoff.

How are timelines and deliverables set in a fixed-scope agreement?

Most DeployOpen engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. The written scope should list the platform components, environments, integrations, load test targets, documentation, handover sessions and acceptance criteria. Each deliverable should name what the client must provide and what happens if a dependency slips, including how changes to scope are priced and approved. Ask for the acceptance process, the test evidence delivered at each milestone and the terms for the launch freeze. A fixed scope protects both sides only if the boundaries are explicit, so review exclusions such as content migration, custom theme work or third-party video contracts.

Is ongoing support for a large course platform sold as a retainer?

Ongoing support, upgrades and continuous testing are available as retainers, separate from the initial fixed-scope implementation. A retainer typically covers patching, monitoring response, backup verification, release upgrades and periodic load retesting before major enrollment events. Confirm in the quote what response coverage applies, which hours are included, how named release upgrades are scheduled, and how urgent incidents are escalated. Ask whether the retainer includes Kubernetes control plane maintenance, etcd backups and restore drills, and CDN configuration changes. Because DeployOpen does not publish a price list, request a quote built from the written support scope.

What should we ask about upgrade effort before we commit to a platform?

Upgrade effort depends on which release you run and how far it is behind. For Moodle, sites must be on version 4.4 or later to upgrade to 5.3, and the document root must point to the /public directory from Moodle 5.1 onward. For Open edX, only the latest named release is supported, so each upgrade is a planned migration. Kubernetes adds its own cycle, with three minor versions maintained at a time, and kube-apiserver must be upgraded one minor version at a time. Ask the partner how they test upgrades in a staging environment that mirrors production, how long they reserve for each cycle in the quote and how rollback is handled if a migration fails.

Which items in a quote should we compare across vendors?

Compare quotes on the same written scope, not on headline totals. Check that each one itemizes architecture and design, cluster build, database and cache configuration, video delivery, integrations, load testing with stated targets, security hardening, documentation, training and handover. Confirm who holds cloud accounts, licenses and domain names, and what happens to those assets at the end of the engagement. Ask for the assumptions behind any effort estimate, such as expected concurrency and number of integrations. Quotes that leave these items out are harder to compare and tend to produce change requests later.

How DeployOpen scopes, load tests and supports a large course platform

DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For a course platform expected to serve tens of thousands of learners, that means agreeing the scale targets, the Open edX or Moodle architecture and the load tests in writing before any build work starts.

How we scope

  • Written scope fixes the expected learner numbers, peak enrollment windows and launch dates before architecture decisions are made.
  • The scope names whether Open edX on Tutor or Moodle clustering fits your course catalog, authoring workflow and team skills.
  • Engagements are fixed-scope, with deliverables, environments and load test criteria agreed in writing before work starts.

How we build

  • We deploy the chosen platform on Kubernetes in your environment, with database, cache and CDN sizing documented for each tier.
  • Load tests run against a production-like environment, with pass criteria tied to the launch scenarios set out in the scope.
  • Video delivery, identity integration and backup of the database and etcd data are configured and tested before go-live.

How we hand over

  • You receive architecture records, runbooks for scaling, upgrades and restores, and the load test reports with their results.
  • Handover covers the operating roles your team needs, such as Kubernetes, database and course administration, with training on each runbook.
  • Upgrade paths for named Open edX releases or Moodle LTS versions are documented so your team can plan each release window.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers, scoped separately from the build.
  • Retainers can cover pre-launch load retests for each large cohort or course release that changes traffic patterns.
  • Support is agreed in writing, so you know who responds to incidents, how fast and what is covered before launch.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.