Moodle should be configured for gradebook integrity, plugin governance, and scalable course operations with security and performance in mind.
After initial installation, configure these essential settings in your config.php file (typically located at /var/www/moodle/config.php):
<?php
// Database settings
$CFG->dbtype = 'mariadb'; // or 'mysql', 'pgsql', 'sqlsrv'
$CFG->dblibrary = 'native';
$CFG->dbhost = 'localhost';
$CFG->dbname = 'moodle';
$CFG->dbuser = 'moodleuser';
$CFG->dbpass = 'your_secure_password';
$CFG->prefix = 'mdl_';
// Site location
$CFG->wwwroot = 'https://moodle.yourdomain.com';
$CFG->dataroot = '/var/moodledata';
$CFG->directorypermissions = 0755;
$CFG->filepermissions = 0644;
// Site security
$CFG->passwordpolicy = true;
$CFG->opentogoogle = false;
$CFG->protectuserpics = true;
$CFG->registerauth = '';
$CFG->loginlockoutwindow = 300; // 5 minutes
$CFG->loginattemptdelay = 5; // seconds
// Performance settings
$CFG->cachejs = true;
$CFG->cachetemplates = true;
$CFG->langstringcache = true;
$CFG->proxybypasslocal = true;
// Email settings
$CFG->smtphosts = 'localhost';
$CFG->noreplyaddress = 'noreply@yourdomain.com';
// File upload settings
$CFG->maxbytes = 104857600; // 100MB
$CFG->maxfiles = 100;
$CFG->enableplagiarism = true;
// Session settings
$CFG->sessiontimeout = 7200; // 2 hours
$CFG->sessioncookie = 'MoodleSession';
$CFG->sessioncookiedomain = '.yourdomain.com';
$CFG->sessioncookiepath = '/';
$CFG->sessioncookiesecure = true;
$CFG->sessioncookiehttponly = true;
// Advanced features (for Moodle 5.0+)
$CFG->enablemobilewebservice = true;
$CFG->tool_generator_users_per_course = 1000;
// AI Integration settings (for Moodle 5.0+)
$CFG->enableaiconnect = true; // Enable AI features if available
require_once(__DIR__ . '/lib/setup.php');
Configure PHP for optimal Moodle performance in /etc/php/8.3/apache2/php.ini:
memory_limit = 512M
post_max_size = 64M
upload_max_filesize = 64M
max_execution_time = 180
max_input_vars = 5000
For MariaDB/MySQL, optimize settings in /etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
query_cache_type = 1
query_cache_size = 128M
tmp_table_size = 64M
max_heap_table_size = 64M
Enable and configure caching in Moodle admin panel:
# Daily backup script
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/moodle"
mkdir -p $BACKUP_DIR
mysqldump -u moodleuser -p'your_password' moodle > $BACKUP_DIR/moodle_db_$DATE.sql
gzip $BACKUP_DIR/moodle_db_$DATE.sql
# Backup data directory
tar -czf /backup/moodle/moodle_files_$(date +%Y%m%d_%H%M%S).tar.gz /var/moodledata
For Docker or containerized deployments:
MOODLE_URL=https://moodle.yourdomain.com
MOODLE_DATABASE_TYPE=mysqli
MOODLE_DATABASE_HOST=localhost
MOODLE_DATABASE_NAME=moodle
MOODLE_DATABASE_USER=moodleuser
MOODLE_DATABASE_PASSWORD=your_secure_password
MOODLE_DATA_FOLDER=/var/moodledata
MOODLE_ADMIN_USER=admin
MOODLE_ADMIN_PASSWORD=secure_admin_password
MOODLE_SMTP_HOST=localhost
MOODLE_SMTP_PORT=587
MOODLE_SMTP_SECURE_STARTTLS=true
Any questions?
Feel free to contact us. Find all contact information on our contact page.