Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
Skip to content
World desk7 min

Deploying a Full-Stack LMS on Shared Hosting + Render (Free): The Hard Way

Moodle belongs on shared hosting with durable storage. Render's free tier can host stateless parts only: its filesystem resets, its free Postgres expires after 30 days, and idle services take about a minute to wake.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Run Moodle itself on shared hosting, and use Render’s free tier only for stateless pieces such as a test frontend or a small API. Render’s free web services lose their filesystem on every restart, redeploy, or spin-down, and its free Postgres expires after 30 days, so neither can safely hold course uploads or a live LMS database. This guide explains how to split the stack, what each side requires, and where the free route breaks down.

Decide what runs where before you touch a server

“Full-stack LMS on shared hosting plus Render” can mean several different architectures, and they carry very different risks. Standard Moodle is a PHP application with its own database and a data directory for uploads. It is installed as one unit, not automatically split between two hosts. Splitting it means you have chosen a custom architecture, and you are responsible for the glue between the two halves.

As an Amazon Associate I earn from qualifying purchases.

The table below maps each component to a host and states whether it needs durable storage. Durability is the deciding factor.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Component Suitable host in this setup Needs durable storage? Notes
Moodle application code (PHP) Shared hosting, following MoodleDocs’ cPanel installation guide Yes, the files must persist This is the documented path for Moodle 5.1 on cPanel.
Moodle data directory (moodledata) Shared hosting, outside the public web root Yes, uploads and session data Render free web services cannot hold it. Back it up with your host’s tools.
Moodle database Shared hosting: MySQL 8.4, MariaDB 10.11.0, or PostgreSQL 13 minimum for Moodle 5.1 Yes Not stated as available on Render’s free Postgres for production use.
Custom frontend (static build) Render Static Site No server state Render documents Static Sites for content made entirely of static assets.
Custom backend or API Render Web Service Only stateless logic Keep no uploads or user data on its local disk.

If your project’s frontend or API is written in a language other than PHP, the Render side is your own application. The shared-hosting side remains Moodle. Keep that boundary in mind for every step below.

Requirements for the shared-hosting route

The instructions below apply to Moodle 5.1. Check the release you intend to install against the official Moodle requirements before you begin, because minimum versions change between releases.

  • PHP 8.2 or newer, with the extensions the guide lists: sodium, curl, openssl, mbstring, xml, intl, json, and fileinfo.
  • PHP settings: memory_limit of at least 128M, max_input_vars of 5000 or higher, and file uploads enabled.
  • Database: MySQL 8.4, MariaDB 10.11.0, or PostgreSQL 13 minimum, as stated in the Moodle 5.1 guide.
  • Hosting tools: a plan that includes SSL, plus access to PHP Selector, phpMyAdmin, a database wizard or manager, Terminal, and File Manager.
  • Directory layout: a moodledata directory outside the public web root. The guide creates ~/moodledata and links the Moodle public directory into public_html.
  • Host answers: written answers on CPU and memory limits, whether scheduled tasks (cron) can run, how backups and restores work, and what student load the plan is meant for.

MoodleDocs describes shared hosting as a moderate-cost option for providing access to a small number of students on a self-managed Moodle site. The same passage warns that performance problems and student-number restrictions may appear. The guide does not give a numeric enrollment ceiling, so treat your own load test as the only reliable measure.

Install Moodle 5.1 on cPanel

Follow MoodleDocs’ cPanel Shared Hosting Installation guide in its own order. The steps below summarise the sequence and the cPanel location for each task.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Select the PHP version. Open PHP Selector in cPanel, choose PHP 8.2 or newer, and enable the extensions listed above. Confirm the version on the PHP Selector page before continuing.
  2. Adjust PHP limits. Set memory_limit to at least 128M and max_input_vars to 5000 or higher. If your host manages these through a separate PHP configuration screen, use that screen instead.
  3. Create the database and user. Use the database wizard or MySQL Databases screen to create a database, a user, and a password, then grant the user all privileges on that database. Use phpMyAdmin to confirm the connection works.
  4. Place the code and data directory. Use File Manager or Terminal to download Moodle 5.1 and create ~/moodledata outside public_html. Set the directory permissions that the installer asks for.
  5. Link the public directory. Follow the guide to link Moodle’s public directory into public_html, so the site is served while the data directory stays out of reach of the web.
  6. Run the web installer. Open your domain in a browser over HTTPS, complete the installer, and enter the database details from step 3 and the data directory path from step 4.
  7. Schedule cron. In cPanel, open Cron Jobs and point a job at Moodle’s admin/cli/cron.php using the PHP binary path your host provides. Moodle’s own cron documentation describes the expected frequency. If your host does not allow cron jobs, do not go live until you have an alternative.

