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-crt dan --file-key tidak 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 pull gagal (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:

  1. Cek metadata database di portal (checksum, size, tanggal update)
  2. Bandingkan dengan database terakhir yang diimport
  3. Jika berbeda, tampilkan info dan konfirmasi
  4. Jika ya → backup database lama otomatis → download → verify checksum → extract → import
  5. Jika checksum sama, bisa di-skip atau tetap import ulang

Catatan: examtool update juga menjalankan cek database di akhir. Gunakan update-db jika hanya ingin update database tanpa pull kode aplikasi.

patch-db

Download dan jalankan SQL patch incremental dari portal.

examtool patch-db

Flow:

  1. Ambil daftar patch dari portal (/api/patches)
  2. Bandingkan dengan patch yang sudah dijalankan (tersimpan di config APPLIED_PATCHES)
  3. Jika ada patch baru, tampilkan daftar dan konfirmasi
  4. Backup database otomatis sebelum patching
  5. Download setiap patch, verifikasi checksum SHA-256, lalu jalankan via mysql
  6. Update daftar APPLIED_PATCHES di 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-db yang mengganti database secara keseluruhan, patch-db menjalankan 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, gunakan examtool 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 database
  • backup_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:

  1. Username baru — dicek duplikat terhadap user lain di database
  2. Password baru — minimal 6 karakter, disimpan sebagai MD5
  3. 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.env belum 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 / adminganti 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