Moodle 5.1+ on Debian 13 (Trixie) using Nginx + MariaDB/MySQL + PHP 8.4 (LEMP). It covers the common pitfalls that cause 404s on /lib/javascript.php/..., /theme/styles.php/..., RequireJS "scripterror" for jquery, ERR_CONTENT_LENGTH_MISMATCH, and broken Moodle JS (M.util undefined, etc.).
Follow these steps in order and you'll never struggle again.
1. Prerequisites & Package Installation
Bash
sudo apt update
sudo apt install nginx mariadb-server php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-mbstring php8.4-xml php8.4-zip php8.4-intl php8.4-soap php8.4-bcmath php8.4-ldap php8.4-xmlrpc
Bash
sudo mysql -u root
CREATE DATABASE moodle CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'moodle'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT ALL PRIVILEGES ON moodle.* TO 'moodle'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Bash
cd /var/www/html
sudo git clone https://github.com/moodle/moodle.git moodle
cd moodle
sudo git checkout MOODLE_501_STABLE # or latest stable tag
Jika prosesnya masih sangat lambat atau bahkan macet (stuck) meskipun sudah menggunakan opsi --depth 1, kemungkinan besar ada masalah pada konfigurasi DNS di server Debian Anda, atau jalur koneksi internet server ke GitHub sedang dibatasi (throttled).
Mari kita selesaikan dengan beberapa langkah alternatif berikut:
1. Ubah DNS Server Debian ke Google/Cloudflare
Seringkali DNS bawaan penyedia internet lokal membuat koneksi ke GitHub menjadi sangat lambat atau terputus-putus. Kita bisa mengubahnya ke DNS publik yang lebih cepat.
Buka file konfigurasi DNS:
Bash
sudo nano /etc/resolv.conf
Hapus baris yang ada (atau tambahkan di paling atas) baris berikut:
Plaintext
nameserver 8.8.8.8
nameserver 1.1.1.1
Simpan dengan menekan Ctrl + O, lalu Enter, dan keluar dengan Ctrl + X.
Coba lakukan git clone --depth 1 lagi.
2. Alternatif: Mengunduh File ZIP (Jauh Lebih Cepat & Ringan)
Jika Git tetap keras kepala dan lambat, Anda tidak harus menggunakan git clone. Kita bisa langsung mengunduh paket Moodle dalam bentuk file kompresi (ZIP/TGZ) langsung dari server Moodle. Ini biasanya jauh lebih stabil dan memanfaatkan kecepatan unduhan maksimal server Anda.
Hapus dulu folder moodle yang gagal tadi (jika ada), lalu jalankan perintah ini di dalam direktori /var/www/html:
Unduh Moodle versi stabil terbaru (misal versi 4.4):
Bash
sudo wget https://download.moodle.org/download.php/direct/stable404/moodle-latest-404.tgz
(Jika wget belum terinstall, install dulu dengan sudo apt install wget)
Ekstrak file yang sudah diunduh:
Bash
sudo tar -xvzf moodle-latest-404.tgz
Perintah ini akan otomatis membuat folder bernama moodle yang berisi semua source code Moodle siap pakai.
Hapus file kompresi yang sudah tidak dipakai agar hemat ruang:
Bash
sudo rm moodle-latest-404.tgz
3. Jangan Lupa Atur Hak Akses (Permission)
Setelah folder moodle berhasil dibuat (baik lewat Git ataupun ZIP), pastikan web server Anda (Nginx/Apache) memiliki hak akses penuh ke folder tersebut agar tidak muncul error Permission Denied saat instalasi di browser:
Bash
sudo chown -R www-data:www-data /var/www/html/moodle
sudo chmod -R 755 /var/www/html/moodle
Dari ketiga cara di atas, Solusi ke-2 (menggunakan wget) adalah jalan pintas paling ampuh jika jaringan internet di server Anda sedang tidak bersahabat dengan server GitHub.
Masalah ini terjadi karena web server Anda (seperti Apache atau Nginx) tidak memiliki izin menulis (write permissions) di folder induk /var/www/html/. Akibatnya, installer Moodle tidak bisa membuat folder moodledata secara otomatis di sana.
Selain itu, demi alasan keamanan, Moodle sangat menyarankan agar folder moodledata diletakkan di luar folder web publik (di luar /var/www/html/), agar file-file sensitif pengguna tidak bisa diakses langsung lewat browser.
Berikut adalah dua pilihan solusi untuk mengatasi masalah ini. Pilih solusi yang paling Anda inginkan:
Solusi 1: Memindahkan moodledata ke Luar Folder Web (Sangat Direkomendasikan)
Ini adalah praktik terbaik (best practice) untuk keamanan Moodle. Kita akan membuat foldernya secara manual di direktori /var/www/ dan memberikan izin yang tepat.
Langkah-langkah:
Buka terminal server Anda.
Buat folder moodledata secara manual di dalam /var/www/:
Bash
sudo mkdir /var/www/moodledata
Ubah kepemilikan folder tersebut agar bisa diakses oleh web server.
Untuk Ubuntu/Debian (Apache):
Bash
sudo chown -R www-data:www-data /var/www/moodledata
For CentOS/RHEL/Fedora (Apache):
Bash
sudo chown -R apache:apache /var/www/moodledata
Berikan izin akses penuh ke folder tersebut:
Bash
sudo chmod -R 775 /var/www/moodledata
Kembali ke halaman installer Moodle di browser, lalu ubah isi kolom Data directory menjadi:
Plaintext
/var/www/moodledata
Klik tombol Next.
Solusi 2: Tetap Menggunakan Folder Saat Ini (Kurang Direkomendasikan)
Jika Anda terpaksa atau tetap ingin meletakkan moodledata di dalam /var/www/html/, Anda harus memberikan izin menulis pada folder /var/www/html terlebih dahulu agar installer bisa membuat folder tersebut.
Langkah-langkah:
Buka terminal server Anda.
Berikan izin menulis sementara pada folder induk:
Untuk Ubuntu/Debian:
Bash
sudo chown www-data:www-data /var/www/html
sudo chmod 775 /var/www/html
Untuk CentOS/RHEL:
Bash
sudo chown apache:apache /var/www/html
sudo chmod 775 /var/www/html
Kembali ke browser dan klik tombol Next. Installer sekarang seharusnya sudah bisa membuat folder dan melanjutkan proses instalasi.
⚠️ Catatan Tambahan untuk Pengguna SELinux (CentOS/RHEL):
Jika Anda menggunakan CentOS atau RedHat dan error masih muncul setelah mencoba cara di atas, itu biasanya karena SELinux memblokirnya. Anda bisa mengatasinya dengan menjalankan perintah:
Bash
sudo chcon -R -t httpd_sys_rw_content_t /var/www/moodledata
(Ganti jalurnya sesuai dengan lokasi folder moodledata yang Anda pilih).
4. Create moodledata Directory
Bash
sudo mkdir /var/www/moodledata
sudo chown www-data:www-data /var/www/moodledata
sudo chmod 0777 /var/www/moodledata
5. Fix Permissions (Moodle Files)
Bash
sudo chown -R www-data:www-data /var/www/html/moodle
sudo find /var/www/html/moodle -type d -exec chmod 755 {} \;
sudo find /var/www/html/moodle -type f -exec chmod 644 {} \;
6. CRITICAL: Fix Nginx Temp Directories (The one that broke everything for you)
Bash
sudo chown -R www-data:www-data /var/lib/nginx
sudo chmod -R 755 /var/lib/nginx
7. Nginx Site Configuration (/etc/nginx/sites-available/moodle)
nginx
server {
listen 80;
server_name your.ip.or.domain;
root /var/www/html/moodle/public; # Moodle 5.1+ uses /public
index index.php;
error_log /var/log/nginx/moodle-error.log;
access_log /var/log/nginx/moodle-access.log;
location / {
try_files $uri $uri/ /r.php?$args;
}
location ~ \.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name $fastcgi_script_name/ /r.php$is_args$args;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param PATH_TRANSLATED $document_root$path_info;
fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
fastcgi_index index.php;
fastcgi_intercept_errors on;
}
location ~ /\.(?!well-known).* {
return 404;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public";
access_log off;
}
client_max_body_size 100M;
}
Enable and reload:
Bash
sudo ln -s /etc/nginx/sites-available/moodle /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
8. Run Moodle Web Installer
Open http://your.ip.or.domain in browser → follow installer → use database details from step 2.
9. Post-Install Steps
Log in as admin.
Go to Site administration → Development → Purge all caches.
Hard refresh browser (Ctrl+Shift+R).
10. Optional: Enable HTTPS (Recommended)
Use Certbot:
Bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your.domain
Quick Troubleshooting Checklist (If Issues Return)
Check /var/log/nginx/moodle-error.log
Verify /var/lib/nginx is owned by www-data:www-data
Purge Moodle caches
Hard refresh browser
Temporarily add $CFG->cachejs = false; to /var/www/html/moodle/config.php (after $CFG = new stdClass();) to test uncached mode → remove after confirming fix
Berdasarkan gambar terbaru, ada satu error wajib warna merah (Check) yang harus diselesaikan agar bisa melanjutkan instalasi, serta dua peringatan warna oranye yang sebaiknya juga diperbaiki.
Karena Anda menggunakan Nginx, konfigurasi PHP-nya diatur melalui PHP-FPM. Berikut adalah solusi lengkap untuk masing-masing masalah tersebut:
1. Solusi untuk max_input_vars (Wajib Diperbaiki)
Moodle membutuhkan nilai max_input_vars minimal 5000 agar bisa memproses formulir dan pengaturan yang kompleks.
Langkah-langkah:
Masuk ke terminal server Anda.
Cari dan buka file konfigurasi php.ini yang digunakan oleh PHP-FPM. Jalurnya biasanya tergantung versi PHP Anda (misal PHP 8.1 atau 8.2):
Bash
sudo nano /etc/php/8.x/fpm/php.ini
(Ganti 8.x sesuai dengan versi PHP yang Anda gunakan, contoh: 8.2)
Cari baris ;max_input_vars = 1000. (Anda bisa tekan Ctrl + W di nano untuk mencari kata kunci tersebut).
Hilangkan tanda titik koma (;) di depannya untuk mengaktifkan perintah, lalu ubah nilainya menjadi 5000:
Ini, TOML
max_input_vars = 5000
Simpan file (Ctrl + O, lalu Enter) dan keluar (Ctrl + X).
Penting: Restart layanan PHP-FPM agar perubahan diterapkan:
Bash
sudo systemctl restart php8.x-fpm
(Sesuaikan 8.x dengan versi PHP Anda)
2. Solusi untuk Composer vendor directory not found (Peringatan)
Peringatan ini muncul karena folder dependensi pihak ketiga (vendor) belum terinstal atau tidak lengkap di folder Moodle Anda.
Langkah-langkah:
Masuk ke direktori root Moodle Anda:
Bash
cd /var/www/html/moodle
Jalankan perintah composer berikut untuk memasang dependensi yang dibutuhkan secara otomatis:
Bash
sudo composer install --no-dev --classmap-authoritative
Jika server Anda belum menginstal Composer, instal terlebih dahulu dengan perintah:
Bash
sudo apt install composer # Untuk Ubuntu/Debian
Lalu ulangi perintah nomor 2.
3. Solusi untuk site not https (Peringatan)
Moodle mendeteksi Anda masih menggunakan protokol http:// biasa. Untuk tahap uji coba lokal atau di jaringan internal (LAN) seperti IP 192.168.100.105 milik Anda, peringatan ini bisa diabaikan sementara waktu dan instalasi tetap bisa dilanjutkan.
Namun, jika web ini nantinya akan diakses secara publik (online lewat internet), Anda wajib memasang sertifikat SSL (misalnya menggunakan Let's Encrypt / Certbot) pada konfigurasi blok server Nginx Anda agar berubah menjadi https://.
Setelah Anda melakukan perubahan di atas (terutama nomor 1), silakan refresh/muat ulang halaman pengecekan Moodle di browser Anda. Statusnya akan berubah menjadi hijau (OK) dan tombol untuk melanjutkan instalasi akan aktif.