Guides
Practical guides on Moodle and Totara — from server setup and SSO to plugin development and integrations.
Practical guides from our team
We work with Moodle and Totara every day. These guides distil what we know — from first-time setup to advanced configuration — so you can move faster and with more confidence.
Authentication & SSO
Configuring LTI 1.3 in Moodle
How to configure LTI 1.3 in Moodle — tool registration, course publishing, and debugging JWT and cookie issues in the launch flow.
LDAP Authentication vs. SSO in Moodle: Plain Bind vs. Identity Provider
The practical difference between LDAP authentication and SSO in Moodle and Totara: how each works, when to use each, and why Azure AD changes the calculus.
Localizing the SAML2 Login Button Label in Moodle
The auth_saml2 plugin stores its IdP label as a database value, so the multilang filter and Language customization tool have no effect on it. The fix is a theme template override.
Setting Up Active Directory SSO with SAML2 in Moodle
How to configure SAML2-based SSO between Moodle and Active Directory, including plugin setup, metadata exchange, claim mapping, and troubleshooting.
Setting Up OAuth2-Based SSO in Moodle
How to configure OAuth2-based SSO in Moodle and Totara, including custom issuer setup and working around the email verification requirement.
Development
Allowing Moodle cURL Requests to Localhost for Development
How to allow Moodle's cURL wrapper to reach localhost services during development, and what security implications to be aware of.
Moodle Backup and Restore API
How to use Moodle's backup and restore API programmatically — covering controller setup, section-level restores, cleanup requirements, and common pitfalls.
Setting Up a PHP 7.4 / PHPUnit Toolchain for Moodle Development
How to configure a PHP 7.4 environment alongside a newer system PHP so that PHPUnit runs under the correct interpreter for a specific Moodle or Totara version.
Testing Moodle Plugins That Transmit Data to a Remote Endpoint
How to verify that a Moodle plugin sends the correct HTTP payloads to a remote endpoint, using a local PHP listener to capture and inspect requests.
Using esbuild to Build AMD Modules in a Moodle Plugin
How to replace Grunt with esbuild for compiling AMD modules in a Moodle plugin, covering installation, configuration, and the full build pipeline.
Using PsySH as a REPL for Moodle Development
How to install PsySH as a project-local Moodle REPL with a custom init script that bootstraps the Moodle environment without touching the repository.
Writing and Building AMD Modules in Moodle
How Moodle AMD modules work, how to structure them, how to inject Moodle services and strings, and how to produce minified build output with Grunt.
Installation & Upgrades
Cloning Large Moodle Sites for Testing or Development
Which parts of a large Moodle installation can be safely omitted when cloning for development or testing, and how to recreate the missing database tables.
Configuring AWS for High-Availability Moodle
Architecture and configuration for a high-availability Moodle deployment on AWS, using RDS, EFS, ElastiCache, and Spot instances with proper failover.
Installing a New Moodle Website on a VPS
How to provision a new VPS, configure Virtualmin, set up DNS and virtual hosts, and complete a fresh Moodle installation from scratch.
Migrating a Moodle Database from MySQL to PostgreSQL
How to migrate a Moodle database from MySQL to PostgreSQL using pgloader, including schema preparation, known conversion errors, and a reliable restore procedure.
Migrating a Moodle Install to a New Server and Domain
How to move a Moodle installation to a new server and domain: pre-migration checks, file and database transfer, DNS cutover, and rollback considerations.
Restoring a Moodle Backup from HostEurope
How to restore files or databases from HostEurope's daily VPS snapshots using the KIS backup console, and what to do with the restored data.
Upgrading a Moodle Website
How to upgrade a Moodle installation using Git, covering the differences between minor and major upgrades, pre-upgrade checks, and post-upgrade validation.
Integrations
Configuring GraphQL in Totara
How to explore and query Totara's GraphQL API using introspection, with practical examples for discovering available queries, filters, and pagination behavior.
Mailgun and Moodle Integration
How to integrate Mailgun with Moodle for reliable transactional email delivery, covering DNS setup, SMTP configuration, and testing.
Moodle Web Services and REST API Integration: A Practical Guide
A practical walkthrough of Moodle's web services and REST API for external-system integration: authorization, the function catalog, and the production concerns that surface once you ship.
Setting Up Automated HR Import in Totara
How to set up Totara's HR Import for automated user provisioning from CSV over SFTP, including custom field mapping, delta vs. complete imports, and scheduling.
Operations
Clearing Orphaned Locks and Unblocking Stuck Moodle Scheduled Tasks
How to identify and clear orphaned task locks that cause Moodle scheduled tasks to silently skip — including the SQL and CLI commands to diagnose and fix them.
Fixing Moodle Performance by Offloading File Serving with X-Sendfile
Why serving large Moodle files through PHP exhausts your FPM worker pool — and how to fix it by enabling X-Sendfile on Apache or X-Accel-Redirect on Nginx so the web server handles the transfer directly.
Monitoring a Moodle Web Server
How to configure monitoring for a Moodle server using the hosting provider's built-in tools plus Webmin, covering alerts, metrics, and incident response.
Monitoring Moodle Cron Failures with an External Heartbeat
How to detect silent Moodle cron failures by piping cron output through a wrapper script that pings an external dead man's switch — with the key code that makes it work.
Troubleshooting a Moodle Website
A systematic approach to diagnosing Moodle problems: log inspection, database integrity checks, cron verification, plugin conflicts, and file delivery issues.
Working on a Moodle or Totara project?
Get in touch