Transform Learning with a Powerful Enterprise LMS

Learn more
LMS Selection

Self-hosted LMS hosting requirements: server sizing from 1,000 to 50,000 learners

Software requirements for Moodle 5.3, Totara, Open edX and Canvas, plus server sizing starting points from 1,000 to 50,000 learners and a load-testing plan for IT teams.

Learn more about this topic with AI

Gemini opens with the prompt copied - paste it into the chat to start.

Illustration of server rack with learner-count dial, representing lms hosting requirements

A self-hosted LMS for 1,000 learners usually runs well on one server with 4 vCPUs, 8 to 16 GB of RAM and fast SSD storage. At 50,000 learners you need several web servers behind a load balancer, a separate database server with a read replica, a dedicated Redis cache and shared file storage. The number that drives the size is not registered learners but how many people are active at the same time, especially during exams.

The software floor has also moved. Moodle 5.3, released on 5 October 2026, needs PHP 8.3 or later and PostgreSQL 17, MySQL 8.4 or MariaDB 11.4. Teams still on MySQL 8.0 or PHP 8.2 are running versions that are out of support or close to it.

This guide is for IT teams planning to host an LMS on their own servers or cloud account. It covers the current software requirements of the main open-source platforms, sizing starting points for 1,000, 5,000, 20,000 and 50,000 learners, and how to prove the numbers with a load test before go-live. Versions and requirements were checked on each project's official documentation in October 2026.

What actually drives LMS server sizing

Vendors and open-source projects rarely publish a "servers per learner" figure, and for good reason. Moodle's own installation guide says that a forum post asking what hardware is needed for 50,000 users is unlikely to get a useful answer. Two sites with the same headcount can need very different hardware. These are the variables that matter:

  • Peak concurrent users. A compliance course that staff finish over a quarter creates a light, even load. A timed exam that 2,000 candidates start at 10:00 creates a spike that decides your server size on its own.
  • What learners do. Quiz attempts, SCORM tracking and forum posts write to the database on almost every click. Reading a page or watching an externally hosted video costs far less.
  • Video and files. Serving video from the LMS server eats bandwidth and disk. A video platform or CDN removes most of that load.
  • Plugins and integrations. Reporting plugins, HR sync jobs and badly written add-ons are a common cause of slow sites. A common failure we see is one custom report that scans a large log table during peak hours.
  • Background tasks. Enrolment syncs, notifications, backups and certificate generation run in cron. On a busy site they compete with learners for the same database.

So start from a concurrency estimate. Take your expected active learners, decide what share might be online in the busiest 15 minutes of the year, and size for that peak rather than the average. If you already run an LMS, your web server logs and LMS reports give you real numbers to replace the guess.

Software requirements by platform in 2026

Hardware is only half the requirement. Each platform pins minimum versions of PHP, the database and other services, and those minimums rise with new releases. The table below lists what the official documentation states as of October 2026.

PlatformCurrent releaseLanguage and runtimeDatabaseOther servicesOfficial hardware guidance
Moodle LMS5.3 (LTS, 5 October 2026)PHP 8.3 minimum, 8.4 supported, 64-bit only; sodium extension requiredPostgreSQL 17, MySQL 8.4, MariaDB 11.4, Aurora MySQL 8.0 or SQL Server 2019 minimumCron every minute; Redis recommended for application and session caches512 MB RAM minimum, 1 GB or more recommended, "8GB plus" on a large production server; 5 GB disk as a realistic minimum
TotaraPer vendor requirements page, updated September 2026PHP 8.2 to 8.4 supported (8.3 recommended); memory_limit at least 512 MBPostgreSQL 14 to 17, MySQL 8.0.1+ or 8.4, MariaDB 10.11.5+, SQL Server 2019 or 2022Redis or Memcached for production cachingExample: about 10,000 users (about 500 concurrent) on 2x quad-core Xeon with 16 GB RAM
Open edX (Tutor)Verawood, deployed with Tutor v22Docker 24.0.5+ and Docker Compose v2MySQL 8.4 and MongoDB 7.0 (bundled)Redis 7.4 and Meilisearch (bundled)Minimum 4 GB RAM, 2 CPU, 8 GB disk; recommended 8 GB RAM, 4 CPU, 25 GB disk
Canvas LMS (open source)Rolling releasesRuby 3.4.1 recommended, Node 20PostgreSQL 14 minimumRedis 6 or later; Apache with PassengerAt least 8 GB RAM, written for Ubuntu 22.04
ILIASILIAS 11PHP 8.3 or 8.4MySQL above 8.0.21 or MariaDB 10.5 to 11.8OpenJDK and Node.jsDual-core CPU and 4 GB RAM as an absolute minimum

