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.
Tingkat terpilih: 301–600 siswa serentak. Cocok untuk sekolah menengah dengan ujian bergelombang per ruang.
| Siswa serentak | vCPU | RAM | Disk | Worker PHP (awal) | Buffer pool DB |
|---|---|---|---|---|---|
| Sampai 100 | 2 | 2 GB | 25 GB SSD | 20 | 512 MB |
| 101 – 300 | 4 | 4 GB | 40 GB SSD | 40 | 1 GB |
| 301 – 600 | 4 | 8 GB | 60 GB NVMe | 80 | 3 GB |
| 601 – 1.000 | 8 | 16 GB | 100 GB NVMe | 140 | 8 GB |
| 1.001 – 2.000 | 8–16 | 32 GB | 200 GB NVMe | 220 | 16 GB |
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.
Alur Pemasangan
Sebagian besar langkah dikerjakan lewat antarmuka web panel. Terminal hanya dipakai untuk memasang panel dan beberapa penyetelan.
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
sudodijalankan sebagai user biasa. Bila Anda masuk sebagairoot,sudoboleh dihilangkan.
Memasang FASTPANEL
FASTPANEL dipasang sekali di VPS yang masih bersih. Ia memasang Nginx, database MySQL/MariaDB, PHP, dan layanan pendukung secara otomatis.
Masuk ke VPS sebagai root
Dari komputer Anda (PowerShell, macOS, atau Linux), pakai IP dari penyedia VPS:
ssh root@IP_VPSPerbarui sistem, lalu restart
Perintah ini memperbarui paket dan memasang
wgetserta sertifikat CA. Server restart di akhir, sehingga sesi SSH terputus; tunggu satu menit lalu masuk lagi.
apt-get update && apt-get upgrade -y && apt-get install -y ca-certificates wget && reboot
Jalankan pemasang FASTPANEL
Setelah masuk kembali sebagai root, jalankan perintah resmi berikut dan tunggu sampai selesai (beberapa menit).
wget https://repo.fastpanel.direct/install_fastpanel.sh -O - | bash -

Catat data akses
Di akhir proses, layar menampilkan alamat panel (
https://IP_VPS:8888), loginfastuser, dan sebuah password. Salin dan simpan ketiganya.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.Isi alamat email untuk lisensi
Pada login pertama, panel meminta lisensi. Masukkan alamat email Anda; data lisensi dikirim ke email tersebut.
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
fastuserdengan 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.
Membuat Situs dan Database
Wizard panel membuat situs, user, dan database sekaligus. Dokumentasi FASTPANEL menyarankan satu user terpisah untuk setiap situs.
Buka menu Sites, klik Create site
Tombol ada di sisi kanan layar. Wizard tiga langkah akan terbuka: Domain connection, Backend and database, dan Backups.

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 (misalnyaujian) dengan password kuat. Klik Next step.

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 setutf8mb4. Catat nama database, user, dan password ini.

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) | Ya | Hanya satu versi PHP bawaan panel. |
| FastCGI | Ya | Disarankan. Bisa memilih versi PHP (mis. 8.3) dan aturan .htaccess aplikasi tetap berlaku. |
| PHP-FPM | Tidak | Cepat, tetapi aturan keamanan .htaccess tidak berlaku sehingga harus diganti aturan Nginx setara. |
| CGI | Ya | Paling 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.

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:
| Ekstensi | Kegunaan |
|---|---|
pdo_mysql / mysqli | Koneksi ke database. |
sodium | Verifikasi lisensi. Tanpanya aktivasi gagal. |
zip | Backup dan impor ZIP bank soal. |
mbstring, gd, curl | Pengolahan 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:
<?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;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):
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.

Untuk mengekstrak, gunakan terminal. Kirim ZIP ke server dari komputer Anda (atau pakai SFTP dengan data akses situs), lalu ekstrak:
scp ryuexam-cbt.zip root@IP_VPS:/tmp/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.
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.

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:
$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 \.
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.
Buka Certificates di kartu situs
Klik Certificates, lalu buat sertifikat baru.
Pilih Let's Encrypt
Pada Type pilih Let's Encrypt, isi alamat email, lalu klik Save. Panel memperbarui sertifikat ini secara otomatis.
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.

