Strategi Efisiensi: Memindahkan Moodle ke VPS Pay As You Go

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

Invoice shared hosting dan ssl tahunan

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.

Pricing di provider baru. Yang atas adalah harga storage, yang bawah adalah harga komputasi dengan spek 2c2gb dihitung per jam hanya ketika vps aktif

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.

data yang perlu di-download
lihat file config.php bagian dbname untuk tahu database mana yang digunakan

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
jalankan sudo docker untuk cek instalasi docker

(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