Two points stand out. First, Moodle 5.1 moved the web-facing files into a /public directory, so the web server's document root must point there; upgrades from 4.x need that change in the virtual host. Second, Moodle 5.3 raised its minimums to PostgreSQL 17 and MariaDB 11.4, so check your database version before you plan an upgrade.

If you want a commercial product rather than an open-source project, a few vendors still offer a self-hosted licence. Disclosure: LMS Advisor is built by the All-in-One LMS team. LMS Advisor, our self-hosted LMS, runs on a VPS or capable shared hosting with PHP 8.1 or later and MySQL, or in the vendor's cloud, and updates are applied with in-app tools. You can see how LMS Advisor handles this on its product page. For a wider comparison, see our guide to self-hosted LMS options.

Server sizing from 1,000 to 50,000 learners

The table gives the starting points we use when scoping a self-hosted PHP LMS such as Moodle or Totara. They are planning assumptions, not benchmarks. Treat them as a first draft for your load test, and expect to adjust them for heavy exam use, video hosted on the server or a large plugin set.

Active learnersPlanning peak (concurrent)Web tierDatabaseCache and filesNotes
1,00050 to 100One server, 4 vCPU, 8 to 16 GB RAMSame serverRedis on the same server; local SSD, 100 GB or moreSimplest setup. Keep nightly off-server backups.
5,000250 to 500One server, 8 vCPU, 16 GB RAMSeparate server, 4 to 8 vCPU, 16 to 32 GB RAMRedis on its own small instance; 250 GB or more for filesClose to Totara's published 10,000-user example. Separate the database first.
20,0001,000 to 2,000Two to three web nodes behind a load balancer, 8 vCPU and 16 GB each8 to 16 vCPU, 64 GB RAM, fast SSD or provisioned IOPSDedicated Redis; shared file storage (NFS or a managed file system); video on a CDN or video platformRun cron and background tasks on a separate node.
50,0002,500 to 5,000 or moreFour to six web nodes, autoscaled for exam windows16 vCPU or more, 64 to 128 GB RAM, plus a read replicaHighly available Redis; shared storage; external search; CDNPlan for monitoring, failover and a tested restore before launch.

The jump between tiers is less about raw CPU and more about removing single points of contention. At around 5,000 active learners the database should move to its own server. Somewhere between 10,000 and 20,000 the web tier needs a second node, which forces shared file storage and a shared session store. At 50,000, read replicas help: Moodle's performance documentation says that up to 80 to 90 percent of database load can be moved away from the primary when read replicas are enabled.

Database, cache and file storage choices

The database is where most large LMS sites hit their limit, so choose versions with a long support runway.

  • MySQL 8.0 reached end of life in April 2026 with release 8.0.46. Oracle points users to MySQL 8.4 LTS, which is also Moodle 5.3's minimum.
  • PostgreSQL supports each major version for five years. PostgreSQL 14 support ends on 12 November 2026, and PostgreSQL 17, Moodle 5.3's minimum, is supported until November 2029.
  • PHP 8.2 receives security fixes only until 31 December 2026. PHP 8.3 is in security-only support until the end of 2027 and PHP 8.4 until the end of 2028.

For caching, Moodle's documentation describes Redis as one of the best options for the application and session caches, and recommends an effective cache such as Redis for load-balanced sites. It is not fully compatible with the request cache, so leave that on the default. Turn on PHP OPcache on every web node.

On a dedicated MySQL or MariaDB server, the InnoDB buffer pool can take up to about 80 percent of RAM according to Moodle's performance guide. Size the database server so the active part of your data fits in memory; a database that keeps reading from disk is the most common cause of slow quiz pages.

File storage grows faster than teams expect. Course backups, SCORM packages, assignment uploads and video all land in the data directory. Budget for growth, keep backups off the server, and move video to a dedicated platform early.

Cron, background tasks and exam-day peaks

Moodle expects its cron to run every minute from the command line, not over HTTP. By default only three scheduled tasks and three ad hoc tasks run at the same time; the limits can be raised in the configuration. On a large site, run cron on its own node and add a long-running ad hoc task worker, so that certificate generation, notifications and course restores do not slow down learner traffic.

Exam days need their own plan:

  1. Schedule heavy jobs such as backups, report generation and HR syncs away from exam windows.
  2. Scale the web tier up before the exam, not when the alerts start.
  3. Stagger start times when you can. Starting 3,000 candidates in one minute is much harder than starting them over 15 minutes.
  4. Watch database connections and slow-query logs during the first live exam, then adjust.

Our post on Moodle performance optimization goes deeper into tuning PHP, the database and caches.

How to load test before go-live

A load test turns the sizing table into numbers you can defend. Moodle ships a JMeter test plan generator under Site administration, Development, Make JMeter test plan, with a command-line version in the tool_generator plugin. It creates test courses and a plan in sizes from XS to XXL. The documentation is clear that it is a developer tool: it only works with debugging set to developer level, and the older Moodle developer docs warn that these tools load the server to its limit and beyond. Never run it against production.

