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.
Unduh dan Instal Cloudflared
Buka terminal Debian 13 Anda dan jalankan perintah berikut untuk mengunduh paket .deb versi terbaru:
Bash
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
Login ke Cloudflare
Jalankan perintah ini untuk menghubungkan server ke akun Cloudflare Anda:
Bash
cloudflared tunnel login
Salin link yang muncul di terminal, buka di browser, login ke Cloudflare, dan pilih domain smkn1pancer.my.id.
Buat Tunnel Baru
Buat tunnel (misalnya diberi nama moodle-tunnel):
Bash
cloudflared tunnel create moodle-tunnel
Catat UUID dan path file .json yang dihasilkan (misal: a1b2c3d4-...json).
Konfigurasi File Tunnel
Buat atau edit file konfigurasi di /etc/cloudflared/config.yml:
Bash
sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml
Isi dengan konfigurasi berikut (sesuaikan UUID dan path-nya):
YAML
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
Buat Routing DNS di Cloudflare
Hubungkan tunnel dengan domain Anda:
Bash
cloudflared tunnel route dns moodle-tunnel smkn1pancer.my.id
Jalankan Cloudflared sebagai Service Systemd
Agar tunnel otomatis berjalan saat server reboot:
Bash
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.
Buka file konfigurasi Nginx untuk Moodle Anda (misalnya di /etc/nginx/sites-available/moodle):
Bash
sudo nano /etc/nginx/sites-available/moodle
Pastikan pada bagian server_name mencakup IP lokal dan domain:
Nginx
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
}
Test dan restart Nginx:
Bash
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:
Buka file config.php:
Bash
sudo nano /var/www/html/moodle/config.php
Cari baris $CFG->wwwroot dan ubah menjadi logika PHP berikut:
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';
}
Simpan dan keluar (Ctrl+O, Enter, Ctrl+X).
Langkah 4: Pengujian
Sekarang saatnya melakukan pengujian dari kedua sisi:
Uji Coba Jalur Internet (Luar Sekolah):
Buka HP/Laptop menggunakan paket data seluler (bukan Wi-Fi lokal).
Akses https://smkn1pancer.my.id. Jika berhasil, Cloudflare Tunnel bekerja dengan baik dan SSL otomatis di-handle oleh Cloudflare.
Uji Coba Jalur Lokal (Dalam Sekolah):
Hubungkan HP/Laptop ke Wi-Fi yang satu jaringan dengan server (IP 192.168.100.xxx).
Akses http://192.168.100.105. Moodle harusnya terbuka dengan lancar tanpa ada CSS/gambar yang pecah karena aturan dinamis yang kita buat di config.php.
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.