I tried Moodle web hosting the hard way (and the easy way)

I run a small learning site. It’s Moodle, with real students and real mess. Quizzes, videos, badges—the whole deal. I’ve broken things at 2 a.m. I’ve also had nights where it all just worked, which feels like a small miracle.
If you want every gritty detail of that first big experiment, I wrote up the full diary for fellow tinkerers.

Here’s the thing. Hosting Moodle is not like hosting a cute blog. It can be heavy, fast, and a bit picky. I’ve used four hosts for real classes. I’ll tell you what went great, what stung, and what I’d pick now.
For a researched overview of other options, see this list of the top Moodle hosting providers.

My setup, so you know I’m not guessing

  • Moodle 4.2 and then 4.3
  • Around 320 active learners at peak
  • H5P, BigBlueButton, and Moove theme
  • Cron set to run every minute
  • Redis for sessions on some hosts
  • SMTP mail via SendGrid
  • Backups daily (database + moodledata)

On big quiz nights, I’ve seen 120 students hit “Start” in the same 10 minutes. That’s when weak hosting cries.

MoodleCloud: the super fast start

I spun up MoodleCloud when I needed a clean site fast. It took me maybe 10 minutes. No scary setup. SSL worked. Email went out. The admin area felt like home right away.

But I bumped into guardrails pretty quick. Storage was tight on my plan. Some plugins weren’t allowed on my tier back then, and that slowed my course ideas. Branding felt a bit boxed in too.

Speed was good with small classes. My test course ran smooth with 25 students. But when I tried a large quiz window, I got a few kids saying a page took “forever.” Not forever-forever—like 3 to 4 seconds. That’s fine for most, but during timed quizzes, you feel it.

Would I use it again? Yes, for a simple school or a pilot. It’s like a furnished apartment. You don’t move walls, but you can live there fast.

SiteGround shared hosting: okay, until the crowd shows up

I ran Moodle on SiteGround’s GrowBig plan for about six months. The app installer worked. Cron was easy to set. I loved their support—chat agents were quick, and they didn’t make me feel silly.

Light days were fine. Pages loaded in about one second or so. Video embeds were smooth. Then came “Quiz Night.” Around 8 p.m., 100+ students piled in. I saw a few 502 errors, and some kids got stuck on “Loading.” It felt like a tiny car pulling a trailer up a hill. It moves, but it groans.
One clear way to dodge the noisy-neighbor effect is by springing for a dedicated IP—I tested that route here and the headroom was obvious.

I did get an agent to move me to a quieter server. That helped a bit. But shared is still shared. When a neighbor site gets busy, your site can slow down too.

Would I use it again? For small classes, sure. For heavy use, I’d pass.

DigitalOcean droplet: power and chores

Then I went DIY. I set up a DigitalOcean droplet and did the stack myself:

  • Ubuntu 22.04 LTS
  • Nginx
  • PHP 8.1 (FPM tuned; I did bump pm.max_children a bit)
  • MariaDB 10.6 (I raised the buffer pool)
  • Redis for sessions
  • Let’s Encrypt SSL
  • Cron every minute

I later compared that manual certificate dance to the fully automated setup in this walkthrough, and the time saved was real.

It took an evening and two coffees. I followed their docs and a couple Moodle forum posts. I also set a 2 GB swap file—helpful under load.

Here’s the best part. On a 2 GB droplet, basic use felt snappy. But I still got small spikes on big quiz starts. I moved up to 4 GB RAM, kept Redis, and turned on HTTP/2. That did the trick. A test with 120 students hit about 70% CPU, but pages held under 1.5 seconds for most folks. No meltdown. Kids finished on time. My shoulders dropped.

Backups? I ran a nightly script: mysqldump for the DB and a tar for moodledata, pushed to object storage. I also kept weekly snapshots. I did one upgrade with Git (MOODLE_402_STABLE to 403) and it felt clean, but I held my breath the whole time.

Cost was low for the power. But you are the “IT person.” Security updates, PHP bumps, all that. If you miss a patch, you get that pit-in-the-stomach feeling.

Cloudways (on DigitalOcean): the comfy middle

I later moved to Cloudways on a 2 GB DO server, then 4 GB for a term with lots of quizzes. It gave me a nice panel, logs, and one-click stuff like Redis and New Relic. Cron setup took a minute. PHP versions were easy to switch without breaking a sweat.

Support helped me fix a Redis path issue in 15 minutes. I liked the staging tool too. I tested Moodle upgrades there before touching the live site. That saved me once when a plugin acted grumpy on PHP 8.2.

How fast was it? With 4 GB and Redis, it matched my hand-tuned box and maybe felt a hair smoother at peak. Not magic, but solid. Uptime was strong. My UptimeRobot log over three months showed one short blip during a server reboot window.

It does cost more than raw DigitalOcean. But it saved time, and that mattered during finals week.

Real moments that stuck with me

  • The quiz pileup: On SiteGround, I saw 502 errors at 8:07 p.m. On Cloudways 4 GB, same class, no errors—just a few pages at 1.7 seconds. Kids teased me less. I’ll take it.
  • The late-night fix: On my DIY droplet, I messed up a PHP setting and took down cron. Grades didn’t sync for an hour. I caught it, but I felt that cold sweat. With Cloudways, I set monitors and got a ping when cron failed. That saved me later.
  • Video week: I had five H5P activities with videos. MoodleCloud handled it okay for 30 students, but file storage limits made me prune things often. With DO + object storage, I relaxed a bit. Less “What can I delete?” chatter. For a sense of how extreme continuous video streaming loads can get—think cam platforms that push multiple HD feeds at once—you can look at the traffic analysis over on JerkMate which walks through exactly how many concurrent viewers and bitrates a service like that accommodates, offering a neat benchmark when you’re sizing servers for media-heavy Moodle setups.
  • The classifieds spike: To get a feel for how hyper-local sites can create short, sharp bursts of traffic, I poked around the Arizona market. A quick scroll through Backpage Glendale lets you watch fresh ads and viewer counts climbing in real time, a handy reference when you’re stress-testing cache settings and session limits on your own server.
  • The regional test: I moved a small course to a Zagreb server (full take here) to see how Balkan latency felt for EU students.
  • The tulip speed check: Hosting in Amsterdam shocked me with flat-out fast TTFB—my Holland notes are here.
  • The humid heat trial: A summer course on a Miami server gave me both sun and snags—read the Miami story.
  • The down-under sprint: Testing a Brisbane host taught me how distance hits video calls; details in my Brisbane recap.

Speed, uptime, and simple numbers

  • MoodleCloud: fast setup; light use felt quick; storage limits nudged me often.
  • SiteGround GrowBig: fine for 30 to 50 users; large quiz windows caused slowdowns and a few gateway errors.
  • DigitalOcean DIY (4 GB): fast and steady under 120 active users; needs care and patching; cheapest for the power.
  • Cloudways (4 GB DO): matched DIY speed; easier life; a bit pricier.

Tip: you can run the Moodle Benchmark plugin on any server to get objective scores for CPU, database, and file-system performance.

My bills at the time:

  • DigitalOcean 4 GB: about $24/month
  • Cloudways 4 GB (DO):