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, buat akun baru di lingkungan testing untuk memastikan setelah migrasi akun tetap bisa digunakan seperti biasa.
Download Data#
Lakukan kompresi lalu download folder moodle dan moodledata dari panel web hosting. Lakukan backup juga terhadap database. Jika ada beberapa database, periksa file config.php di folder Moodle untuk mengetahui nama database yang digunakan.
Data yang perlu di-download:
- File Moodle (source)
- Folder
moodledata - Dump database (
.sql)
Periksa config.php untuk bagian dbname:
// contoh potongan di config.php
$CFG->dbname = 'nama_database';Persiapan Host Baru#
Saya menggunakan VPS berbasis Ubuntu Server 24.04.
Jalankan pembaruan paket:
sudo apt update && sudo apt upgrade -yInstalasi Jobe Server#
Jobe Server dijalankan di atas Docker menggunakan proyek jobeinabox. Dokumentasi: https://github.com/trampgeek/jobeinabox
Instal paket Docker (potongan ringkas):
sudo apt-get update
sudo apt-get install -y 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 -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginCek pemasangan Docker dengan menjalankan docker --version atau sudo docker ps.
Opsional: jalankan Docker tanpa sudo (logout/login diperlukan setelah menambahkan user ke grup docker):
sudo groupadd -f docker
sudo usermod -aG docker $USERJalankan container Jobe (contoh):
sudo docker run -d -p 4000:80 --name jobe --restart unless-stopped trampgeek/jobeinabox:latestCatatan keamanan: gunakan --restart unless-stopped atau atur sistemd/unit untuk kontrol yang lebih baik. Jangan menjalankan container sebagai root yang memiliki akses tidak terbatas ke host.
Opsional cek performa Jobe:
docker exec -it jobe /var/www/html/jobe/testsubmit.py --perfSesuaikan jumlah worker Jobe sesuai spesifikasi VPS: https://github.com/trampgeek/jobeinabox?tab=readme-ov-file#setting-the-number-of-jobe-users
Upload Data Moodle#

Upload data yang sudah di-download ke VPS menggunakan sftp, rsync over SSH, atau klien SFTP (mis. Cyberduck). Contoh menggunakan rsync:
rsync -avz /local/path/moodle user@vps:/home/user/
rsync -avz /local/path/moodledata user@vps:/home/user/
scp /local/path/backup.sql user@vps:/home/user/Instalasi LAMP Stack#
LAMP stack adalah gabungan dari Linux, Apache, MariaDB/MySQL, dan PHP. Periksa versi Moodle dan persyaratan minimal di https://moodledev.io/general/releases/
Instal PHP dan modul yang diperlukan (contoh untuk PHP 8.3):
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo add-apt-repository ppa:ondrej/apache2 -y
sudo apt update
sudo apt install -y 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
sudo a2enmod php8.3
sudo systemctl restart apache2Contoh pengaturan php.ini (sesuaikan kebutuhan):
max_input_vars = 5000
max_execution_time = 300
memory_limit = 512M
post_max_size = 64M
upload_max_filesize = 64M
date.timezone = Asia/JakartaInstalasi MariaDB#
sudo apt install -y apt-transport-https curl gnupg2
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 -y mariadb-server mariadb-clientJalankan sudo mysql_secure_installation dan ikuti petunjuk keamanan (set password root, hapus anonymous user, disable remote root login, hapus database test, reload privilege tables).
Contoh membuat database dan user Moodle (ubah nama dan password sesuai kebutuhan):
-- di mysql shell
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 (proses bisa memakan waktu tergantung ukuran):
sudo mysql -u moodle_user_new -p moodle_db_new < /path/to/your_moodle_backup.sqlKonfigurasi Moodle#
Ekstrak file dan pindahkan ke direktori web:
sudo apt install -y unzip
unzip moodle.zip # atau archive sesuai
unzip moodledata.zip
sudo mv moodle /var/www/html/
sudo mv moodledata /var/www/html/Atur kepemilikan dan permission yang lebih aman (hindari chmod 777):
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 {} \;
# untuk moodledata: cukup berikan group write kepada www-data
sudo chown -R www-data:www-data /var/www/html/moodledata
sudo find /var/www/html/moodledata -type d -exec chmod 750 {} \;
sudo find /var/www/html/moodledata -type f -exec chmod 640 {} \;Jika Moodle membutuhkan direktori yang dapat ditulis oleh web server, gunakan ACL atau tambahkan user yang tepat ke grup www-data daripada chmod 777.
Perbaiki path apabila ada typo. Contoh yang salah sebelumnya adalah /var/www//html/moodledata — gunakan /var/www/html/moodledata.
Ubah config.php sesuai instalasi (gunakan editor favorit):
$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';Terakhir, lakukan tes fungsionalitas dengan membuka situs Moodle di browser dan cek instalasi, plugin, dan integrasi Jobe.