Test the result by logging in, uploading a small file, and running a course backup. If the upload succeeds but the file does not appear after a refresh, check the data directory path and permissions before anything else.

What Render’s free tier does and does not guarantee

Render’s documentation separates a Web Service, for server-side code, from a Static Site, for purely static assets. Services are created from a connected Git repository with a branch, build command, start command, and environment variables. The FAQ states that PHP applications can be deployed through a Docker image, and recommends separate services for frontend, backend, and datastore roles.

The free-tier limits below are as published in Render’s free-tier documentation when this article was written. Render changes these terms, so check the current page before you deploy.

Resource Free tier limit What it means for an LMS
Web service idle timeout Spins down after 15 consecutive minutes with no inbound traffic The first request after idle is slow
Wake-up time About one minute Students may see a long loading screen or timeout
Filesystem Ephemeral; changes are lost on redeploy, restart, or spin-down Local uploads or local databases are not safe
Free Postgres storage 1 GB Too small and too temporary for course content
Free Postgres lifetime 30 days, with no backups Data is lost unless you move it
Upgrade grace period 14 days after expiry before deletion A short window to recover, not a backup
Instance hours 750 per workspace per calendar month, shared across free web services in that workspace Several free services draw from the same pool
Production use Render says not to use free instances for production applications Treat the free route as testing or a hobby project
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Connecting a Render frontend or API to Moodle

When a frontend on Render needs Moodle data, the browser or your Render backend talks to Moodle over HTTPS. Two design rules prevent most of the trouble.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Keep Moodle credentials on the server side. Do not put a Moodle web services token in frontend JavaScript. Store it as a Render environment variable on a backend service and have the frontend call that backend.
  • Use HTTPS on both ends. Moodle on shared hosting should be served over SSL, and so should every Render service. Mixed HTTP and HTTPS calls fail silently in browsers.

To connect the pieces, enable Moodle’s web services for a dedicated service account, create a token with only the functions your app needs, and test the endpoint from a terminal with curl before you wire up the frontend. If the browser calls Moodle directly, the Moodle host must answer cross-origin preflight requests for your frontend’s origin. Confirm that behaviour on your Moodle version before relying on it. A small backend proxy on Render is often simpler, because it avoids cross-origin configuration on the Moodle host altogether.

Plan for the cold start. Your frontend should show a loading state, use a timeout of at least a minute for the first call, and retry once if the request fails. This does not fix the free tier’s idle behaviour, but it stops a sleeping backend from looking like a broken course page.

Failure modes and recovery

  • Uploads disappear after a Render deploy. Local files on a free web service are not kept. Move uploads to Moodle’s data directory on the shared host, or to external storage you control, and never write them to the Render container.
  • The site works, then the database expires. A free Render Postgres lasts 30 days and has no backups. Do not host the production database there. If it was used for testing, export what you need within the 14-day grace period after expiry.
  • The first request times out. This is the spin-down. Increase the frontend timeout and show a loading state, as described above.
  • Moodle slows down with more users. This matches the performance warning in MoodleDocs’ shared-hosting guide. Measure response times with real student traffic and ask the host about CPU and memory limits before adding courses.
  • Scheduled tasks stop running. Check the cron job in cPanel and the Moodle site’s scheduled task status. Moodle features that rely on background tasks, such as some notifications and reports, will stop without it.

When this setup stops being sensible

This architecture suits a learning project, a single course cohort, or an internal pilot with a known small group. It stops being sensible once you need reliable backups you control, a guaranteed uptime target, or enrollment that the shared host’s limits cannot handle. At that point, move Moodle and its database to a plan or platform sized for the load, and keep Render for the parts that truly do not need to store state.

Before choosing any host, confirm the current plan against Moodle’s requirements for your release, including PHP version, database version, cPanel tools, SSL, cron, and backup policy. The sources cited here do not verify any named hosting provider’s current plans or prices, so do not assume a plan meets these requirements without checking it directly.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The free route on both sides is a good way to learn how the parts fit together. It is a poor place to store anything you would be sorry to lose.

The Bottom Line

“”

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.