A practical approach:

  1. Build a staging environment that matches production in versions and configuration, with a copy of real courses if your data policy allows it.
  2. Script the journeys that matter most: login, opening a course, a quiz attempt, a SCORM launch and a forum post.
  3. Ramp up to your planning peak, then to 1.5 times that peak, and record response times and errors.
  4. Find the first resource to saturate, whether CPU on the web nodes, database connections, disk I/O or Redis memory, fix it, and repeat.

Keep the results. They are the evidence your security and procurement teams will ask for, and they give you a baseline for the next upgrade.

On-premise, cloud VM or managed hosting

Self-hosting means you own every layer below the LMS. Before you commit, check that someone owns each item on this list.

AreaWhat self-hosting requires
PatchingOperating system, PHP, database and LMS security releases applied on a schedule
BackupsDatabase and file backups stored off the server, with a restore tested at least once a year
MonitoringUptime, response time, disk space, database load and cron health, with alerts to a person
SecurityTLS, firewall rules, SSO configuration and access logs; see the requirements in your security policy
UpgradesA staging copy to test each major release and its plugins before production
CapacityA quarterly review of growth in learners, storage and peak load

A cloud VM gives you elastic capacity for exam peaks and managed databases that handle backups and replicas. On-premise hosting suits organisations with strict data-residency rules or existing data centre teams. Managed hosting from a platform partner shifts patching and monitoring to someone else while keeping the open-source licence. When you compare the options, use our LMS features checklist so the hosting decision does not quietly remove a feature you need.

How we can help

We size, build and tune self-hosted LMS environments, from a single Moodle server to load-balanced clusters with read replicas, and we run the load tests that prove them. If you need changes to the platform itself, our LMS customization team can quote for that too. Tell us your learner numbers and peak events, and we will suggest an architecture and an estimate.

Frequently asked questions

What are the minimum server requirements for Moodle?

For Moodle 5.3, the official minimums are 64-bit PHP 8.3 and PostgreSQL 17, MySQL 8.4, MariaDB 11.4 or SQL Server 2019. The installation guide lists 512 MB of RAM as an absolute minimum and 1 GB or more as recommended, but a production site with real users needs far more than that.

How much RAM does an LMS server need?

A small site of around 1,000 active learners can run on 8 to 16 GB on one server. Larger sites split the load, so the database server alone may need 32 to 128 GB to keep its working data in memory. Confirm your figure with a load test.

Can I host an LMS on shared hosting?

Some PHP-based products support capable shared hosting for small audiences. Open-source platforms with heavy background tasks, such as Moodle, are better on a VPS or dedicated server, where you control cron, PHP settings and caching.

How many concurrent users can one LMS server handle?

There is no reliable fixed number. It depends on what users do, the plugins installed, caching and the database. Totara's documentation gives one example of about 500 concurrent users on a 16 GB server, but only a load test with your own courses will tell you your limit.

Ready when you are

Get a scoped estimate for your LMS project

Share your requirements and get a cost range, timeline and delivery plan within one business day.

Sources & references

  1. Moodle 5.3 release notes (server requirements) - Moodle
  2. Installing Moodle (hardware requirements) - Moodle Docs
  3. Performance recommendations - Moodle Docs
  4. Cron - Moodle Docs
  5. JMeter test plan generator - Moodle Docs
  6. Redis cache store - Moodle Docs
  7. Moodle 5.1 release notes (/public directory) - Moodle
  8. Server and system requirements - Totara
  9. Tutor requirements - Tutor (Open edX)
  10. Tutor changelog (v22, Verawood) - Overhang.IO
  11. Canvas LMS Production Start - Instructure
  12. ILIAS installation and maintenance (ILIAS 11) - ILIAS
  13. MySQL 8.0 release notes (end of life) - Oracle
  14. PostgreSQL versioning policy - PostgreSQL Global Development Group
  15. Supported PHP versions - PHP
  16. LMS Advisor pricing and deployment options - LMS Advisor
Add as a preferred source on Google

Add All-in-One LMS as a preferred source to see more of our articles in Google’s Top Stories.

Learn more about this topic with AI

Gemini opens with the prompt copied - paste it into the chat to start.

Keep reading

Illustration of certificate with credit-hours counter, representing best lms for continuing education

· 12 min read

Best LMS for Continuing Education (CE and CPD)

Nine LMS platforms for CE and CPD providers scored on a published rubric: credit tracking, expiring certificates, AMS integration, member pricing and…

Before you go - get a free LMS audit

Tell us which LMS you use and what is not working. An engineer replies within one business day.

Choose which optional cookies we may use. You can change this at any time from "Cookie preferences" in the footer. Cookie policy · Privacy policy