{"id":659,"date":"2026-05-29T21:58:54","date_gmt":"2026-05-29T21:58:54","guid":{"rendered":"https:\/\/www.ahosting.net\/blog\/?p=659"},"modified":"2026-05-31T22:36:28","modified_gmt":"2026-05-31T22:36:28","slug":"wordpress-hosting-for-online-courses","status":"publish","type":"post","link":"https:\/\/www.ahosting.net\/blog\/wordpress-hosting-for-online-courses\/","title":{"rendered":"WordPress Hosting for Online Courses: LMS Requirements &amp; Setup Guide 2026"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What makes WordPress hosting for online courses different from regular WordPress hosting?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Essentially, LMS sites generate far more database writes than standard WordPress blogs. Every quiz submission, lesson completion, course progress update, and student login triggers database transactions that a basic shared plan was not designed to absorb. WordPress hosting for online courses needs a higher PHP memory limit (256 MB minimum), object caching support, and NVMe SSD storage to keep those transactions fast under concurrent load.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How much RAM does a WordPress LMS site need?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Typically, a WordPress LMS site needs at least 256 MB of PHP memory per site for smooth operation with plugins like LearnDash or LifterLMS. For sites with 100 or more concurrent students, 512 MB or more is advisable. The memory limit is a hosting-level setting \u2014 check your cPanel PHP Settings or ask your host before installing an LMS plugin.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Can shared hosting run a WordPress LMS like LearnDash or LifterLMS?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Yes, shared hosting can run a WordPress LMS for early-stage course sites with fewer than 100 active students, provided the host offers PHP 8.1 or higher, a 256 MB PHP memory limit, and NVMe SSD storage. Once you cross 100 concurrent users, process more than 30 quiz submissions per minute, or add video courses, VPS hosting becomes the more reliable choice.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What PHP version do I need for LearnDash in 2026?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Specifically, LearnDash 4.x and above requires PHP 7.4 as a minimum, but the LearnDash team recommends PHP 8.1 or higher for full feature compatibility and performance in 2026. PHP 8.3 is the recommended version according to WordPress.org and delivers meaningful speed improvements for LMS database-heavy operations.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Do I need special hosting to serve course videos on WordPress?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Moreover, self-hosting course videos on WordPress requires FFmpeg support at the server level for video transcoding, format conversion, and delivery optimization. Without FFmpeg, raw video files are served as-is \u2014 large, slow, and incompatible with all browsers. AHosting's FFmpeg hosting plans include server-side FFmpeg support specifically for video transcoding workloads.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"When should I upgrade from WordPress shared hosting to a VPS for my course site?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Generally, the five clearest signals that your course site has outgrown shared hosting are: more than 100 concurrent active students, consistent TTFB above 600 ms, CPU usage hitting 80 percent or more in your cPanel resource log, WooCommerce checkout timeouts during course launches, and five or more live video courses consuming significant storage and bandwidth simultaneously.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Does WooCommerce add extra hosting requirements when selling courses?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Indeed, WooCommerce adds significant database write pressure on top of the LMS plugin's own activity. Each checkout creates an order record, triggers payment gateway API calls, and logs customer data simultaneously. Object caching (Redis or Memcached), a PHP memory limit of at least 512 MB, and a host with isolated resources prevents checkout slowdowns from affecting your students' course experience.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is object caching and why does it matter for WordPress LMS sites?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Furthermore, object caching stores the results of repeated database queries in memory using Redis or Memcached, so your server does not re-run the same query each time a student loads their dashboard. For LMS sites where every student sees a unique progress state, object caching dramatically reduces database load compared to standard page caching, which cannot cache logged-in user views.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"How many students can a shared WordPress hosting plan support?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"In practice, a well-configured shared WordPress hosting plan with PHP 8.1, 256 MB memory, and an object cache can support 50 to 100 concurrent active students reliably. Sites with large course libraries, video content, and active WooCommerce selling consistently exceed these limits and experience checkout timeouts or slow dashboards once active enrollment grows past that threshold.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What hosting features should I look for when launching a WordPress LMS site?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Ultimately, the essential hosting features for a WordPress LMS site are: PHP 8.1 or higher, a 256 MB or higher PHP memory limit, NVMe SSD storage, object caching support (Redis or Memcached), CloudLinux or similar resource isolation so other accounts do not affect your performance, daily backups, a staging environment for testing plugin updates, and SSL included. Bonus: FFmpeg support for self-hosted video courses.\"\n      }\n    }\n  ]\n}\n<\/script>\n\n\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-what-makes-wordpress-lms-hosting-different-from-standard-hosting-5\">What Makes WordPress Hosting For Online Courses Different from Standard Hosting<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-minimum-server-requirements-for-a-wordpress-lms-site-in-2026-10\">Minimum Server Requirements for WordPress Hosting for Online Courses &amp; LMS Sites in 2026<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-why-php-8-3-matters-for-lms-performance-in-2026-factor-1-14\">Why PHP 8.3 Matters for LMS Performance in 2026: Factor 1<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-can-shared-hosting-run-a-wordpress-lms-the-real-answer-18\">Can Shared Hosting Run WordPress Hosting for Online Courses &amp; LMS? The Real Answer<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-course-video-hosting-why-ffmpeg-support-changes-everything-35\">Course Video Hosting: Why FFmpeg Support Changes Everything<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-when-to-upgrade-from-wordpress-hosting-to-a-vps-5-signals-42\">When to Upgrade from WordPress Hosting to a VPS: 5 Signals<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-signal-1-concurrent-active-students-exceed-100-45\">Signal 1: Concurrent Active Students Exceed 100<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-signal-2-ttfb-climbs-above-600-milliseconds-47\">Signal 2: TTFB Climbs Above 600 Milliseconds<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-signal-3-cpanel-resource-usage-logs-show-cpu-at-80-percent-or-higher-49\">Signal 3: cPanel Resource Usage Logs Show CPU at 80 Percent or Higher<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-signal-4-woocommerce-checkout-timeouts-during-course-launches-51\">Signal 4: WooCommerce Checkout Timeouts During Course Launches<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-signal-5-five-or-more-video-courses-with-self-hosted-files-53\">Signal 5: Five or More Video Courses with Self-Hosted Files<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-setting-up-wordpress-for-online-courses-5-essential-hosting-steps-57\">Setting Up WordPress Hosting for Online Courses: 5 Essential Hosting Steps<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-first-step-confirm-your-php-version-and-memory-limit-59\">First Step: Confirm Your PHP Version and Memory Limit<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-second-step-enable-object-caching-at-the-server-level-61\">Second Step: Enable Object Caching at the Server Level<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-third-step-optimize-your-database-before-student-activity-builds-63\">Third Step: Optimize Your Database Before Student Activity Builds<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-fourth-step-configure-cloudflare-cdn-for-static-assets-not-logged-in-pages-65\">Fourth Step: Configure Cloudflare CDN for Static Assets (Not Logged-In Pages)<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-fifth-step-create-a-staging-environment-and-test-every-plugin-update-there-first-67\">Fifth Step: Create a Staging Environment and Test Every Plugin Update There First<\/a><\/li><\/ul><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-woocommerce-and-lms-selling-courses-requires-payment-grade-hosting-70\">WooCommerce and LMS: Selling Courses Requires Payment-Grade Hosting<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-ahostings-22-year-foundation-for-online-course-hosting-76\">AHosting&#039;s 22-Year Foundation &#8211; The Perfect WordPress Hosting For Online Courses Hosting<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-is-your-wordpress-hosting-ready-for-your-online-course-pre-launch-checklist-85\">Is Your WordPress Hosting For Online Courses Ready? Pre-Launch Checklist<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-conclusion-the-right-hosting-foundation-for-your-online-course-112\">Conclusion: The Right WordPress Hosting for Online Courses is your Foundation for Success<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-lms-hosting\">Frequently Asked Questions: WordPress LMS Hosting<\/a><ul><li><a class=\"aioseo-toc-item\" href=\"#faq-lms-hosting-different\">What makes WordPress hosting for online courses different from regular WordPress hosting?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-lms-ram-needed\">How much RAM does a WordPress LMS site need?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-shared-hosting-lms\">Can shared hosting run a WordPress LMS like LearnDash or LifterLMS?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-php-version-learndash\">What PHP version do I need for LearnDash in 2026?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-course-video-hosting\">Do I need special hosting to serve course videos on WordPress?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-upgrade-to-vps\">When should I upgrade from WordPress shared hosting to a VPS for my course site?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-woocommerce-lms-hosting\">Does WooCommerce add extra hosting requirements when selling courses?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-object-caching-lms\">What is object caching and why does it matter for WordPress LMS sites?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-shared-hosting-student-count\">How many students can a shared WordPress hosting plan support?<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#faq-lms-hosting-features\">What hosting features should I look for when launching a WordPress LMS site?<\/a><\/li><\/ul><\/li><\/ul><\/div>\n\n\n<div class=\"ah-tldr\">\n  <span class=\"ah-tldr-badge\">TL;DR<\/span>\n  WordPress hosting for online courses requires PHP 8.1 or higher, a 256 MB PHP memory limit, NVMe SSD storage, and object caching support. Shared hosting works for up to 100 concurrent students; beyond that, a VPS upgrade is the reliable path. If you self-host course videos, you also need FFmpeg support \u2014 a feature most hosts skip entirely.\n<\/div>\n\n\n\n<figure class=\"wp-block-audio\"><audio controls src=\"https:\/\/www.ahosting.net\/blog\/wp-content\/uploads\/2026\/05\/Bulletproof_WordPress_Hosting_for_Online_Courses.m4a\"><\/audio><figcaption class=\"wp-element-caption\">Listen to Podcast &#8211; Part of the Ahosting WordPress Podcast Series<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress hosting for online courses is a fundamentally different infrastructure challenge from hosting a blog or a brochure site, and choosing the wrong plan before you launch will cost you students, sales, and hours of troubleshooting mid-course. This guide covers the exact server requirements your LMS site needs, the honest answer to whether shared hosting is enough, how to handle course video delivery with FFmpeg, and the five signals that tell you it is time to upgrade to a VPS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"aioseo-what-makes-wordpress-lms-hosting-different-from-standard-hosting-5\" class=\"wp-block-heading\">What Makes WordPress Hosting For Online Courses Different from Standard Hosting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress hosting for online courses creates a constant stream of database write activity that ordinary shared plans were not designed to absorb. Every student interaction \u2014 a lesson marked complete, a quiz submitted, a progress percentage updated, a certificate generated \u2014 writes to the WordPress database in real time. On a standard blog, most traffic is read-only: visitors load cached pages and the database barely moves. On an LMS site, every logged-in student triggers live writes with every click.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The practical result is that standard caching strategies do not work the same way. Full-page caching, which makes most WordPress sites fast, <a href=\"https:\/\/wordpress.org\/plugins\/lifterlms\/\" target=\"_blank\" rel=\"noopener\" title=\"\">cannot cache pages for logged-in users<\/a> \u2014 and all of your students are logged in. That means every dashboard load, every lesson page, and every quiz result hits your server fresh. Your hosting stack has to be ready for that.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three infrastructure differences matter most for LMS workloads: PHP memory limits, object caching availability, and database I\/O throughput. We cover each in the sections below.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"aioseo-minimum-server-requirements-for-a-wordpress-lms-site-in-2026-10\" class=\"wp-block-heading\">Minimum Server Requirements for  WordPress Hosting for Online Courses &amp; LMS Sites in 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The server requirements for a WordPress LMS site start from the official <a href=\"https:\/\/www.ahosting.net\/blog\/wordpress-7-0-hosting-requirements-is-your-host-ready\/\" target=\"_blank\" rel=\"noopener\" title=\"\">WordPress 7.0 Hosting Requirements<\/a> but go significantly further once you add an LMS plugin on top.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Requirement<\/th><th>WordPress Minimum<\/th><th>LMS Recommended<\/th><th>Power LMS (100+ students)<\/th><\/tr><\/thead><tbody><tr><td>PHP version<\/td><td>7.4<\/td><td><strong>8.1<\/strong><\/td><td><strong>8.3<\/strong><\/td><\/tr><tr><td>PHP memory limit<\/td><td>64 MB<\/td><td><strong>256 MB<\/strong><\/td><td><strong>512 MB<\/strong><\/td><\/tr><tr><td>Database<\/td><td>MySQL 5.7 \/ MariaDB 10.4<\/td><td>MySQL 8.0 \/ MariaDB 10.6<\/td><td>Same<\/td><\/tr><tr><td>Storage type<\/td><td>HDD (any)<\/td><td><strong>NVMe SSD<\/strong><\/td><td><strong>NVMe SSD<\/strong><\/td><\/tr><tr><td>Object caching<\/td><td>Not required<\/td><td><strong>Redis or Memcached<\/strong><\/td><td><strong>Redis (required)<\/strong><\/td><\/tr><tr><td>Web server<\/td><td>Apache \/ Nginx<\/td><td>Any + LiteSpeed preferred<\/td><td>LiteSpeed + LSCache<\/td><\/tr><tr><td>SSL<\/td><td>Required<\/td><td>Required<\/td><td>Required<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PHP memory limit is the single most common LMS failure point.<\/strong> LearnDash, LifterLMS, and TutorLMS each load significant amounts of data into memory during course rendering. A 64 MB or 128 MB memory limit \u2014 common on budget shared hosting \u2014 causes &#8220;Allowed memory size exhausted&#8221; fatal errors under normal student activity. Always confirm the memory limit with your host before installing an LMS plugin.<\/p>\n\n\n\n<h3 id=\"aioseo-why-php-8-3-matters-for-lms-performance-in-2026-factor-1-14\" class=\"wp-block-heading\">Why PHP 8.3 Matters for LMS Performance in 2026: Factor 1<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">PHP 8.3 delivers measurably faster execution for object-heavy PHP workloads than PHP 7.4 \u2014 the kind of workload an LMS plugin produces constantly. According to benchmarks published by the PHP project and corroborated by <a href=\"https:\/\/fatlabwebsupport.com\/blog\/web-hosting\/wordpress-hosting-requirements\/\" target=\"_blank\" rel=\"noopener\" title=\"\">hosting performance research<\/a>, PHP 8.3 handles 14 to 20 percent more requests per second than PHP 7.4 for typical WordPress workloads. For WooCommerce course sales, the gains are even larger: roughly 23 percent higher throughput.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PHP 8.1, 8.0, and 8.2 have all reached end-of-life or are approaching it. PHP 8.3 is the safe, well-supported choice for a new LMS build in 2026.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"aioseo-can-shared-hosting-run-a-wordpress-lms-the-real-answer-18\" class=\"wp-block-heading\">Can Shared Hosting Run WordPress Hosting for Online Courses &amp; LMS? The Real Answer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Shared hosting can run a WordPress LMS site \u2014 with specific conditions attached. At AHosting, we have been running WordPress sites on shared infrastructure since 2002 and have seen every configuration of LMS hosting succeed and fail. The honest answer depends on your course load, not just your plan tier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Shared hosting works for LMS when:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your active concurrent student count stays below 100<\/li>\n\n\n\n<li>You are running a single LMS plugin (not LearnDash + WooCommerce + a membership plugin simultaneously)<\/li>\n\n\n\n<li>Course content is text-based or embeds external video (YouTube, Vimeo) rather than self-hosted video files<\/li>\n\n\n\n<li>Your host provides a 256 MB PHP memory limit and NVMe SSD storage<\/li>\n\n\n\n<li>Object caching (Redis or Memcached) is available on the plan<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Shared hosting struggles when:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You run course launches that spike enrollment by 50 to 100 students simultaneously<\/li>\n\n\n\n<li>Host video files directly on your server (without FFmpeg transcoding, large files strain both storage and CPU)<\/li>\n\n\n\n<li>You run WooCommerce alongside your LMS (combined database writes during a launch can saturate shared resources)<\/li>\n\n\n\n<li>Your host uses HDD storage instead of NVMe SSD, producing slow database queries under concurrent load<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The dividing line in our 22 years of operational experience: a well-configured shared hosting plan on modern infrastructure (NVMe, LiteSpeed, PHP 8.1+, Redis) serves early-stage course creators reliably. The moment a course launch sends simultaneous signups past 80 to 100 active users, the shared environment&#8217;s resource-sharing model becomes the bottleneck.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"WordPress Hosting for Online Courses: LMS Setup Guide 2026\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/BlYFQPgtN_Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 id=\"aioseo-course-video-hosting-why-ffmpeg-support-changes-everything-35\" class=\"wp-block-heading\">Course Video Hosting: Why FFmpeg Support Changes Everything<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Self-hosting video content on WordPress is where most course creators run into an infrastructure wall that has nothing to do with their LMS plugin. Raw video files \u2014 the .mp4 or .mov files that come off a camera or screen recorder \u2014 are large, inconsistently formatted, and incompatible with all browsers without conversion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FFmpeg is the industry-standard open-source tool that transcodes video into web-optimized formats: H.264\/AAC for broad compatibility, multiple resolutions for adaptive bitrate streaming, and compressed file sizes that reduce storage costs and load times. Without FFmpeg running at the server level, raw video is delivered as-is \u2014 which means slow loads, failed playback on certain devices, and storage bills that grow faster than your student count.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most shared and managed WordPress hosts do not include FFmpeg. It requires dedicated server resources and configuration, which most hosting companies do not provide outside of their highest-tier VPS or dedicated plans.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AHosting&#8217;s FFmpeg hosting plans include server-side FFmpeg support alongside your WordPress environment. This means your course videos are transcoded, optimized, and served from the same hosting account as your LMS \u2014 without routing through a third-party video platform. For course creators who want full ownership of their video content and delivery, this is the configuration that makes self-hosting practical.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a detailed breakdown of how FFmpeg integrates with video hosting workflows, see our post on <a href=\"\/blog\/using-ffmpeg-hosting-to-build-audiences\/\" target=\"_blank\" rel=\"noopener\" title=\"\">using FFmpeg hosting to build audiences<\/a>.<\/p>\n\n\n\n<figure aria-label=\"WordPress LMS hosting architecture diagram showing the request flow from student browser through CloudLinux, LiteSpeed, PHP 8.3, object cache, and NVMe database layers \u2014 AHosting\">\n<svg viewBox=\"0 0 760 420\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\"\n  aria-labelledby=\"lms-arch-title lms-arch-desc\" style=\"max-width:100%;height:auto;display:block;\">\n  <title id=\"lms-arch-title\">WordPress LMS Hosting Architecture \u2014 AHosting<\/title>\n  <desc id=\"lms-arch-desc\">Diagram showing the request flow for a WordPress LMS site: Student Browser sends a request through Cloudflare CDN, then to LiteSpeed Web Server running under CloudLinux CageFS, which calls PHP 8.3, which checks Redis Object Cache before hitting the NVMe SSD database. All layers protected by SSL and Solid Security firewall.<\/desc>\n\n  <!-- Background -->\n  <rect width=\"760\" height=\"420\" fill=\"#0f172a\" rx=\"12\"\/>\n\n  <!-- Title -->\n  <text x=\"380\" y=\"32\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"15\" font-weight=\"700\" fill=\"#e2e8f0\">WordPress LMS Hosting Architecture<\/text>\n  <text x=\"380\" y=\"50\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"11\" fill=\"#64748b\">Request flow: student to database<\/text>\n\n  <!-- Flow boxes -->\n  <!-- Student -->\n  <rect x=\"30\" y=\"80\" width=\"110\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#2563eb\" stroke-width=\"2\"\/>\n  <text x=\"85\" y=\"107\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">Student<\/text>\n  <text x=\"85\" y=\"123\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">Browser<\/text>\n\n  <!-- Arrow 1 -->\n  <line x1=\"140\" y1=\"110\" x2=\"170\" y2=\"110\" stroke=\"#2563eb\" stroke-width=\"2\" marker-end=\"url(#arr)\"\/>\n\n  <!-- Cloudflare CDN -->\n  <rect x=\"170\" y=\"80\" width=\"110\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#f97316\" stroke-width=\"2\"\/>\n  <text x=\"225\" y=\"107\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">Cloudflare<\/text>\n  <text x=\"225\" y=\"123\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">CDN + SSL<\/text>\n\n  <!-- Arrow 2 -->\n  <line x1=\"280\" y1=\"110\" x2=\"310\" y2=\"110\" stroke=\"#f97316\" stroke-width=\"2\" marker-end=\"url(#arr2)\"\/>\n\n  <!-- LiteSpeed -->\n  <rect x=\"310\" y=\"80\" width=\"120\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#10b981\" stroke-width=\"2\"\/>\n  <text x=\"370\" y=\"104\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">LiteSpeed<\/text>\n  <text x=\"370\" y=\"120\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">Web Server<\/text>\n  <text x=\"370\" y=\"134\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"9\" fill=\"#10b981\">CloudLinux CageFS<\/text>\n\n  <!-- Arrow 3 -->\n  <line x1=\"430\" y1=\"110\" x2=\"460\" y2=\"110\" stroke=\"#10b981\" stroke-width=\"2\" marker-end=\"url(#arr3)\"\/>\n\n  <!-- PHP 8.3 -->\n  <rect x=\"460\" y=\"80\" width=\"110\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#8b5cf6\" stroke-width=\"2\"\/>\n  <text x=\"515\" y=\"107\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">PHP 8.3<\/text>\n  <text x=\"515\" y=\"123\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">256 MB+ RAM<\/text>\n\n  <!-- Arrow 4 -->\n  <line x1=\"570\" y1=\"110\" x2=\"600\" y2=\"110\" stroke=\"#8b5cf6\" stroke-width=\"2\" marker-end=\"url(#arr4)\"\/>\n\n  <!-- WordPress + LMS -->\n  <rect x=\"600\" y=\"80\" width=\"130\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#2563eb\" stroke-width=\"2\"\/>\n  <text x=\"665\" y=\"104\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">WordPress<\/text>\n  <text x=\"665\" y=\"120\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">+ LMS Plugin<\/text>\n  <text x=\"665\" y=\"134\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"9\" fill=\"#2563eb\">LearnDash \/ LifterLMS<\/text>\n\n  <!-- Vertical arrow down from WP -->\n  <line x1=\"665\" y1=\"140\" x2=\"665\" y2=\"200\" stroke=\"#64748b\" stroke-width=\"1.5\" stroke-dasharray=\"4,3\"\/>\n\n  <!-- Object Cache row -->\n  <rect x=\"460\" y=\"200\" width=\"110\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#f59e0b\" stroke-width=\"2\"\/>\n  <text x=\"515\" y=\"226\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">Redis Cache<\/text>\n  <text x=\"515\" y=\"242\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">Object Caching<\/text>\n\n  <!-- Arrow from WP to Cache -->\n  <line x1=\"665\" y1=\"200\" x2=\"575\" y2=\"230\" stroke=\"#f59e0b\" stroke-width=\"1.5\" marker-end=\"url(#arr5)\"\/>\n\n  <!-- NVMe DB -->\n  <rect x=\"600\" y=\"200\" width=\"130\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#06b6d4\" stroke-width=\"2\"\/>\n  <text x=\"665\" y=\"224\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">NVMe SSD<\/text>\n  <text x=\"665\" y=\"240\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">MySQL 8.0 DB<\/text>\n\n  <!-- Arrow WP to DB -->\n  <line x1=\"665\" y1=\"200\" x2=\"665\" y2=\"200\" stroke=\"#06b6d4\" stroke-width=\"1.5\"\/>\n\n  <!-- Cache HIT label -->\n  <text x=\"520\" y=\"290\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"11\" fill=\"#f59e0b\">Cache HIT<\/text>\n  <text x=\"520\" y=\"305\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#64748b\">No DB query needed<\/text>\n\n  <!-- FFmpeg box (bottom row) -->\n  <rect x=\"170\" y=\"280\" width=\"130\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#ef4444\" stroke-width=\"2\"\/>\n  <text x=\"235\" y=\"307\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">FFmpeg<\/text>\n  <text x=\"235\" y=\"323\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">Video Transcoding<\/text>\n\n  <!-- Label -->\n  <text x=\"235\" y=\"360\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#ef4444\">Course video delivery<\/text>\n\n  <!-- WooCommerce box -->\n  <rect x=\"30\" y=\"280\" width=\"120\" height=\"60\" rx=\"8\" fill=\"#1e293b\" stroke=\"#f97316\" stroke-width=\"2\"\/>\n  <text x=\"90\" y=\"307\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" font-weight=\"600\" fill=\"#e2e8f0\">WooCommerce<\/text>\n  <text x=\"90\" y=\"323\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#94a3b8\">Course sales + checkout<\/text>\n\n  <!-- Legend -->\n  <text x=\"30\" y=\"405\" font-family=\"system-ui,sans-serif\" font-size=\"10\" fill=\"#475569\">Diagram: AHosting LMS Stack \u2014 ahosting.net<\/text>\n\n  <!-- Arrow marker defs -->\n  <defs>\n    <marker id=\"arr\" markerWidth=\"8\" markerHeight=\"6\" refX=\"6\" refY=\"3\" orient=\"auto\">\n      <polygon points=\"0 0, 8 3, 0 6\" fill=\"#2563eb\"\/>\n    <\/marker>\n    <marker id=\"arr2\" markerWidth=\"8\" markerHeight=\"6\" refX=\"6\" refY=\"3\" orient=\"auto\">\n      <polygon points=\"0 0, 8 3, 0 6\" fill=\"#f97316\"\/>\n    <\/marker>\n    <marker id=\"arr3\" markerWidth=\"8\" markerHeight=\"6\" refX=\"6\" refY=\"3\" orient=\"auto\">\n      <polygon points=\"0 0, 8 3, 0 6\" fill=\"#10b981\"\/>\n    <\/marker>\n    <marker id=\"arr4\" markerWidth=\"8\" markerHeight=\"6\" refX=\"6\" refY=\"3\" orient=\"auto\">\n      <polygon points=\"0 0, 8 3, 0 6\" fill=\"#8b5cf6\"\/>\n    <\/marker>\n    <marker id=\"arr5\" markerWidth=\"8\" markerHeight=\"6\" refX=\"6\" refY=\"3\" orient=\"auto\">\n      <polygon points=\"0 0, 8 3, 0 6\" fill=\"#f59e0b\"\/>\n    <\/marker>\n  <\/defs>\n<\/svg>\n<figcaption>WordPress LMS hosting architecture: how student requests flow from browser through Cloudflare, LiteSpeed, PHP 8.3, Redis object cache, and NVMe database. AHosting serves all these layers from one hosting account. By Matt Chrust, Director of Business Development, AHosting.<\/figcaption>\n<\/figure>\n\n\n\n<h2 id=\"aioseo-when-to-upgrade-from-wordpress-hosting-to-a-vps-5-signals-42\" class=\"wp-block-heading\">When to Upgrade from WordPress Hosting to a VPS: 5 Signals<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your shared WordPress hosting plan has a natural capacity ceiling. That ceiling is not posted in your plan&#8217;s feature list \u2014 it appears at runtime, usually during a course launch at the worst possible moment. Recognizing the upgrade signals before you hit the wall is the difference between a planned migration and an emergency one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At AHosting, we have watched these five patterns consistently precede the decision to upgrade:<\/p>\n\n\n\n<h3 id=\"aioseo-signal-1-concurrent-active-students-exceed-100-45\" class=\"wp-block-heading\">Signal 1: Concurrent Active Students Exceed 100<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Shared hosting resource pools are designed for burst traffic, not sustained concurrent load. A course launch that enrolls 80 to 120 students in a two-hour window \u2014 all logging in, loading lesson pages, and submitting quizzes simultaneously \u2014 creates a sustained database and PHP execution load that shared infrastructure cannot absorb cleanly. The first symptoms are slow admin dashboard responses and quiz submission timeouts. By the time your students notice, the damage to your course experience is done.<\/p>\n\n\n\n<h3 id=\"aioseo-signal-2-ttfb-climbs-above-600-milliseconds-47\" class=\"wp-block-heading\">Signal 2: TTFB Climbs Above 600 Milliseconds<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Time to First Byte (TTFB) above 600 ms on a logged-in student page means your server is spending too long processing each request before it sends the first byte back. This is a database I\/O problem at its core. On NVMe SSD shared hosting with Redis enabled, TTFB should sit below 300 ms even under moderate concurrent load. If it consistently drifts higher, your shared environment&#8217;s resources are being contended by other accounts on the same server.<\/p>\n\n\n\n<h3 id=\"aioseo-signal-3-cpanel-resource-usage-logs-show-cpu-at-80-percent-or-higher-49\" class=\"wp-block-heading\">Signal 3: cPanel Resource Usage Logs Show CPU at 80 Percent or Higher<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Your cPanel \u2192 Metrics \u2192 Resource Usage section shows real-time CPU and memory utilization. LMS sites that regularly push CPU above 70 to 80 percent during student activity windows are operating at the limit of their shared container. CloudLinux, which AHosting runs on all shared plans, enforces hard per-account CPU limits \u2014 which means resource spikes beyond the limit are queued, not served instantly.<\/p>\n\n\n\n<h3 id=\"aioseo-signal-4-woocommerce-checkout-timeouts-during-course-launches-51\" class=\"wp-block-heading\">Signal 4: WooCommerce Checkout Timeouts During Course Launches<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If WooCommerce checkout pages time out or return errors specifically during enrollment windows, the problem is almost always database write saturation. WooCommerce and an LMS plugin running simultaneously during a launch spike can generate hundreds of concurrent database write operations. A VPS with dedicated CPU and RAM handles this workload without affecting the student experience on the LMS side.<\/p>\n\n\n\n<h3 id=\"aioseo-signal-5-five-or-more-video-courses-with-self-hosted-files-53\" class=\"wp-block-heading\">Signal 5: Five or More Video Courses with Self-Hosted Files<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Each self-hosted video course adds storage overhead, media library load, and streaming bandwidth pressure to your hosting environment. Shared hosting plans with storage and bandwidth limits will begin to strain at five or more active video courses with substantial enrollment. At this scale, either AHosting&#8217;s VPS hosting plans or our FFmpeg hosting tier \u2014 which handles video transcoding and delivery separately from your core WordPress environment \u2014 is the appropriate infrastructure choice.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>Shared Hosting Comfortable<\/th><th>Upgrade Recommended<\/th><\/tr><\/thead><tbody><tr><td>Concurrent active students<\/td><td>Up to 100<\/td><td>100+<\/td><\/tr><tr><td>TTFB (logged-in pages)<\/td><td>Under 300 ms<\/td><td>600 ms+<\/td><\/tr><tr><td>cPanel CPU usage<\/td><td>Under 60%<\/td><td>80%+ consistently<\/td><\/tr><tr><td>Checkout timeout rate<\/td><td>0%<\/td><td>Any consistent errors<\/td><\/tr><tr><td>Video courses hosted<\/td><td>1\u20134<\/td><td>5+<\/td><\/tr><tr><td>Monthly enrolled students<\/td><td>Under 500<\/td><td>500+<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"aioseo-setting-up-wordpress-for-online-courses-5-essential-hosting-steps-57\" class=\"wp-block-heading\">Setting Up WordPress Hosting for Online Courses: 5 Essential Hosting Steps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Getting your WordPress hosting for online courses configured correctly before you install your LMS plugin saves hours of troubleshooting later. These five steps are the ones we walk through with every new LMS hosting customer.<\/p>\n\n\n\n<h3 id=\"aioseo-first-step-confirm-your-php-version-and-memory-limit-59\" class=\"wp-block-heading\">First Step: Confirm Your PHP Version and Memory Limit<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In cPanel, go to Software \u2192 Select PHP Version. Confirm you are running PHP 8.1 or higher \u2014 ideally PHP 8.3. Then open PHP Settings and locate <code>memory_limit<\/code>. It should be set to 256M or higher. If your host has locked the memory limit below 256M, contact support before installing an LMS plugin.<\/p>\n\n\n\n<h3 id=\"aioseo-second-step-enable-object-caching-at-the-server-level-61\" class=\"wp-block-heading\">Second Step: Enable Object Caching at the Server Level<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Object caching for WordPress requires server-side support \u2014 Redis or Memcached must be installed and running on your host&#8217;s server before any plugin can connect to it. Ask your host directly: &#8220;Is Redis or Memcached available on my plan?&#8221; If yes, install the Redis Object Cache plugin by Till Kr\u00fcss from the WordPress.org plugin directory, then activate it from Settings \u2192 Redis. If Redis is not available on shared hosting, it is one of the primary reasons to move to a VPS.<\/p>\n\n\n\n<h3 id=\"aioseo-third-step-optimize-your-database-before-student-activity-builds-63\" class=\"wp-block-heading\">Third Step: Optimize Your Database Before Student Activity Builds<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LMS plugins write heavily to the WordPress options table and generate post meta at scale. Before you launch, run an initial database optimization using WP-CLI or a plugin like WP-Optimize to clean expired transients and post revisions. Schedule a weekly database optimization \u2014 LMS databases accumulate bloat faster than standard WordPress sites because every student progress update and quiz result is a database row.<\/p>\n\n\n\n<h3 id=\"aioseo-fourth-step-configure-cloudflare-cdn-for-static-assets-not-logged-in-pages-65\" class=\"wp-block-heading\">Fourth Step: Configure Cloudflare CDN for Static Assets (Not Logged-In Pages)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare&#8217;s CDN caches static assets \u2014 images, CSS, JavaScript \u2014 extremely well and should be enabled on all course sites. However, confirm that Cloudflare is configured to bypass caching for logged-in users and for WooCommerce cart and checkout pages. The Cloudflare WordPress plugin and W3 Total Cache&#8217;s CDN integration handle this automatically, but verify the bypass rules are active before your first launch.<\/p>\n\n\n\n<h3 id=\"aioseo-fifth-step-create-a-staging-environment-and-test-every-plugin-update-there-first-67\" class=\"wp-block-heading\">Fifth Step: Create a Staging Environment and Test Every Plugin Update There First<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plugin conflicts are the leading cause of LMS site failures on shared hosting. A staging environment \u2014 a copy of your live site running on a separate subdomain or directory \u2014 lets you test LearnDash, LifterLMS, WooCommerce, and security plugin updates before applying them to production. This is particularly important for LMS sites because a broken quiz engine or a failed checkout page directly affects paying students. AHosting&#8217;s cPanel environment supports staging subdomain configuration out of the box.<\/p>\n\n\n\n<div class=\"ffwgt-wrap\" id=\"chf-root\" style=\"\n  background:linear-gradient(135deg,#0f172a 0%,#1e293b 100%);\n  border:1px solid #2563eb;\n  border-radius:12px;\n  padding:32px 28px;\n  max-width:680px;\n  margin:32px auto;\n  font-family:system-ui,-apple-system,sans-serif;\n\">\n<h3 style=\"color:#e2e8f0;margin:0 0 6px;font-size:1.25rem;font-weight:700;\">Course Hosting Finder<\/h3>\n<p style=\"color:#94a3b8;margin:0 0 24px;font-size:.9rem;\">Answer 4 quick questions to find the right AHosting plan for your online course site.<\/p>\n\n<div id=\"chf-questions\">\n  <div class=\"chf-q\" data-q=\"1\">\n    <p style=\"color:#cbd5e1;font-size:.95rem;font-weight:600;margin:0 0 12px;\">1. How many active students do you expect at launch?<\/p>\n    <div style=\"display:flex;flex-direction:column;gap:8px;\">\n      <button class=\"chf-btn\" data-q=\"1\" data-val=\"a\">Under 50 students<\/button>\n      <button class=\"chf-btn\" data-q=\"1\" data-val=\"b\">50 to 150 students<\/button>\n      <button class=\"chf-btn\" data-q=\"1\" data-val=\"c\">150 or more students<\/button>\n    <\/div>\n  <\/div>\n  <div class=\"chf-q\" data-q=\"2\" style=\"display:none;\">\n    <p style=\"color:#cbd5e1;font-size:.95rem;font-weight:600;margin:0 0 12px;\">2. Will you be selling courses directly through your site?<\/p>\n    <div style=\"display:flex;flex-direction:column;gap:8px;\">\n      <button class=\"chf-btn\" data-q=\"2\" data-val=\"a\">No, free courses only<\/button>\n      <button class=\"chf-btn\" data-q=\"2\" data-val=\"b\">Yes, via WooCommerce<\/button>\n      <button class=\"chf-btn\" data-q=\"2\" data-val=\"c\">Yes, via a third-party platform<\/button>\n    <\/div>\n  <\/div>\n  <div class=\"chf-q\" data-q=\"3\" style=\"display:none;\">\n    <p style=\"color:#cbd5e1;font-size:.95rem;font-weight:600;margin:0 0 12px;\">3. How are you hosting your course videos?<\/p>\n    <div style=\"display:flex;flex-direction:column;gap:8px;\">\n      <button class=\"chf-btn\" data-q=\"3\" data-val=\"a\">Embedding from YouTube or Vimeo<\/button>\n      <button class=\"chf-btn\" data-q=\"3\" data-val=\"b\">Self-hosting on my WordPress site<\/button>\n      <button class=\"chf-btn\" data-q=\"3\" data-val=\"c\">No video, text and quizzes only<\/button>\n    <\/div>\n  <\/div>\n  <div class=\"chf-q\" data-q=\"4\" style=\"display:none;\">\n    <p style=\"color:#cbd5e1;font-size:.95rem;font-weight:600;margin:0 0 12px;\">4. How technical are you?<\/p>\n    <div style=\"display:flex;flex-direction:column;gap:8px;\">\n      <button class=\"chf-btn\" data-q=\"4\" data-val=\"a\">Beginner, I just want it to work<\/button>\n      <button class=\"chf-btn\" data-q=\"4\" data-val=\"b\">Intermediate, comfortable with cPanel<\/button>\n      <button class=\"chf-btn\" data-q=\"4\" data-val=\"c\">Advanced, I manage server configs<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<div id=\"chf-result\" style=\"display:none;\">\n  <div style=\"background:rgba(37,99,235,0.15);border:1px solid rgba(37,99,235,0.4);border-radius:8px;padding:20px;margin-top:8px;\">\n    <p id=\"chf-plan-name\" style=\"color:#93c5fd;font-weight:700;font-size:1.1rem;margin:0 0 6px;\"><\/p>\n    <p id=\"chf-plan-desc\" style=\"color:#cbd5e1;font-size:.9rem;margin:0 0 14px;\"><\/p>\n    <div style=\"display:flex;flex-direction:column;gap:10px;\">\n      <a id=\"chf-plan-link\" class=\"chf-plan-btn\" href=\"\/wordpress-hosting.html\">View Plan<\/a>\n      <button id=\"chf-reset-btn\" style=\"display:block;width:100%;background:transparent;border:1px solid #475569;color:#94a3b8;padding:12px 18px;border-radius:8px;font-size:.9rem;cursor:pointer;text-align:center;box-sizing:border-box;\">Start Over<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n.chf-btn{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);color:#e2e8f0;padding:12px 16px;border-radius:8px;cursor:pointer;text-align:left;font-size:.9rem;transition:border-color .2s,background .2s;width:100%;}\n.chf-btn:hover{border-color:#2563eb;background:rgba(37,99,235,.15);}\n<\/style>\n\n<script>\n(function(){\n  var answers = {};\n\n  var root = document.getElementById('chf-root');\n  if (!root) { return; }\n\n  root.addEventListener('click', function(e) {\n    var target = e.target;\n    while (target && target !== root) {\n      if (target.classList && target.classList.contains('chf-btn')) {\n        handleAnswer(target);\n        return;\n      }\n      if (target.id === 'chf-reset-btn') {\n        handleReset();\n        return;\n      }\n      target = target.parentNode;\n    }\n  });\n\n  function handleAnswer(btn) {\n    var q   = parseInt(btn.getAttribute('data-q'), 10);\n    var val = btn.getAttribute('data-val');\n    answers[q] = val;\n\n    var cur = root.querySelector('.chf-q[data-q=\"' + q + '\"]');\n    if (cur) { cur.style.display = 'none'; }\n\n    if (q < 4) {\n      var nxt = root.querySelector('.chf-q[data-q=\"' + (q + 1) + '\"]');\n      if (nxt) { nxt.style.display = 'block'; }\n    } else {\n      showResult();\n    }\n  }\n\n  function handleReset() {\n    answers = {};\n    document.getElementById('chf-result').style.display = 'none';\n    document.getElementById('chf-questions').style.display = 'block';\n    var qs = root.querySelectorAll('.chf-q');\n    for (var i = 0; i < qs.length; i++) {\n      qs[i].style.display = (i === 0) ? 'block' : 'none';\n    }\n  }\n\n  function showResult() {\n    var students = answers[1];\n    var selling  = answers[2];\n    var video    = answers[3];\n\n    var plan, desc, link;\n\n    var vps = false;\n    if (students === 'c') { vps = true; }\n    if (students === 'b') { if (video === 'b') { vps = true; } }\n\n    if (vps) {\n      plan = 'VPS Hosting - Recommended for Your Setup';\n      desc = 'Your student count and self-hosted video workload exceeds what shared hosting handles reliably. AHosting VPS gives you dedicated CPU and RAM, full cPanel access, and room to grow without resource contention.';\n      link = '\/vps-hosting.html';\n    } else if (video === 'b') {\n      plan = 'FFmpeg Hosting + WordPress Hosting';\n      desc = 'Self-hosting course videos requires FFmpeg transcoding at the server level. AHosting FFmpeg plans run alongside your WordPress environment so your videos are optimized without a third-party platform.';\n      link = '\/ffmpeg-hosting.html';\n    } else if (selling === 'b') {\n      plan = 'WooCommerce Hosting - Your Best Fit';\n      desc = 'Selling courses via WooCommerce adds checkout, payment, and order database load on top of your LMS activity. AHosting WooCommerce plans are optimized for exactly this combination.';\n      link = '\/woocommerce-hosting.html';\n    } else {\n      plan = 'WordPress Hosting - Perfect Starting Point';\n      desc = 'For your stage, AHosting WordPress hosting plans deliver everything your LMS site needs: PHP 8.1+, 256 MB memory, NVMe SSD, and CloudLinux isolation.';\n      link = '\/wordpress-hosting.html';\n    }\n\n    document.getElementById('chf-plan-name').textContent = plan;\n    document.getElementById('chf-plan-desc').textContent = desc;\n    document.getElementById('chf-plan-link').setAttribute('href', link);\n    document.getElementById('chf-result').style.display = 'block';\n    document.getElementById('chf-questions').style.display = 'none';\n  }\n})();\n<\/script>\n<\/div>\n\n\n\n<h2 id=\"aioseo-woocommerce-and-lms-selling-courses-requires-payment-grade-hosting-70\" class=\"wp-block-heading\">WooCommerce and LMS: Selling Courses Requires Payment-Grade Hosting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Adding WooCommerce to your WordPress LMS site changes the hosting equation materially. Course sales through WooCommerce mean every enrollment goes through a checkout process that writes to the database at least five times per transaction: the cart is created, the order is placed, the payment gateway is called, the order status is updated, and the LMS plugin grants course access \u2014 all in sequence, sometimes within three seconds of the student clicking Buy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During a course launch window, you may have 50 to 100 students completing this sequence simultaneously. Without object caching and sufficient PHP memory, the checkout queue backs up, producing errors that cost you real revenue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AHosting's WooCommerce hosting plans are configured with the resource isolation and caching infrastructure that checkout-heavy LMS sites need. The plans run on CloudLinux, which guarantees that a traffic spike from a neighboring account on the shared server cannot borrow your CPU or RAM \u2014 a critical guarantee during the window when your launch is live and your students are paying.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For course creators who are also managing multiple client sites or building a portfolio of online course products, AHosting's reseller hosting plans allow you to host multiple independent WordPress + WooCommerce + LMS installations under one cPanel\/WHM account, each with its own isolated container.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"aioseo-ahostings-22-year-foundation-for-online-course-hosting-76\" class=\"wp-block-heading\">AHosting's 22-Year Foundation - The Perfect WordPress Hosting For Online Courses Hosting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We have been running WordPress hosting since WordPress was in its earliest versions. That history is not just a marketing line \u2014 it means AHosting has seen every configuration of WordPress, WooCommerce, and LMS hosting succeed, fail, and recover.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our infrastructure runs LiteSpeed Web Server with LSCache, CloudLinux with CageFS resource isolation, PHP 8.1 as the current production standard (with PHP 8.3 available), and NVMe SSD storage across our shared and VPS tiers. We run cPanel and WHM across all plans, which means the setup path for an LMS site is the same documented cPanel workflow your developers already know.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For online course creators specifically, the three AHosting products that matter are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/wordpress-hosting.html\" target=\"_blank\" rel=\"noopener\" title=\"\">WordPress hosting plans<\/a> \u2014 the starting point for new LMS builds with 1\u2013100 students<\/li>\n\n\n\n<li><a href=\"\/woocommerce-hosting.html\" target=\"_blank\" rel=\"noopener\" title=\"\">WooCommerce hosting plans<\/a> \u2014 optimized for checkout-heavy course sales<\/li>\n\n\n\n<li><a href=\"\/ffmpeg-hosting.html\" target=\"_blank\" rel=\"noopener\" title=\"\">FFmpeg hosting plans<\/a> \u2014 for course creators self-hosting video on their own server<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"aioseo-is-your-wordpress-hosting-ready-for-your-online-course-pre-launch-checklist-85\" class=\"wp-block-heading\">Is Your WordPress Hosting For Online Courses Ready? Pre-Launch Checklist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Work through this checklist before you run your first course launch:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Server Configuration<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP version is 8.1 or higher (8.3 preferred)<\/li>\n\n\n\n<li>PHP memory limit is set to 256 MB or higher<\/li>\n\n\n\n<li>MySQL 8.0 or MariaDB 10.6 is the active database version<\/li>\n\n\n\n<li>NVMe SSD storage is confirmed (ask your host if unsure)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Caching and Performance<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redis or Memcached is available and configured for object caching<\/li>\n\n\n\n<li>W3 Total Cache or LiteSpeed Cache is installed and active<\/li>\n\n\n\n<li>Cloudflare is configured with logged-in user bypass rules active<\/li>\n\n\n\n<li>TTFB on a logged-in student page is below 300 ms<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>LMS Plugin Readiness<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LearnDash, LifterLMS, or your chosen LMS plugin is on the latest version<\/li>\n\n\n\n<li>WooCommerce (if used for course sales) is on the latest version<\/li>\n\n\n\n<li>PHP Compatibility Checker has been run \u2014 no critical warnings<\/li>\n\n\n\n<li>Staging environment created and used to test the latest plugin updates<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Video and Media<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Course video files have been transcoded (FFmpeg or third-party tool)<\/li>\n\n\n\n<li>Video files are under 500 MB per lesson where possible<\/li>\n\n\n\n<li>CDN is configured to serve static media (images, CSS, JS)<\/li>\n\n\n\n<li>If self-hosting video: FFmpeg support confirmed with your host<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"aioseo-conclusion-the-right-hosting-foundation-for-your-online-course-112\" class=\"wp-block-heading\">Conclusion: The Right WordPress Hosting for Online Courses is your Foundation for Success<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress hosting for online courses is not simply a matter of picking any WordPress plan and installing LearnDash. The database write patterns, concurrent user load, video delivery requirements, and WooCommerce checkout pressure that LMS sites generate require specific server-level features that generic shared hosting often lacks: sufficient PHP memory, object caching, NVMe SSD storage, and \u2014 if you plan to self-host videos \u2014 FFmpeg support.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The good news is that a well-configured shared hosting plan covers the needs of most early-stage course creators. The upgrade path to VPS is clear and predictable. And for the specific combination of WordPress, WooCommerce course sales, and self-hosted video, AHosting has been running the infrastructure since 2002.<\/p>\n\n\n\n<h2 id=\"faq-lms-hosting\" class=\"wp-block-heading\">Frequently Asked Questions: WordPress LMS Hosting<\/h2>\n\n\n\n<h3 id=\"faq-lms-hosting-different\" class=\"wp-block-heading\">What makes WordPress hosting for online courses different from regular WordPress hosting?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LMS sites generate far more database writes than standard WordPress blogs. Every quiz submission, lesson completion, course progress update, and student login triggers database transactions that a basic shared plan was not designed to absorb. WordPress hosting for online courses needs a higher PHP memory limit (256 MB minimum), object caching support, and NVMe SSD storage to keep those transactions fast under concurrent load.<\/p>\n\n\n\n<h3 id=\"faq-lms-ram-needed\" class=\"wp-block-heading\">How much RAM does a WordPress LMS site need?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A WordPress LMS site needs at least 256 MB of PHP memory per site for smooth operation with plugins like LearnDash or LifterLMS. For sites with 100 or more concurrent students, 512 MB or more is advisable. The memory limit is a hosting-level setting \u2014 check your cPanel PHP Settings or ask your host before installing an LMS plugin.<\/p>\n\n\n\n<h3 id=\"faq-shared-hosting-lms\" class=\"wp-block-heading\">Can shared hosting run a WordPress LMS like LearnDash or LifterLMS?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, shared hosting can run a WordPress LMS for early-stage course sites with fewer than 100 active students, provided the host offers PHP 8.1 or higher, a 256 MB PHP memory limit, and NVMe SSD storage. Once you cross 100 concurrent users, process more than 30 quiz submissions per minute, or add video courses, VPS hosting becomes the more reliable choice.<\/p>\n\n\n\n<h3 id=\"faq-php-version-learndash\" class=\"wp-block-heading\">What PHP version do I need for LearnDash in 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LearnDash 4.x and above requires PHP 7.4 as a minimum, but the LearnDash team recommends PHP 8.1 or higher for full feature compatibility and performance in 2026. PHP 8.3 is the recommended version according to WordPress.org and delivers meaningful speed improvements for LMS database-heavy operations.<\/p>\n\n\n\n<h3 id=\"faq-course-video-hosting\" class=\"wp-block-heading\">Do I need special hosting to serve course videos on WordPress?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Self-hosting course videos on WordPress requires FFmpeg support at the server level for video transcoding, format conversion, and delivery optimization. Without FFmpeg, raw video files are served as-is \u2014 large, slow, and incompatible with all browsers. AHosting FFmpeg hosting plans include server-side FFmpeg support specifically for video transcoding workloads.<\/p>\n\n\n\n<h3 id=\"faq-upgrade-to-vps\" class=\"wp-block-heading\">When should I upgrade from WordPress shared hosting to a VPS for my course site?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The five clearest signals that your course site has outgrown shared hosting are: more than 100 concurrent active students, consistent TTFB above 600 ms, CPU usage hitting 80 percent or more in your cPanel resource log, WooCommerce checkout timeouts during course launches, and five or more live video courses consuming significant storage and bandwidth simultaneously.<\/p>\n\n\n\n<h3 id=\"faq-woocommerce-lms-hosting\" class=\"wp-block-heading\">Does WooCommerce add extra hosting requirements when selling courses?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WooCommerce adds significant database write pressure on top of the LMS plugin activity. Each checkout creates an order record, triggers payment gateway API calls, and logs customer data simultaneously. Object caching (Redis or Memcached), a PHP memory limit of at least 512 MB, and a host with isolated resources prevents checkout slowdowns from affecting your students course experience.<\/p>\n\n\n\n<h3 id=\"faq-object-caching-lms\" class=\"wp-block-heading\">What is object caching and why does it matter for WordPress LMS sites?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Object caching stores the results of repeated database queries in memory using Redis or Memcached, so your server does not re-run the same query each time a student loads their dashboard. For LMS sites where every student sees a unique progress state, object caching dramatically reduces database load compared to standard page caching, which cannot cache logged-in user views.<\/p>\n\n\n\n<h3 id=\"faq-shared-hosting-student-count\" class=\"wp-block-heading\">How many students can a shared WordPress hosting plan support?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A well-configured shared WordPress hosting plan with PHP 8.1, 256 MB memory, and an object cache can support 50 to 100 concurrent active students reliably. Sites with large course libraries, video content, and active WooCommerce selling consistently exceed these limits and experience checkout timeouts or slow dashboards once active enrollment grows past that threshold.<\/p>\n\n\n\n<h3 id=\"faq-lms-hosting-features\" class=\"wp-block-heading\">What hosting features should I look for when launching a WordPress LMS site?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The essential hosting features for a WordPress LMS site are: PHP 8.1 or higher, a 256 MB or higher PHP memory limit, NVMe SSD storage, object caching support (Redis or Memcached), CloudLinux or similar resource isolation so other accounts do not affect your performance, daily backups, a staging environment for testing plugin updates, and SSL included. Bonus: FFmpeg support for self-hosted video courses.<\/p>\n\n\n\n<script>\n(function(){\n  document.addEventListener('DOMContentLoaded', function(){\n    var faqH2 = document.getElementById('faq-lms-hosting');\n    if (!faqH2) { return; }\n\n    var parent = faqH2.parentNode;\n    if (!parent) { return; }\n\n    var els = parent.children;\n    var inFaq = false;\n\n    for (var i = 0; i < els.length; i++) {\n      var el = els[i];\n      if (el.id === 'faq-lms-hosting') { inFaq = true; continue; }\n      if (!inFaq) { continue; }\n      if (el.tagName === 'H3') { initToggle(el); }\n    }\n\n    function initToggle(h3) {\n      var answer = h3.nextElementSibling;\n      if (!answer) { return; }\n      if (answer.tagName !== 'P') { return; }\n\n      var chev = document.createElement('span');\n      chev.className = 'ahfaq-chev';\n      chev.setAttribute('aria-hidden', 'true');\n      h3.appendChild(chev);\n      h3.setAttribute('role', 'button');\n      h3.setAttribute('tabindex', '0');\n      h3.setAttribute('aria-expanded', 'false');   \/* \u2190 was 'true' *\/\n      answer.classList.add('ahfaq-collapsed');      \/* \u2190 new: start closed *\/\n      chev.classList.add('ahfaq-chev-closed');      \/* \u2190 new: chevron points right *\/\n\n      h3.addEventListener('click', function(){ doToggle(h3, answer, chev); });\n      h3.addEventListener('keydown', function(e){\n        if (e.key === 'Enter') { e.preventDefault(); doToggle(h3, answer, chev); }\n        if (e.key === ' ')     { e.preventDefault(); doToggle(h3, answer, chev); }\n      });\n    }\n\n    function doToggle(h3, answer, chev) {\n      var isOpen = h3.getAttribute('aria-expanded') === 'true';\n      if (isOpen) {\n        answer.classList.add('ahfaq-collapsed');\n        h3.setAttribute('aria-expanded', 'false');\n        chev.classList.add('ahfaq-chev-closed');\n      } else {\n        answer.classList.remove('ahfaq-collapsed');\n        h3.setAttribute('aria-expanded', 'true');\n        chev.classList.remove('ahfaq-chev-closed');\n      }\n    }\n  });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR WordPress hosting for online courses requires PHP 8.1 or higher, a 256 MB PHP memory limit, NVMe SSD storage, and object caching support. Shared hosting works for up to 100 concurrent students; beyond that, a VPS upgrade is the reliable path. If you self-host course videos, you also need FFmpeg support \u2014 a feature [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":687,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[41,7,8],"tags":[],"class_list":["post-659","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ffmpeg-video-hosting","category-video-content","category-wordpress"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/659","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/comments?post=659"}],"version-history":[{"count":4,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/659\/revisions"}],"predecessor-version":[{"id":690,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/posts\/659\/revisions\/690"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media\/687"}],"wp:attachment":[{"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/media?parent=659"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/categories?post=659"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ahosting.net\/blog\/wp-json\/wp\/v2\/tags?post=659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}