Untuk membuat server Moodle di Debian 13 bisa diakses dari jaringan lokal (via IP) sekaligus dari internet (via Cloudflare Tunnel) menggunakan satu domain atau IP masing-masing, tantangan utamanya ada pada konfigurasi config.php Moodle. Moodle secara default hanya mendukung satu wwwroot.

Namun, kita bisa mengakalinya dengan sedikit trik PHP agar Moodle mendeteksi dari mana request berasal. Berikut adalah panduan langkah demi langkah dari awal sampai berhasil.

Langkah 1: Setup Cloudflare Tunnel (cloudflared) di Debian 13

Asumsinya, domain smkn1pancer.my.id sudah aktif di dashboard Cloudflare Anda.

wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb

sudo dpkg -i cloudflared-linux-amd64.deb



cloudflared tunnel login


cloudflared tunnel create moodle-tunnel


sudo mkdir -p /etc/cloudflared

sudo nano /etc/cloudflared/config.yml


tunnel: UUID-TUNNEL-ANDA

credentials-file: /root/.cloudflared/UUID-TUNNEL-ANDA.json


ingress:

  - hostname: smkn1pancer.my.id

    service: http://192.168.100.105:80

  - service: http_status:404



cloudflared tunnel route dns moodle-tunnel smkn1pancer.my.id



sudo cloudflared service install

sudo systemctl start cloudflared

sudo systemctl enable cloudflared



Langkah 2: Konfigurasi Nginx Web Server

Nginx harus dikonfigurasi agar menerima request baik dari IP lokal maupun dari domain Cloudflare.

sudo nano /etc/nginx/sites-available/moodle



server {

    listen 80;

    server_name 192.168.100.105 smkn1pancer.my.id;


    root /var/www/html/moodle; # Sesuaikan dengan path moodle Anda

    index index.php index.html index.htm;


    # Konfigurasi standard PHP-FPM untuk Moodle

    location ~ \.php$ {

        include snippets/fastcgi-php.conf;

        fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Sesuaikan versi PHP Debian 13

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

    }


    # Jangan lupa tambahkan rest dari konfigurasi Moodle Anda di sini

}



sudo nginx -t

sudo systemctl restart nginx



Langkah 3: Trik Multi-URL pada config.php Moodle (Krusial)

Secara bawaan, jika Anda mengatur $CFG->wwwroot = 'https://smkn1pancer.my.id';, saat diakses via IP lokal tampilannya akan rusak (CSS/JS tidak load). Begitu pula sebaliknya.

Untuk mengatasinya, edit file config.php Moodle agar mendeteksi URL secara dinamis:

sudo nano /var/www/html/moodle/config.php



// Deteksi apakah diakses menggunakan domain internet atau IP lokal

if (isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] === 'smkn1pancer.my.id') {

    $CFG->wwwroot = 'https://smkn1pancer.my.id';

} else {

    // Default menggunakan IP lokal jika diakses dari jaringan LAN

    $CFG->wwwroot = 'http://192.168.100.105';

}



Langkah 4: Pengujian

Sekarang saatnya melakukan pengujian dari kedua sisi:

Catatan Tambahan:

Jika Anda ingin pengguna di jaringan lokal juga bisa mengetik https://smkn1pancer.my.id tanpa memakan kuota internet (alias langsung diarahkan via LAN), Anda bisa mengaktifkan fitur Local DNS di router utama sekolah (MikroTik) dengan mengarahkan smkn1pancer.my.id ke IP 192.168.100.105. Namun cara di atas adalah solusi termudah tanpa perlu utak-atik router.