Instalasi & Optimasi di VPS dengan FASTPANEL

Pasang RyuExam CBT di VPS memakai panel FASTPANEL yang gratis: pilih spesifikasi berdasarkan jumlah siswa, pasang panel, buat situs dan database lewat antarmuka web, aktifkan HTTPS, lalu optimasi, uji beban, dan atur cadangan. Perintah terminal yang diperlukan bisa disalin dengan satu klik.

01

Menentukan Spesifikasi VPS

Pilih tingkat berdasarkan jumlah siswa yang mengerjakan ujian bersamaan, bukan jumlah seluruh siswa. Pilihan Anda juga mengatur nilai pada kotak perintah dan tabel di halaman ini.

vCPU4
RAM8 GB
Penyimpanan60 GB NVMe
Transfer / bulan3 TB
Jaringan1 Gbps

Tingkat terpilih: 301–600 siswa serentak. Cocok untuk sekolah menengah dengan ujian bergelombang per ruang.

Siswa serentakvCPURAMDiskWorker PHP (awal)Buffer pool DB
Sampai 10022 GB25 GB SSD20512 MB
101 – 30044 GB40 GB SSD401 GB
301 – 60048 GB60 GB NVMe803 GB
601 – 1.000816 GB100 GB NVMe1408 GB
1.001 – 2.0008–1632 GB200 GB NVMe22016 GB
Ini perkiraan, bukan jaminan

Angka di atas adalah titik awal yang konservatif, dihitung dari pola permintaan aplikasi (penjelasan di bawah), bukan hasil pengukuran di server tertentu. FASTPANEL dan layanan pendukungnya juga memakai sebagian RAM, jadi bila ragu pilih satu tingkat lebih tinggi. Selalu buktikan dengan uji beban sebelum hari ujian.

Dari mana angka ini berasal

Beban aplikasi ujian tidak merata. Ada tiga fase dengan kebutuhan berbeda:

Awal ujian (puncak CPU dan DB)

  • Siswa login dan memulai ujian hampir bersamaan, setiap siswa memicu beberapa kueri
  • Verifikasi password, berat di CPU bila password tersimpan sebagai hash
  • Soal dimuat, dan gambar soal diambil sekali per perangkat lalu disimpan browser

Saat mengerjakan (ringan)

  • Jawaban disinkronkan berkala, bawaan tiap 60 detik dengan jeda acak agar tersebar
  • Pemantauan pengawas tiap 10 detik, hanya dari sesi aktif
  • Satu siswa sekitar 1–2 permintaan per menit

Akhir ujian (puncak tulis DB)

  • Siswa mengumpulkan hampir bersamaan
  • Nilai dihitung dan disimpan per siswa secara atomik
  • Disk cepat dan buffer pool yang cukup sangat membantu
  • CPU menentukan seberapa cepat gelombang login di awal ujian terlayani. Bila ratusan siswa masuk dalam hitungan detik, tambah vCPU, atau bagi siswa per ruang agar mulai bergelombang.
  • RAM dibagi untuk proses PHP (sekitar 40–60 MB per worker), buffer pool database, panel, dan sistem operasi.
  • Disk bukan soal kapasitas melainkan kecepatan. Pilih SSD atau NVMe. Gambar soal disimpan di database (dikompres ke WebP), sehingga ukuran database tumbuh seiring jumlah gambar.
  • Bandwidth server jarang jadi masalah, tetapi internet sekolah sering jadi penyempit. Ratusan siswa yang memuat soal bersamaan lewat satu jalur sekolah butuh sekitar 50–100 Mbps. Jika jalur sekolah kecil, pertimbangkan server di jaringan lokal (LAN).

Memilih penyedia VPS

  • Pilih virtualisasi KVM dengan sumber daya khusus (bukan oversold), dan lokasi pusat data di Indonesia atau Singapura.
  • FASTPANEL membutuhkan sistem operasi bersih (belum ada web server atau database terpasang) dengan akses root. Sistem operasi yang didukung antara lain Ubuntu 22.04 dan 24.04 serta Debian 11 dan 12 (64-bit). Syarat minimum panel: RAM kosong 1 GB, disk kosong 5 GB, dan 1 core CPU.
  • Pilih penyedia yang mengizinkan menaikkan paket per jam atau per hari, supaya spek bisa dinaikkan hanya selama pekan ujian.
  • Aktifkan snapshot atau backup bawaan penyedia sebagai lapisan cadangan tambahan.
