Strategi Efisiensi: Memindahkan Moodle ke VPS Pay As You Go

disclaimer : ini bukan tutorial
Latar Belakang
Sebuah aplikasi berbasis Moodle telah beroperasi selama kurang lebih sembilan bulan di atas shared hosting dengan sistem billing tahunan. Dalam proses pengembangannya, aplikasi ini memerlukan penambahan plugin bernama CodeRunner. Plugin ini memungkinkan penilaian otomatis untuk soal-soal pemrograman dan mensyaratkan adanya Jobe Server—sebuah server tambahan yang, saat tulisan ini dibuat, belum bisa di-deploy ke shared hosting. Oleh karena itu, kami terpaksa menggunakan VPS terpisah. Saat ini, kami menghadapi situasi di mana ada dua tagihan: shared hosting yang bersifat tahunan, dan VPS dengan sistem Pay As You Go.
Kebutuhan
Selama berjalan, aplikasi ini berfungsi sebagai pendukung pembelajaran di dalam kelas. Ini berarti trafik tidak penuh setiap hari. Meskipun aksesnya tetap dibuka, siswa sangat jarang mengakses aplikasi di luar jam pelajaran.
Keputusan Efisiensi

Dengan mempertimbangkan sifat seasonal atau musiman dari penggunaan aplikasi ini, biaya yang dikeluarkan saat ini dianggap terlalu tinggi. Oleh karena itu, diputuskan bahwa keseluruhan sistem akan dipindahkan ke VPS dengan sistem billing Pay As You Go.
Pay As You Go
Sistem "Pay As You Go" (PAYG) adalah model pembayaran fleksibel di mana pengguna hanya membayar untuk sumber daya komputasi atau layanan yang benar-benar digunakan, biasanya dihitung per jam atau per menit, memungkinkan optimalisasi biaya dan skalabilitas sesuai kebutuhan tanpa komitmen jangka panjang.

Eksekusi
Membuat Akun Baru
Sebelum proses migrasi dimulai saya membuat akun baru di lingkungan saat ini dengan tujuan testing apakah setelah migrasi dilakukan, akun tetap bisa digunakan seperti biasa.
Download Data
Lakukan kompres kemudian download folder Moodle dan Moodledata di panel web hosting, lakukan backup juga ke databasenya. Jika memiliki beberapa database, bisa merujuk ke file config.php yang ada di folder Moodle untuk tahu database mana yang digunakan instalasi Moodle tersebut.


Persiapan Host Baru
Menggunakan vps berbasis ubuntu server 24.04 dengan alasan se-simple sudah terbiasa saja sih.
sudo apt update
sudo apt upgrade
Instalasi Jobe Server
Jobe server dijalankan diatas docker, konfigurasi ini disebut dengan jobeinabox. Dokumentasi lebih lengkap dapat dilihat di https://github.com/trampgeek/jobeinabox
Install docker package terlebih dahulu
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

(opsional) Konfigurasi docker tanpa sudo
sudo groupadd docker
sudo usermod -aG docker $USER
Jalankan image Jobe Server, hilangkan bagian '--restart always' jika tidak ingin container selalu berjalan setelah reboot.
sudo docker run -d -p 4000:80 --name jobe --restart always trampgeek/jobeinabox:latest
(opsional) Cek performa Jobe Server
docker exec -it jobe /var/www/html/jobe/testsubmit.py --perf
(opsional) Sesuaikan jumlah jobe worker dengan spek VPS : https://github.com/trampgeek/jobeinabox?tab=readme-ov-file#setting-the-number-of-jobe-users
Upload Data Moodle
Upload data yang sudah didownload dari panel web ke VPS, di sini saya menggunakan sftp. Bisa menggunakan aplikasi sftp client seperti Cyberduck dan sebagainya.

Instalasi LAMP Stack
LAMP stack adalah kumpulan software open-source yang umum digunakan untuk menjalankan aplikasi web. Akronimnya merupakan gabungan dari Linux, Apache, MySQL/MariaDB, dan PHP. Untuk mengetahui versi minimal yang harus dipasang berdasarkan versi moodle bisa merujuk ke https://moodledev.io/general/releases/
Instalasi PHP
sudo apt update
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo add-apt-repository ppa:ondrej/apache2 -y
sudo apt update
sudo apt install php8.3 libapache2-mod-php8.3 php8.3-mysql php8.3-curl php8.3-gd php8.3-intl php8.3-mbstring php8.3-xml php8.3-zip php8.3-soap php8.3-xmlrpc php8.3-ldap -y
sudo a2enmod php8.3
sudo systemctl restart apache2
Ubah beberapa variabel bawaan
sudo nano /etc/php/8.3/apache2/php.ini
max_input_vars = 5000
max_execution_time = 300
memory_limit = 512M
post_max_size = 64M
upload_max_filesize = 64M
date.timezone = Asia/Jakarta
Instalasi MariaDB
sudo apt install apt-transport-https curl gnupg2 -y
sudo curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'
echo "deb [signed-by=/etc/apt/keyrings/mariadb-keyring.pgp] https://mirrors.porkbun.com/mariadb/repo/10.6/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/mariadb.list
sudo apt update
sudo apt install mariadb-server mariadb-client -y
sudo mysql_secure_installation
ikuti petunjuk berikut :
Enter current password for root (enter for none): Tekan Enter jika Anda belum mengatur password root. Jika sudah, masukkan password yang Anda buat sebelumnya.
Switch to unix_socket authentication [Y/n]: Tekan n (No) jika Anda ingin tetap menggunakan password untuk login root.
Change the root password? [Y/n]: Tekan Y dan masukkan password root baru yang kuat.
Remove anonymous users? [Y/n]: Tekan Y.
Disallow root login remotely? [Y/n]: Tekan Y (direkomendasikan untuk keamanan).
Remove test database and access to it? [Y/n]: Tekan Y.
Reload privilege tables now? [Y/n]: Tekan Y.
Membuat database dan user baru (ubah dulu nama database, user, passnya)
sudo mysql -u root -p
CREATE DATABASE moodle_db_new CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'moodle_user_new'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON moodle_db_new.* TO 'moodle_user_new'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Impor database (ini emang agak lama sih, di aku sekitar 10 menit-an)
sudo mysql -u moodle_user_new -p moodle_db_new < /path/to/your_moodle_backup.sql
Konfigurasi Moodle
Unzip file moodle , moodledata trus pindah ke /var/html
sudo apt install unzip
unzip moodle
unzip moodledata
sudo mv moodledata /var/www/html
sudo mv moodle /var/www/html
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 {} \;
sudo chown -R www-data:www-data /var/www//html/moodledata
sudo chmod -R 777 /var/www/html/moodledata
Ubah config.php
sudo nano /var/www/html/moodle/config.php
ini adalah bagian yagn perlu disesuaikan
$CFG->dbhost = 'localhost';
$CFG->dbname = 'moodle_db_new';
$CFG->dbuser = 'moodle_user_new';
$CFG->dbpass = 'your_strong_password';
$CFG->wwwroot = 'http://your_domain_or_ip/moodle';
$CFG->dataroot = '/var/www/html/moodledata';
Tes Fungsionalitas
Kunjungi web dan tes fungsionalitasnya