Referensi Perintah
Semua perintah examtool dan opsinya.
install
Instalasi lengkap server ujian.
Opsi Dengan HTTPS
examtool install \
--domain=demo.ujiancbt.online \
--client=200 \
--file-crt=/root/ssl/ujian.crt \
--file-key=/root/ssl/ujian.key \
--username=webdev01 \
--password=Rahasia123
Opsi HTTP-only (tanpa SSL, di belakang proxy)
examtool install \
--domain=demo.ujiancbt.online \
--client=200 \
--username=webdev01 \
--password=Rahasia123
Opsi HTTP-only, tanpa security, custom SSH port
examtool install \
--domain=demo.ujiancbt.online \
--client=200 \
--username=webdev01 \
--password=Rahasia123 \
--security=false \
--ssh-port=2222
| Parameter | Wajib | Keterangan |
|---|---|---|
--domain |
Ya | Domain server ujian |
--client |
Ya | Jumlah PC ujian + cadangan (max 500) |
--file-crt |
Tidak | Path ke file SSL certificate (.crt, PEM format). Tanpa ini = HTTP-only |
--file-key |
Tidak | Path ke file SSL private key (.key, RSA atau EC). Wajib jika --file-crt ada |
--username |
Ya | Username SFTP/file manager (3-32 char, huruf kecil, lihat reserved words) |
--password |
Ya | Password SFTP/file manager (8-32 char, minimal 1 huruf + 1 angka) |
--env-file |
Tidak | Path ke file .env (default: /etc/examtool.env) |
--security |
Tidak | Aktifkan security/ufw/fail2ban (default: true). Set false jika di belakang infra lain |
--ssh-port |
Tidak | Custom SSH port (default: 22). Otomatis update sshd_config, ufw, dan fail2ban |
HTTP-only mode: Jika
--file-crtdan--file-keytidak disertakan, server hanya listen di port 80 (HTTP). Gunakan mode ini jika server di belakang reverse proxy yang menangani SSL.
Username & password digunakan untuk membuat user Linux yang bisa mengakses file aplikasi via SFTP atau aplikasi sejenis (misalnya untuk upload/edit konten). User ini bukan root dan bukan untuk remote server — hanya untuk file management.
Username restrictions: Username tidak boleh menggunakan reserved words: root, admin, administrator, www-data, mysql, postgres, nginx, apache, operator, nobody, daemon, bin, sys, man, mail.
File .env: Jika /etc/examtool.env tidak ada, examtool otomatis membuatnya dari template. Password database juga di-generate otomatis.
Port check: Sebelum install, examtool mengecek apakah port SSH, 80, 3306, dan 11211 (serta 443 jika menggunakan SSL) sudah dipakai service lain. Jika ada conflict, install dihentikan dan ditampilkan langkah manual yang perlu dilakukan sysadmin.
Security: Secara default, examtool mengaktifkan UFW firewall dan Fail2ban. Jika server berada di belakang infra yang sudah menangani security (VPN, proxy dengan firewall), gunakan --security=false untuk menonaktifkan.
SSH port: Jika server menggunakan custom SSH port (bukan 22), gunakan --ssh-port=PORT. Examtool akan mengupdate /etc/ssh/sshd_config, rule UFW, dan fail2ban jail secara otomatis. SSH port selalu dikelola meskipun security disabled.
Jika dijalankan di server yang sudah terinstall (config file ada), otomatis masuk mode reconfiguration — skip instalasi paket, hanya update konfigurasi.
status
Health check lengkap server.
examtool status
Output mencakup:
- Status semua service (nginx, php-fpm, mariadb, memcached, fail2ban, dnsmasq) — jika security disabled, fail2ban ditampilkan dim "security disabled" bukan merah STOPPED
- Resource usage (CPU, RAM, disk, swap)
- Koneksi database dan ukuran DB
- SSL certificate expiry
- Nginx config test
- Memcached hit ratio
- Fail2ban banned IPs
- Security status (enabled/disabled) dan SSH port
- Error log terbaru (1 jam)
- Versi aplikasi (git commit)
Exit code 0 = semua OK. Non-zero = ada masalah.
update
Update aplikasi + cek update database dari portal.
examtool update
Mengupdate kedua repository (ujian + rasch), regenerate config, reload nginx + php-fpm, lalu otomatis cek apakah ada update database di portal. Jika ada database baru (checksum berbeda), muncul konfirmasi — jika ya, database lama di-backup otomatis sebelum import.
Error handling: Jika
git pullgagal (misalnya karena file untracked yang conflict dengan file dari repository), examtool akan menampilkan pesan error, daftar file yang conflict, dan instruksi perbaikan. Update tetap dilanjutkan untuk repository lain, tapi status akhir akan menunjukkan warning.
update-db
Update database dari portal (standalone, tanpa update aplikasi).
examtool update-db
Flow:
- Cek metadata database di portal (checksum, size, tanggal update)
- Bandingkan dengan database terakhir yang diimport
- Jika berbeda, tampilkan info dan konfirmasi
- Jika ya → backup database lama otomatis → download → verify checksum → extract → import
- Jika checksum sama, bisa di-skip atau tetap import ulang
Catatan:
examtool updatejuga menjalankan cek database di akhir. Gunakanupdate-dbjika hanya ingin update database tanpa pull kode aplikasi.
patch-db
Download dan jalankan SQL patch incremental dari portal.
examtool patch-db
Flow:
- Ambil daftar patch dari portal (
/api/patches) - Bandingkan dengan patch yang sudah dijalankan (tersimpan di config
APPLIED_PATCHES) - Jika ada patch baru, tampilkan daftar dan konfirmasi
- Backup database otomatis sebelum patching
- Download setiap patch, verifikasi checksum SHA-256, lalu jalankan via
mysql - Update daftar
APPLIED_PATCHESdi config setelah setiap patch berhasil
Jika patch gagal dijalankan, proses dihentikan. Database sudah di-backup sebelumnya — gunakan examtool restore-db untuk rollback.
Catatan: Berbeda dengan
update-dbyang mengganti database secara keseluruhan,patch-dbmenjalankan perubahan incremental (ALTER TABLE, INSERT, UPDATE, dll) tanpa menimpa data yang ada.
self-update
Update script examtool ke versi terbaru dari portal.
examtool self-update
Download versi terbaru dari portal (https://kb.ujiancbt.online/download/examtool), verifikasi isi file valid, dan replace binary lokal secara otomatis.
Catatan: Examtool juga melakukan auto-check versi setiap kali dijalankan. Jika versi lokal berbeda dengan versi di portal, akan muncul prompt untuk update langsung.
backup-db
Backup database ke file .sql.gz.
examtool backup-db
examtool backup-db --path=/path/to/backup
| Parameter | Default | Keterangan |
|---|---|---|
--path |
/root/backup_db |
Direktori tujuan backup |
File backup diberi nama otomatis: backup_db_ujian_YYYYMMDD_HHMMSS.sql.gz
restore-db
Restore database dari file backup.
# Dari file .sql
examtool restore-db --file=/root/backup_db/backup.sql
# Dari file .sql.gz (compressed)
examtool restore-db --file=/root/backup_db/backup.sql.gz
| Parameter | Wajib | Keterangan |
|---|---|---|
--file |
Ya | Path ke file backup (.sql atau .sql.gz) |
backup-app
Backup file aplikasi dan konfigurasi server ke satu archive .tar.gz.
examtool backup-app
examtool backup-app --path=/path/to/backup
| Parameter | Default | Keterangan |
|---|---|---|
--path |
/root/backup_app |
Direktori tujuan backup |
File backup diberi nama otomatis: backup_app_ujian_YYYYMMDD_HHMMSS.tar.gz
Isi backup:
| Komponen | Path |
|---|---|
| Aplikasi ujian | /var/www/ujian |
| Rasch analysis | /var/www/rasch |
| Config examtool | /etc/examtool.conf |
| Env examtool | /etc/examtool.env |
| SSL certificate | /etc/ssl/ujian/ |
| Nginx vhost | /etc/nginx/sites-available/ujian |
| PHP-FPM pool | /etc/php/8.3/fpm/pool.d/ujian.conf |
Catatan: Untuk backup database saja, gunakan
examtool backup-db. Untuk backup lengkap, gunakanexamtool backup-full.
backup-full
Full backup: database + file aplikasi + konfigurasi dalam satu direktori.
examtool backup-full
examtool backup-full --path=/path/to/backup
| Parameter | Default | Keterangan |
|---|---|---|
--path |
/root/backup_full |
Direktori tujuan backup |
Menghasilkan dua file:
backup_db_ujian_YYYYMMDD_HHMMSS.sql.gz— dump databasebackup_app_ujian_YYYYMMDD_HHMMSS.tar.gz— aplikasi + config
restore-app
Restore file aplikasi dan konfigurasi dari backup .tar.gz.
examtool restore-app --file=/root/backup_app/backup_app_ujian_20260701_140000.tar.gz
| Parameter | Wajib | Keterangan |
|---|---|---|
--file |
Ya | Path ke file backup (.tar.gz) |
Ownership file otomatis diperbaiki ke www-data setelah extract.
restore-full
Full restore: database + file aplikasi sekaligus.
examtool restore-full \
--file-db=/root/backup_full/backup_db_ujian_xxx.sql.gz \
--file-app=/root/backup_full/backup_app_ujian_xxx.tar.gz
| Parameter | Wajib | Keterangan |
|---|---|---|
--file-db |
Ya | Path ke file backup database (.sql/.sql.gz) |
--file-app |
Ya | Path ke file backup aplikasi (.tar.gz) |
reset-user
Reset user admin di database secara interaktif.
examtool reset-user
Prompt interaktif:
- Username baru — dicek duplikat terhadap user lain di database
- Password baru — minimal 6 karakter, disimpan sebagai MD5
- Nama lengkap — otomatis dikonversi ke Title Case
Catatan: Command ini hanya mereset user dengan uid=1 (superadmin). Untuk user lain, gunakan phpMyAdmin atau akses database langsung.
reconfigure
Ubah konfigurasi tanpa install ulang.
examtool reconfigure --domain=ujian-baru.example.ac.id
examtool reconfigure --client=300
examtool reconfigure --file-crt=/root/ssl/new.crt --file-key=/root/ssl/new.key
examtool reconfigure --security=false
examtool reconfigure --ssh-port=2222
Parameter yang tidak diberikan akan menggunakan nilai sebelumnya.
Yang BISA diubah via reconfigure:
| Parameter | Keterangan |
|---|---|
--domain |
Ganti domain (nginx vhost + SSL diupdate) |
--client |
Ubah jumlah PC (tier + tuning disesuaikan) |
--file-crt / --file-key |
Ganti SSL certificate, atau upgrade dari HTTP-only ke HTTPS |
--security |
Toggle security on/off (ufw + fail2ban) |
--ssh-port |
Ubah SSH port (sshd + ufw + fail2ban) |
Yang TIDAK diubah via reconfigure:
- Packages — tidak install/update paket (nginx, php, mariadb, dll)
- Database — data dan password database tidak diubah
- User SFTP — username dan password tidak bisa diganti via reconfigure. Untuk ganti password user, gunakan
passwd <username>secara manual
security
Kelola security (UFW firewall + Fail2ban).
# Lihat status security
examtool security
# Nonaktifkan security (ufw disable + fail2ban stop)
examtool security --disable
# Aktifkan kembali
examtool security --enable
| Parameter | Keterangan |
|---|---|
--enable |
Aktifkan ufw + fail2ban |
--disable |
Nonaktifkan ufw + fail2ban |
| (tanpa flag) | Tampilkan status security saat ini |
Catatan: Menonaktifkan security hanya men-disable service (ufw + fail2ban), tidak menghapus package atau konfigurasi. Saat diaktifkan kembali, konfigurasi sebelumnya tetap digunakan.
ssh-port
Kelola SSH port server.
# Lihat SSH port saat ini
examtool ssh-port
# Ubah SSH port
examtool ssh-port --port=2222
| Parameter | Keterangan |
|---|---|
--port |
Port SSH baru (1-65535) |
| (tanpa flag) | Tampilkan SSH port saat ini |
Examtool otomatis:
- Update
/etc/ssh/sshd_config - Restart service sshd
- Update rule UFW (jika security enabled)
- Update fail2ban jail (jika security enabled)
Peringatan: Setelah mengubah SSH port, pastikan koneksi SSH berikutnya menggunakan port baru. Port tidak boleh bentrok dengan port yang dipakai examtool (80, 443, 3306, 11211, dll).
uninstall
Hapus semua konfigurasi server ujian.
examtool uninstall --confirm
Flag --confirm wajib untuk mencegah penghapusan tidak sengaja.
Yang dihapus: konfigurasi nginx, php-fpm, mariadb, memcached, fail2ban, firewall rules, SSL, aplikasi. Backup terakhir otomatis disimpan di /root/examtool-final-backup/.
Yang tidak dihapus: packages (nginx, mariadb, dll). Gunakan apt purge jika ingin menghapus.
env-template
Output template file environment ke stdout.
examtool env-template > /etc/examtool.env
chmod 600 /etc/examtool.env
Catatan: Saat install, jika
/etc/examtool.envbelum ada, examtool otomatis membuatnya dari template tanpa perlu command ini.
setup-monitoring
Install monitoring stack (opsional). Komponen: Grafana, Prometheus, Node Exporter, MariaDB Exporter, Memcached Exporter, Nginx Exporter, PHP-FPM Exporter.
examtool setup-monitoring
Semua exporter hanya bind ke 127.0.0.1 (tidak exposed ke luar). Grafana diakses langsung via http://IP_SERVER:3000.
Dashboard "System Dashboard" dan "Node Exporter Full" otomatis dibuat.
Login default Grafana: admin / admin — ganti segera setelah install.
remove-monitoring
Hapus seluruh monitoring stack.
examtool remove-monitoring --confirm
Flag --confirm wajib. Menghapus: Grafana, Prometheus, semua exporter, service users, dashboard, dan provisioning config.
enable-backup-cron
Setup backup database otomatis harian dengan pertanyaan interaktif.
examtool enable-backup-cron
Akan ditanya:
| Pertanyaan | Default | Keterangan |
|---|---|---|
| Jam backup | 2 |
Jam 0-23 |
| Menit backup | 0 |
Menit 0-59 |
| Direktori backup | /root/backup_db |
Path tujuan backup |
| Retensi | 7 hari |
Hapus backup lama otomatis (0 = tidak dihapus) |
Cron job menggunakan examtool backup-db di belakang layar. Log tersimpan di /var/log/examtool-backup-cron.log.
disable-backup-cron
Hapus cron backup harian.
examtool disable-backup-cron
Menampilkan cron yang aktif dan konfirmasi sebelum menghapus.
check-update
Periksa apakah ada versi terbaru dari portal.
examtool check-update
Membandingkan versi lokal dengan versi terbaru di portal. Jika ada update, langsung menawarkan opsi untuk update.
Auto-check saat startup
Setiap kali menjalankan perintah examtool (kecuali self-update, check-update, version, env-template, -h, --help), examtool otomatis cek versi ke portal (timeout 5 detik). Jika ada versi baru, muncul prompt:
[ WARN ] Versi baru tersedia! (v3.1.1 → v3.1.2)
Update examtool ke v3.1.2 sekarang? (y/N):
Jika portal tidak tersedia, perintah tetap jalan normal tanpa notifikasi.
version
Tampilkan versi script.
examtool version