02

Alur Pemasangan

Sebagian besar langkah dikerjakan lewat antarmuka web panel. Terminal hanya dipakai untuk memasang panel dan beberapa penyetelan.

Gambar adalah ilustrasi

Tangkapan layar FASTPANEL di halaman ini adalah ilustrasi yang mengikuti alur dan nama menu dari dokumentasi resmi FASTPANEL, dengan data contoh. Tampilan pada versi panel Anda bisa sedikit berbeda. Teks berwarna kuning pada kotak perintah adalah nilai yang mengikuti tingkat terpilih, atau data yang wajib Anda ganti.

  • Siapkan berkas ZIP aplikasi dan kode lisensi dari penjual, serta domain atau subdomain (misalnya ujian.sekolah.sch.id) yang rekaman A-nya sudah diarahkan ke IP VPS.
  • Perintah diawali sudo dijalankan sebagai user biasa. Bila Anda masuk sebagai root, sudo boleh dihilangkan.
03

Memasang FASTPANEL

FASTPANEL dipasang sekali di VPS yang masih bersih. Ia memasang Nginx, database MySQL/MariaDB, PHP, dan layanan pendukung secara otomatis.

  1. Masuk ke VPS sebagai root

    Dari komputer Anda (PowerShell, macOS, atau Linux), pakai IP dari penyedia VPS:

Komputer Anda
ssh root@IP_VPS
  1. Perbarui sistem, lalu restart

    Perintah ini memperbarui paket dan memasang wget serta sertifikat CA. Server restart di akhir, sehingga sesi SSH terputus; tunggu satu menit lalu masuk lagi.

Server (root)
apt-get update && apt-get upgrade -y && apt-get install -y ca-certificates wget && reboot
  1. Jalankan pemasang FASTPANEL

    Setelah masuk kembali sebagai root, jalankan perintah resmi berikut dan tunggu sampai selesai (beberapa menit).