6. Pemeriksaan keamanan dan login pertama
Pastikan aturan .htaccess aplikasi benar-benar berlaku. Dua perintah berikut harus menghasilkan 403 (ditolak). Jalankan dari 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.
Optimasi
Nilai pada bagian ini mengikuti tingkat yang Anda pilih di Spesifikasi VPS. Ubah pilihan, dan nilainya ikut berubah.
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):
| Pengaturan | Nilai | Alasan |
|---|---|---|
memory_limit | 256M | Cukup untuk impor soal dan ekspor dokumen. |
upload_max_filesize | 64M | Impor ZIP atau Word bank soal. |
post_max_size | 64M | Harus sama atau lebih besar dari batas unggah. |
max_execution_time | 120 | Impor atau ekspor berkas besar. |
date.timezone | Asia/Jakarta | Waktu ujian sesuai WIB. |
opcache.enable | 1 | Menyimpan kode PHP yang sudah dikompilasi, jauh lebih cepat. |
opcache.memory_consumption | 256 | Memori 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:
mysql --version
Lalu pasang berkas penyetelan. Berkas ini bekerja untuk MySQL maupun MariaDB di Ubuntu dan Debian:
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:
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/nullDengan 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:
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:
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:
journalctl --vacuum-size=200M
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:
| Pengaturan | Saran untuk VPS | Alasan |
|---|---|---|
| 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 menit | Token yang berganti terlalu sering membuat siswa terlambat gagal login dan memicu lebih banyak percobaan. |
| Pencegahan Multi Login (Metode Login Siswa) | Aktifkan | Mencegah satu akun dipakai di banyak perangkat sehingga beban dan kecurangan berkurang. |
| Jadwal ujian per ruang atau sesi | Bagi siswa dalam gelombang | Menurunkan 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.
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.
Siapkan alat di komputer Anda
Alatnya ada di folder
_loadtestpada paket aplikasi dan berjalan dari komputer Anda, bukan dari VPS. Klik dua kaliJalankan Uji Beban.bat. Panel terbuka di browser (http://127.0.0.1:8765/) dan jendela hitam harus tetap terbuka selama tes.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%.
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.
Baca hasilnya
Setelah selesai, data uji dihapus otomatis (kecuali dicentang Jangan hapus). Bila tes terputus, klik Bersihkan Data Uji.
apt-get install -y htop sysstat htop
mysql -e "SHOW GLOBAL STATUS LIKE 'Threads_connected'; SHOW GLOBAL STATUS LIKE 'Max_used_connections';"
tail -n 20 /var/log/mysql/slow.log ls /var/www/*/data/logs 2>/dev/null tail -n 20 /var/log/nginx/error.log
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 terlihat | Artinya | Tindakan |
|---|---|---|
| CPU 90–100% di awal tes lalu turun | Puncak 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/503 | Batas 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 banyak | Total memori terlalu kecil untuk worker dan database. | Turunkan jumlah worker atau buffer pool, atau tambah RAM. |
Max_used_connections mendekati max_connections | Database hampir kehabisan koneksi. | Naikkan max_connections, dan pastikan nilainya lebih besar dari jumlah worker PHP. |
| Banyak baris di log lambat | Ada 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.
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:
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:
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:
df -h / free -h systemctl --no-pager --failed uptime
Memperbarui aplikasi
Cadangkan lebih dulu
Jalankan
/usr/local/bin/backup-ujian.shdan ambil snapshot VPS.Unggah paket pembaruan
Kirim ZIP ke
/tmpdenganscpseperti sebelumnya.Timpa tanpa menyentuh data
Perintah di bawah menyalin berkas baru, namun mengecualikan
config.php, folderdata, dan_backup_questions. Sesuaikan jalur folder hasil ekstrak.
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.
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
.htaccesslolos - 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
htopdi 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
Masalah Umum dengan FASTPANEL
| Gejala | Penyebab & solusi |
|---|---|
Panel di :8888 tidak terbuka | Port 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 panel | Normal: panel memakai sertifikat bawaan. Lanjutkan, atau pasang sertifikat resmi untuk alamat panel. |
| Pemasangan panel gagal atau konflik | VPS tidak bersih. Instal ulang sistem operasi dan jalankan pemasang sekali lagi. |
| Let's Encrypt gagal terbit | Rekaman 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 aplikasi | Berkas 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 gagal | Naikkan upload_max_filesize dan post_max_size di PHP Settings situs. |
| Lambat saat awal ujian | Puncak login. Mulai siswa bergelombang per ruang, dan periksa CPU, Worker amount, serta batas Apache. |
| Disk penuh | Periksa df -h dan du -sh /var/backups/* /var/log/*. Perkecil masa simpan cadangan atau pindahkan keluar server. |
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.