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

 

 

2. Create Database

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;

 

 

3. Download & Extract Moodle

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.

sudo nano /etc/resolv.conf



nameserver 8.8.8.8

nameserver 1.1.1.1



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:

sudo wget https://download.moodle.org/download.php/direct/stable404/moodle-latest-404.tgz


sudo tar -xvzf moodle-latest-404.tgz


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:

sudo mkdir /var/www/moodledata



sudo chown -R www-data:www-data /var/www/moodledata



sudo chown -R apache:apache /var/www/moodledata



sudo chmod -R 775 /var/www/moodledata



/var/www/moodledata



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:

sudo chown www-data:www-data /var/www/html

sudo chmod 775 /var/www/html



sudo chown apache:apache /var/www/html

sudo chmod 775 /var/www/html



⚠️ 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

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)

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:

sudo nano /etc/php/8.x/fpm/php.ini


max_input_vars = 5000



sudo systemctl restart php8.x-fpm


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:

cd /var/www/html/moodle



sudo composer install --no-dev --classmap-authoritative



sudo apt install composer   # Untuk Ubuntu/Debian


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.