Server (root)
wget https://repo.fastpanel.direct/install_fastpanel.sh -O - | bash -
ssh root@IP_VPS
Hasil akhir pemasangan: alamat panel, login, dan password
Hasil akhir pemasangan: alamat panel, login, dan password (ilustrasi)
  1. Catat data akses

    Di akhir proses, layar menampilkan alamat panel (https://IP_VPS:8888), login fastuser, dan sebuah password. Salin dan simpan ketiganya.

  2. Buka panel di browser

    Buka https://IP_VPS:8888. Browser menampilkan peringatan sertifikat karena panel memakai sertifikat bawaan; lanjutkan saja untuk saat ini. Masuk dengan login dan password tadi.

  3. Isi alamat email untuk lisensi

    Pada login pertama, panel meminta lisensi. Masukkan alamat email Anda; data lisensi dikirim ke email tersebut.

Pasang hanya di VPS yang bersih

FASTPANEL tidak akan terpasang di server yang sudah berisi web server atau database yang dikonfigurasi. Jika VPS sebelumnya dipakai untuk hal lain, instal ulang sistem operasinya lebih dulu.

Amankan akses panel dan server

  • Port 8888 adalah pintu panel. Jika IP internet Anda tetap, batasi port itu hanya untuk IP Anda lewat menu Firewall di panel atau firewall penyedia VPS. Pastikan port 22 (SSH), 80, dan 443 tetap terbuka.
  • Ganti password fastuser dengan password kuat milik Anda sendiri lewat menu Users, dan jangan membagikannya.
  • Gunakan satu firewall saja (firewall panel atau firewall penyedia). Mencampur beberapa firewall sering menimbulkan aturan yang bertabrakan.
  • Untuk mengamankan SSH (kunci SSH, mematikan login root dan password, fail2ban), ikuti bagian Menyiapkan Server pada panduan manual, setelah panel terpasang dan berjalan.
04

Membuat Situs dan Database

Wizard panel membuat situs, user, dan database sekaligus. Dokumentasi FASTPANEL menyarankan satu user terpisah untuk setiap situs.

  1. Buka menu Sites, klik Create site

    Tombol ada di sisi kanan layar. Wizard tiga langkah akan terbuka: Domain connection, Backend and database, dan Backups.

IP_VPS:8888/sites
Menu Sites: klik Create site
Menu Sites: klik Create site (ilustrasi)
  1. Langkah 1: hubungkan domain

    Pilih tipe situs PHP (bukan CMS). Isi Domain (misalnya ujian.sekolah.sch.id), email admin, lalu buat user baru khusus situs ini (misalnya ujian) dengan password kuat. Klik Next step.

IP_VPS:8888/sites/create
Wizard langkah 1: tipe PHP, domain, dan user
Wizard langkah 1: tipe PHP, domain, dan user (ilustrasi)
  1. Langkah 2: backend dan database

    Pilih PHP 8.3 (bila belum tersedia, lihat bagian ekstensi di bawah) dan PHP mode FastCGI. Lalu isi data database: nama (cbt_ujian), user (cbt_user), password kuat, dan character set utf8mb4. Catat nama database, user, dan password ini.

IP_VPS:8888/sites/create
Wizard langkah 2: versi PHP, mode, dan database
Wizard langkah 2: versi PHP, mode, dan database (ilustrasi)
  1. Langkah 3: backup, lalu selesai

    Atur rencana backup situs bila diinginkan (lihat bagian Backup), lalu selesaikan wizard. Panel menawarkan View, Download, atau Send untuk data akses (database, FTP, SFTP). Simpan di tempat aman.

Mengapa memilih mode FastCGI

Aplikasi mengandalkan berkas .htaccess untuk memblokir folder internal (views, data, _backup_questions), menolak berkas sensitif, memasang header keamanan, dan mengatur cache. Panel memakai Nginx di depan dan, pada sebagian mode, Apache di belakang:

Mode PHP.htaccess dibaca?Catatan
Apache module (mod_php)YaHanya satu versi PHP bawaan panel.
FastCGIYaDisarankan. Bisa memilih versi PHP (mis. 8.3) dan aturan .htaccess aplikasi tetap berlaku.
PHP-FPMTidakCepat, tetapi aturan keamanan .htaccess tidak berlaku sehingga harus diganti aturan Nginx setara.
CGIYaPaling lambat, tidak disarankan untuk ujian.

Mode dapat diubah kapan saja lewat kartu situs: buka situs di menu Sites, pilih Settings, lalu Backend. Pilihan versi PHP juga ada di sana.

IP_VPS:8888/sites/ujian.sekolah.sch.id
Kartu situs › Settings › Backend: mode PHP dan versi
Kartu situs › Settings › Backend: mode PHP dan versi (ilustrasi)
Ingin PHP-FPM untuk performa?

Mode PHP-FPM bisa lebih ringan untuk ujian besar, tetapi karena .htaccess tidak dibaca, Anda wajib memasang aturan setara di konfigurasi Nginx situs (lihat bagian pemasangan situs di panduan manual) dan menguji dengan perintah pemeriksaan keamanan di bawah.

Memasang PHP 8.3 dan mengaktifkan ekstensi

Jika PHP 8.3 belum ada di pilihan, pasang dulu lewat menu Settings › Applications: cari entri PHP yang sesuai (misalnya php83) lalu klik Install. Kemudian buka menu PHP untuk memeriksa PHP modules pada versi tersebut dan pastikan ekstensi berikut aktif:

EkstensiKegunaan
pdo_mysql / mysqliKoneksi ke database.
sodiumVerifikasi lisensi. Tanpanya aktivasi gagal.
zipBackup dan impor ZIP bank soal.
mbstring, gd, curlPengolahan teks, gambar, dan komunikasi jaringan.

Setelah aplikasi diunggah (langkah berikutnya), Anda bisa memeriksa seluruh ekstensi sekaligus dengan berkas uji kecil. Buat berkas cek.php di folder situs dengan isi di bawah, buka https://domain/cek.php, lalu hapus berkasnya setelah selesai:

cek.php
<?php
foreach (['pdo_mysql', 'mysqli', 'sodium', 'zip', 'mbstring', 'gd', 'curl'] as $e) {
    echo $e . ': ' . (extension_loaded($e) ? 'OK' : 'TIDAK AKTIF') . '<br>';
}
echo 'PHP ' . PHP_VERSION;
05

Memasang Aplikasi

Unggah ZIP ke folder situs, ekstrak, lalu isi koneksi database di config.php.

1. Cari folder situs

Panel membuat folder terpisah untuk setiap situs. Lihat jalur sebenarnya di server dengan perintah berikut, lalu catat jalurnya (nanti disebut SITE_DIR):

Server
sudo find /var/www -maxdepth 4 -type d -name "ujian.sekolah.sch.id"

Pada banyak instalasi bentuknya seperti /var/www/ujian/data/www/ujian.sekolah.sch.id, tetapi pakai hasil perintah di atas. Nama user pemilik situs (misalnya ujian) disebut SITE_USER.

2. Unggah dan ekstrak

Cara termudah: dari kartu situs buka Files, hapus berkas bawaan panel bila ada (misalnya index.html), lalu klik Upload dan pilih ZIP aplikasi.

IP_VPS:8888/sites/ujian.sekolah.sch.id/files
Files: unggah berkas ke folder situs
Files: unggah berkas ke folder situs (ilustrasi)

Untuk mengekstrak, gunakan terminal. Kirim ZIP ke server dari komputer Anda (atau pakai SFTP dengan data akses situs), lalu ekstrak:

Komputer Anda
scp ryuexam-cbt.zip root@IP_VPS:/tmp/
Server (root)
apt-get install -y unzip
unzip -q /tmp/ryuexam-cbt.zip -d SITE_DIR
chown -R SITE_USER:SITE_USER SITE_DIR
find SITE_DIR -type d -exec chmod 755 {} \;
find SITE_DIR -type f -exec chmod 644 {} \;
rm /tmp/ryuexam-cbt.zip
ls -la SITE_DIR | head -20

Ganti SITE_DIR dan SITE_USER dengan nilai Anda. Pastikan index.php, admin.php, config.php, dan .htaccess terlihat langsung di folder situs. Bila terbentuk satu subfolder tambahan, pindahkan isinya ke atas.

Jangan unggah folder uji beban

Folder _loadtest adalah alat uji beban yang dijalankan dari komputer Anda. Jika ikut terunggah, hapus dengan rm -rf SITE_DIR/_loadtest (periksa dulu bahwa jalurnya benar).

3. Siapkan database

Bila Anda sudah membuat database lewat wizard, lewati bagian ini. Untuk membuat database tambahan atau baru, buka menu Databases, klik New database, lalu isi: Database name, Server, User (login), Owner, Website, Character set (UTF-8/utf8mb4), dan Password. Jika paket aplikasi menyertakan berkas .sql, impor lewat ikon phpMyAdmin di kartu situs (menu Databases). Jika tidak, tabel dibuat otomatis saat aplikasi pertama kali dibuka.

IP_VPS:8888/databases
Databases › New database
Databases › New database (ilustrasi)

4. Isi config.php

Dari kartu situs buka Files, klik config.php lalu edit (atau jalankan nano SITE_DIR/config.php di terminal). Isi bagian $db_hosting dan paksa mode hosting:

config.php
$environment_mode = 'hosting';

$db_hosting = [
    'host' => 'localhost',
    'port' => '3306',
    'name' => 'cbt_ujian',
    'user' => 'cbt_user',
    'pass' => 'GANTI_PASSWORD_KUAT',
];

Gunakan nama database, user, dan password yang tercatat dari wizard. Jika nama database atau user yang tampil di panel berbeda dari yang Anda ketik (misalnya diberi awalan), pakai persis yang tampil di panel. Jika password mengandung tanda petik ' atau garis miring terbalik \, awali dengan \.

Server (root)
chmod 640 SITE_DIR/config.php
chown SITE_USER:SITE_USER SITE_DIR/config.php

5. Aktifkan HTTPS

Pastikan rekaman A domain sudah mengarah ke IP VPS dan sudah aktif. Sertifikat Let's Encrypt hanya bisa terbit untuk domain yang sudah mengarah ke server.

  1. Buka Certificates di kartu situs

    Klik Certificates, lalu buat sertifikat baru.

  2. Pilih Let's Encrypt

    Pada Type pilih Let's Encrypt, isi alamat email, lalu klik Save. Panel memperbarui sertifikat ini secara otomatis.

  3. Aktifkan pengalihan HTTPS

    Pengalihan dari HTTP ke HTTPS mati secara bawaan. Buka Settings › HTTPS di kartu situs, lalu aktifkan HTTPS redirect (dan HTTP2). HSTS opsional, aktifkan hanya bila HTTPS sudah stabil.

IP_VPS:8888/sites/ujian.sekolah.sch.id/certificates
Certificates: buat sertifikat Let's Encrypt
Certificates: buat sertifikat Let's Encrypt (ilustrasi)

6. Pemeriksaan keamanan dan login pertama

Pastikan aturan .htaccess aplikasi benar-benar berlaku. Dua perintah berikut harus menghasilkan 403 (ditolak). Jalankan dari komputer Anda:

Komputer Anda
curl -I https://ujian.sekolah.sch.id/CHANGELOG.txt
curl -I https://ujian.sekolah.sch.id/views/

Jika salah satunya menjawab 200, .htaccess tidak dibaca. Itu biasanya berarti mode PHP-nya PHP-FPM. Kembali ke Settings › Backend dan ubah ke FastCGI, lalu coba lagi.

Setelah lolos, buka https://ujian.sekolah.sch.id/admin.php, masuk dengan akun admin dari paket, ganti password di Pengaturan › Kelola Admin, lalu aktifkan lisensi lewat Memasukkan Lisensi.

06

Optimasi

Nilai pada bagian ini mengikuti tingkat yang Anda pilih di Spesifikasi VPS. Ubah pilihan, dan nilainya ikut berubah.

Tingkat aktif:301–600 siswa serentakGanti

1. PHP dan jumlah worker

Buka situs di menu Sites, lalu Settings:

  • Backend › Worker amount: jumlah proses PHP yang melayani situs. Mulailah dari 80, lalu naikkan atau turunkan sesuai hasil uji beban dan sisa RAM. Terlalu sedikit membuat siswa mengantre, terlalu banyak menghabiskan RAM. Rumus kasarnya: (RAM − RAM untuk database dan sistem) ÷ 50 MB.
  • PHP Settings: ubah nilai berikut pada daftar pengaturan situs (kolom nama, modul, nilai, dan penanda perubahan dari bawaan):
PengaturanNilaiAlasan
memory_limit256MCukup untuk impor soal dan ekspor dokumen.
upload_max_filesize64MImpor ZIP atau Word bank soal.
post_max_size64MHarus sama atau lebih besar dari batas unggah.
max_execution_time120Impor atau ekspor berkas besar.
date.timezoneAsia/JakartaWaktu ujian sesuai WIB.
opcache.enable1Menyimpan kode PHP yang sudah dikompilasi, jauh lebih cepat.
opcache.memory_consumption256Memori OPcache dalam MB.

Pengaturan dasar PHP per versi juga ada di menu PHP pada panel. Bila entri OPcache tidak tampil pada daftar situs, ubah di sana. Setelah menyimpan, panel menerapkan perubahan ke situs.

2. Database (MySQL/MariaDB)

Parameter terpenting adalah innodb_buffer_pool_size, yaitu memori yang dipakai database untuk menyimpan data aktif. Nilainya sekitar 40–50% RAM bila PHP berjalan di server yang sama. Periksa dulu jenis database yang dipasang panel:

Server (root)
mysql --version

Lalu pasang berkas penyetelan. Berkas ini bekerja untuk MySQL maupun MariaDB di Ubuntu dan Debian:

Server (root)
tee /etc/mysql/conf.d/99-ryuexam.cnf >/dev/null <<'EOF'
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip_name_resolve = 1
bind-address = 127.0.0.1

innodb_buffer_pool_size = 3G
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2

max_connections = 250
max_allowed_packet = 64M
thread_cache_size = 64
table_open_cache = 2000
tmp_table_size = 64M
max_heap_table_size = 64M

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
EOF
systemctl restart mysql 2>/dev/null || systemctl restart mariadb

Periksa bahwa pengaturan terbaca dan layanan berjalan:

Server (root)
mysql -e "SHOW VARIABLES WHERE Variable_name IN ('innodb_buffer_pool_size','max_connections','innodb_flush_log_at_trx_commit');"
systemctl is-active mysql mariadb 2>/dev/null
Tentang innodb_flush_log_at_trx_commit = 2

Dengan nilai 2, database menulis log ke disk sekali per detik, bukan setiap transaksi, sehingga penulisan jauh lebih cepat saat ratusan siswa mengumpulkan jawaban bersamaan. Risikonya: bila server mati mendadak, paling banyak sekitar 1 detik transaksi terakhir bisa hilang. Karena aplikasi menyinkronkan jawaban tiap 60 detik, risikonya kecil. Untuk keamanan data maksimum, ubah ke 1.

Pada MySQL 8 versi baru, ukuran log transaksi diatur otomatis, jadi parameter innodb_log_file_size sengaja tidak dipakai di sini. Bila log lambat menunjukkan kueri di atas 1 detik, periksa /var/log/mysql/slow.log.

3. Sistem operasi

Naikkan batas antrean koneksi dan berkas terbuka, dan kurangi kecenderungan memakai swap:

Server (root)
tee /etc/sysctl.d/99-ryuexam.conf >/dev/null <<'EOF'
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.ip_local_port_range = 10240 65535
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 200000
vm.swappiness = 10
EOF
sysctl --system >/dev/null

Pada tingkat 2 GB dan 4 GB, tambahkan swap 2 GB sebagai pengaman:

Server (root)
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
free -h

Batasi ukuran log sistem agar disk tidak penuh:

Server (root)
journalctl --vacuum-size=200M
Batas konkurensi web server

Pada mode yang memakai Apache sebagai backend (Apache module dan FastCGI), jumlah koneksi Apache ikut membatasi kapasitas. Jika uji beban menunjukkan antrean padahal CPU dan RAM masih longgar, periksa batas proses/koneksi Apache pada konfigurasi server (misalnya MaxRequestWorkers) atau pertimbangkan mode PHP-FPM dengan aturan Nginx setara. Panduan ini tidak mengubah konfigurasi inti panel agar pembaruan panel tidak bentrok.

4. Pengaturan di dalam aplikasi

Beberapa pengaturan di panel admin aplikasi ikut menentukan beban server. Buka Pengaturan lalu atur:

PengaturanSaran untuk VPSAlasan
Interval Sinkronisasi Jawaban (Umum)60 detik untuk sampai 300 siswa. 75–90 detik untuk 300 sampai 1.000. 90–120 detik untuk lebih dari 1.000.Makin jarang sinkronisasi, makin sedikit permintaan. Aplikasi menyebarkan waktunya secara acak. Batas yang diterima 30–600 detik.
Token Dinamis (Token Dinamis)Interval 30–60 menitToken yang berganti terlalu sering membuat siswa terlambat gagal login dan memicu lebih banyak percobaan.
Pencegahan Multi Login (Metode Login Siswa)AktifkanMencegah satu akun dipakai di banyak perangkat sehingga beban dan kecurangan berkurang.
Jadwal ujian per ruang atau sesiBagi siswa dalam gelombangMenurunkan puncak login dan puncak pengumpulan jawaban. Efeknya sering lebih besar daripada menambah spek.

Untuk memantau, buka menu Status Ujian di aplikasi. Halaman itu hanya membaca jadwal aktif, dan data tidak diperbarui otomatis sehingga aman dibuka beberapa pengawas sekaligus.

07

Uji Beban Sebelum Hari Ujian

Buktikan bahwa server sanggup menampung jumlah siswa Anda. Aplikasi menyertakan alat uji beban yang meniru siswa sungguhan: membuka halaman, login, memulai ujian, memuat soal, menjawab dan menyinkronkan, lalu mengumpulkan.

  1. Siapkan alat di komputer Anda

    Alatnya ada di folder _loadtest pada paket aplikasi dan berjalan dari komputer Anda, bukan dari VPS. Klik dua kali Jalankan Uji Beban.bat. Panel terbuka di browser (http://127.0.0.1:8765/) dan jendela hitam harus tetap terbuka selama tes.

  2. Isi data tes

    Masukkan URL aplikasi di VPS, username dan password admin, serta jumlah siswa virtual. Mulailah dari 50% target, lalu naik ke 100% dan 120%.

  3. Pantau server saat tes berjalan

    Perhatikan batang CPU, RAM, dan disk di bagian atas panel FASTPANEL, dan buka satu sesi SSH untuk perintah di bawah.

  4. Baca hasilnya

    Setelah selesai, data uji dihapus otomatis (kecuali dicentang Jangan hapus). Bila tes terputus, klik Bersihkan Data Uji.

Sesi SSH 1: CPU, RAM, antrean
apt-get install -y htop sysstat
htop
Sesi SSH 2: koneksi database
mysql -e "SHOW GLOBAL STATUS LIKE 'Threads_connected'; SHOW GLOBAL STATUS LIKE 'Max_used_connections';"
Setelah tes: log lambat dan galat
tail -n 20 /var/log/mysql/slow.log
ls /var/www/*/data/logs 2>/dev/null
tail -n 20 /var/log/nginx/error.log
Aturan penting uji beban

Jalankan hanya saat tidak ada ujian sungguhan, karena alat ini mengimpor dan menghapus data siswa uji. Semua siswa virtual datang dari satu IP (komputer Anda), jadi matikan sementara pembatas laju atau WAF seperti Cloudflare. Hasil juga dipengaruhi koneksi internet komputer Anda.

Cara menafsirkan hasil

Yang terlihatArtinyaTindakan
CPU 90–100% di awal tes lalu turunPuncak login dan pembuatan sesi. Normal bila singkat.Bagi siswa dalam gelombang, atau tambah vCPU bila antreannya lama.
CPU masih rendah, tetapi siswa mengantre atau galat 502/503Batas worker PHP atau batas koneksi Apache tercapai.Naikkan Worker amount bila RAM longgar, atau periksa batas Apache (lihat catatan di bagian Optimasi).
RAM habis dan swap terpakai banyakTotal memori terlalu kecil untuk worker dan database.Turunkan jumlah worker atau buffer pool, atau tambah RAM.
Max_used_connections mendekati max_connectionsDatabase hampir kehabisan koneksi.Naikkan max_connections, dan pastikan nilainya lebih besar dari jumlah worker PHP.
Banyak baris di log lambatAda kueri yang butuh lebih dari 1 detik.Periksa disk, buffer pool, dan jumlah data. Laporkan kueri yang lambat ke penjual aplikasi.
Disk sibuk (I/O wait tinggi di htop)Penulisan database menunggu disk.Pakai NVMe, atau tambah buffer pool.

Ulangi tes setelah setiap perubahan, satu perubahan dalam satu waktu, supaya jelas mana yang berpengaruh.

08

Backup, Pemantauan, dan Pembaruan

Backup lewat panel dan aplikasi

  • Rencana backup situs: atur pada langkah Backups di wizard pembuatan situs, atau lewat menu Backups / tab Backups di kartu situs. Pilih jadwal harian dan simpan salinan di luar server bila panel menyediakannya.
  • Backup database dari aplikasi: menu Pengaturan › Database › Unduh Backup (.sql) sebelum dan sesudah ujian.
  • Snapshot penyedia VPS: ambil snapshot sebelum pekan ujian dan sebelum memperbarui aplikasi.

Backup database terjadwal lewat skrip

Sebagai lapisan tambahan, skrip ini mencadangkan database setiap malam pukul 01.30 dan menghapus yang lebih dari 14 hari. Ganti DB_USER, DB_PASS, dan DB_NAME dengan data database aplikasi:

Server (root)
tee /root/.ujian-db.cnf >/dev/null <<'EOF'
[client]
user=DB_USER
password=DB_PASS
EOF
chmod 600 /root/.ujian-db.cnf
tee /usr/local/bin/backup-ujian.sh >/dev/null <<'EOF'
#!/bin/bash
set -euo pipefail
DIR=/var/backups/ujian
STAMP=$(date +%F_%H%M)
mkdir -p "$DIR"
mysqldump --defaults-extra-file=/root/.ujian-db.cnf --single-transaction --quick DB_NAME | gzip > "$DIR/DB_NAME_$STAMP.sql.gz"
find "$DIR" -type f -name '*.sql.gz' -mtime +14 -delete
EOF
chmod 750 /usr/local/bin/backup-ujian.sh
echo "30 1 * * * root /usr/local/bin/backup-ujian.sh" | tee /etc/cron.d/backup-ujian
/usr/local/bin/backup-ujian.sh && ls -lh /var/backups/ujian

Salin hasilnya keluar server secara berkala, misalnya dari komputer Anda:

Komputer Anda
scp root@IP_VPS:/var/backups/ujian/*.gz .

Pemantauan harian

Dashboard FASTPANEL menampilkan beban CPU, RAM, dan disk secara langsung. Untuk pemeriksaan cepat dari terminal:

Server (root)
df -h /
free -h
systemctl --no-pager --failed
uptime

Memperbarui aplikasi

  1. Cadangkan lebih dulu

    Jalankan /usr/local/bin/backup-ujian.sh dan ambil snapshot VPS.

  2. Unggah paket pembaruan

    Kirim ZIP ke /tmp dengan scp seperti sebelumnya.

  3. Timpa tanpa menyentuh data

    Perintah di bawah menyalin berkas baru, namun mengecualikan config.php, folder data, dan _backup_questions. Sesuaikan jalur folder hasil ekstrak.

Server (root)
apt-get install -y rsync unzip
mkdir -p /tmp/update
unzip -q /tmp/ryuexam-update.zip -d /tmp/update
rsync -a --exclude 'config.php' --exclude 'data/' --exclude '_backup_questions/' --exclude '_loadtest/' /tmp/update/ SITE_DIR/
chown -R SITE_USER:SITE_USER SITE_DIR

Buka situs sekali agar pembaruan tabel berjalan otomatis, lalu cek Log Pembaruan di panel admin aplikasi untuk memastikan versinya benar.

09

Daftar Periksa Hari Ujian

H-7 sampai H-1

  • Uji beban pada 100% dan 120% target
  • Backup dan restore diuji sekali
  • HTTPS aktif, lisensi aktif, dan uji keamanan .htaccess lolos
  • Server naik ke spek ujian bila memakai paket per jam
  • Tunda pembaruan sistem dan panel sampai ujian selesai

Hari ujian

  • Cek disk, RAM kosong, dan systemctl --failed
  • Jalankan backup sebelum mulai
  • Buka dashboard panel dan htop di sesi terpisah
  • Mulai siswa per ruang agar login bergelombang
  • Siapkan satu pengawas untuk membuka kunci siswa

Setelah ujian

  • Pastikan semua siswa sudah mengumpulkan
  • Unduh rekap nilai dan jawaban
  • Jalankan backup, salin keluar server
  • Turunkan spek VPS bila tidak dipakai lagi
  • Lihat Analisis Soal untuk evaluasi
10

Masalah Umum dengan FASTPANEL

GejalaPenyebab & solusi
Panel di :8888 tidak terbukaPort 8888 diblokir firewall (panel atau penyedia), atau alamat IP salah. Pakai https:// bukan http://, dan izinkan port 8888 untuk IP Anda.
Peringatan sertifikat saat membuka panelNormal: panel memakai sertifikat bawaan. Lanjutkan, atau pasang sertifikat resmi untuk alamat panel.
Pemasangan panel gagal atau konflikVPS tidak bersih. Instal ulang sistem operasi dan jalankan pemasang sekali lagi.
Let's Encrypt gagal terbitRekaman A domain belum mengarah ke IP VPS atau belum aktif (propagasi DNS), atau port 80/443 tertutup. Perbaiki DNS, tunggu, lalu coba lagi.
Halaman bawaan panel muncul, bukan aplikasiBerkas bawaan seperti index.html masih ada di folder situs (hapus), atau aplikasi diekstrak ke subfolder (pindahkan isinya ke atas).
CHANGELOG.txt atau /views/ menjawab 200.htaccess tidak dibaca (mode PHP-FPM). Ganti mode ke FastCGI di Settings › Backend.
“Gagal Terhubung ke Database MySQL”Nama, user, atau password di $db_hosting tidak sama dengan yang tampil di panel, atau $environment_mode belum 'hosting'. Cek di menu Databases.
“Ekstensi PHP sodium tidak aktif”Aktifkan sodium di menu PHP › PHP modules untuk versi yang dipakai situs, lalu muat ulang halaman aktivasi.
Impor atau unggah berkas besar gagalNaikkan upload_max_filesize dan post_max_size di PHP Settings situs.
Lambat saat awal ujianPuncak login. Mulai siswa bergelombang per ruang, dan periksa CPU, Worker amount, serta batas Apache.
Disk penuhPeriksa df -h dan du -sh /var/backups/* /var/log/*. Perkecil masa simpan cadangan atau pindahkan keluar server.
Perlu bantuan?

Untuk memasang atau menyetel VPS bersama tim kami, hubungi lewat WhatsApp dengan menyebutkan jumlah siswa dan penyedia VPS yang dipakai. Dokumentasi resmi FASTPANEL ada di kb.fastpanel.direct.

Ingin dipasangkan di VPS?

Kami bisa membantu instalasi, optimasi, dan uji beban sesuai jumlah siswa sekolah Anda.

Chat WhatsApp VPS Manual (tanpa panel)