Engine Computer Based Test (CBT) mandiri bertenaga Golang murni & Vue 3 SPA. Dirancang khusus untuk ketahanan konkurensi ribuan siswa serentak dengan penggunaan memori ultra-rendah dan latensi instan.
Dirancang dari nol dengan standar enterprise untuk memastikan integritas ujian, skalabilitas tinggi, dan otomatisasi asesmen modern.
Ditenagai Gin Framework dan GORM + pgx dengan thread ringan Goroutines. Mampu melayani hingga ~50.000 req/detik pada resource server minimal tanpa antrean bottleneck.
Pemisahan kunci rahasia token antara JWT_SECRET (Admin/Guru) dan
JWT_STUDENT_SECRET (Siswa). Menjamin token siswa tidak dapat disalahgunakan untuk
mengeksploitasi endpoint manajerial.
Mendukung Pilihan Ganda, PG Kompleks, Benar/Salah, Menjodohkan (*Drag & Drop*), Isian Singkat, Uraian/Essay, Audio Listening, dan penulisan rumus Matematika format LaTeX / KaTeX.
Suite AI lengkap: generator bank soal Taksonomi Bloom (C1-C6), koreksi otomatis essay dengan NLP, analisis diagnostik kesukaran ($P$) & daya beda ($D$), serta generator varian soal anti-bocor.
Pengawasan langsung via dashboard proktor berbasis ApexCharts & Heartbeat Socket. Terkoneksi sempurna dengan Safe Exam Browser (SEB) dan aplikasi MC-ExamBrowser Android untuk mengunci perangkat siswa dan memblokir perpindahan aplikasi.
Modul AI bawaan di dalam engine Go tanpa perlu install script terpisah. Terintegrasi penuh dengan sistem operasional CBT.
Bukan sekadar chatbot biasa. Copilot dapat mengeksekusi operasi database nyata: membuat
jadwal ujian, menyusun bank soal, me-reset sesi siswa yang terkunci, tambah waktu, hingga
refresh token ujian lewat perintah chat & Telegram-Style Slash Commands (/).
Buat puluhan butir soal berkualitas tinggi dalam hitungan detik hanya dari ringkasan materi atau silabus. Mendukung klasifikasi level kognitif Taksonomi Bloom (C1 s/d C6), pembahasan kunci, dan opsi pengecoh yang realistis.
Koreksi ratusan lembar jawaban uraian siswa secara instan. Menggunakan pemrosesan bahasa alami (NLP) untuk menilai kesesuaian konsep, memberikan skor proporsional (0-100), catatan perbaikan siswa, serta justifikasi penilaian untuk guru.
Analisis diagnostik mendalam pasca-ujian: menghitung Indeks Tingkat Kesukaran ($P$), Daya Beda Butir ($D$), efektivitas opsi pengecoh, pemetaan kelemahan materi siswa, hingga rekomendasi remedial otomatis per topik pelajaran.
Cegah kebocoran soal antar sesi atau lab ujian dengan memproduksi varian soal paralel secara otomatis. AI mengubah konteks kalimat, angka matematika, atau urutan tanpa mengubah esensi kompetensi dan bobot kesukaran soal.
Bebas memilih provider AI sesuai preferensi dan budget sekolah (*Bring-Your-Own-Key*): Google Gemini, DeepSeek V3, OpenAI, OpenRouter, Qwen, hingga Claude. Bebas biaya royalti dan 100% milik sekolah.
Katakan selamat tinggal pada kerja lembur format ulang bank soal! Engine Golang MC-ExamGO dapat
membedah dan memparsing langsung dokumen Word (.docx) dari
ZenCBT, ExoCBT, hingga TC-Exam tanpa mengubah satu tabel
pun.
Otomatis membaca tag header TIPE, TEKS, pilihan ganda A-E, serta mengekstrak
gambar soal langsung dari berkas docx.
Memetakan tabel baris TS (Tipe Soal), kunci
jawaban, tingkat kesulitan, hingga pembahasan tanpa perlu diedit ulang.
Migrasikan bank soal lawas TC-Exam berbasis TSV/XML langsung ke bank soal modern ExamGO dengan struktur asesmen terlindungi.
Dukungan parsing persamaan matematika MathML / KaTeX, penomoran otomatis bertingkat, dan aset audio listening tersemat.
Format Otomatis Terdeteksi • Ukuran: 2.4 MB • Status: Siap Parsing
> [Parser] Signature ZenCBT terdeteksi: Tag <w:tbl> & header cell 'TIPE'
> [Media] 14 berkas gambar tertanam (.png/.jpg) berhasil diekstrak ke /uploads/bank/
> [Questions] 40 Soal Pilihan Ganda + 5 Soal Esai berhasil dipetakan ke struct JSON
> [Database] 45 Butir soal berhasil disimpan ke Bank Soal ID #104 (0.04s) ✓
> [Parser] Signature ExoCBT terdeteksi: Tag tabel 'TS' & opsi A-E
> [Mapping] Menyelaraskan baris KUNCI, BOBOT, dan PEMBAHASAN
> [Media] Gambar rumus fraksi kimia diekstrak & dioptimasi otomatis
> [Database] 50 Butir soal ExoCBT tersimpan tanpa error format (0.05s) ✓
> [Parser] TC-Exam TSV/XML Importer Engine dijalankan
> [Schema] Mengonversi tag <tcexam_question> ke model Asesmen Universal
> [Questions] Menghubungkan metadata kategori, durasi, dan rubrik penilaian
> [Database] Migrasi database bank soal TC-Exam tuntas (0.03s) ✓
> [Parser] Native OpenXML Word Parser Engine aktif
> [MathML/KaTeX] Persamaan integral & matriks dikonversi ke LaTeX renderable
> [Numbering] Numbering Engine mengatasi list bertingkat (1. a. i.)
> [Database] Soal sains lengkap tersimpan dengan formula KaTeX jernih ✓
Sistem otomatis mengenali struktur tabel ZenCBT atau ExoCBT tanpa mengharuskan Anda memilih jenis template secara manual.
Gambar diagram, foto soal, dan file audio listening di dalam dokumen Word langsung diekstrak dan dioptimasi ke server.
Rumus fisika, matematika, dan simbol kimia (MathML / Equation) dikonversi ke KaTeX murni yang tajam di semua ukuran layar.
Gunakan kembali ribuan file bank soal lama sekolah Anda langsung ke MC-ExamGO tanpa perlu mengulang input manual dari awal!
Unduh binary standalone MC-ExamGO sekarang, instal dalam 1 menit, dan buktikan kemudahan import bank soal tanpa hambatan format!
Perbandingan teknis arsitektur compiled binary Golang native dibandingkan server PHP-FPM dan CMS monolitik tradisional.
| Kriteria Teknis | 🚀 MC-ExamGO (Go Binary) | PHP-FPM (Laravel / CI) | Monolithic LMS (Moodle) |
|---|---|---|---|
| Model Konkurensi Server | Goroutines (Lightweight Threads) | Process per request (Forking) | Heavy PHP Process + Session Lock |
| Konsumsi RAM Base Server | ~15 MB – 30 MB Total | ~150 MB / Worker (2-4 GB) | ~250 MB / Worker (4-8 GB) |
| Maksimal Throughput (1 vCPU) | 50.000+ Req / Detik | ~1.500 – 2.500 Req / Detik | ~300 – 800 Req / Detik |
| Dependensi Runtime | Nol (Hanya Binary + PostgreSQL) | PHP, Extensions, Composer, Nginx, Redis | PHP, Apache/Nginx, MySQL/MariaDB, Cron |
| Waktu Booting / Cold-Start | 0.00 ms (Instant Native Code) | 200 – 500 ms (Bootstrap) | 400 – 900 ms |
| Arsitektur Antarmuka | Vue 3 Single Page Application (SPA) | Server-Side Rendered (Blade) | Server-Side Multi-Page (Full Reload) |
Pilih paket binary standalone sesuai sistem operasi server Anda. Semua paket sudah self-contained (tidak membutuhkan runtime PHP atau Node.js).
Tersedia link unduhan alternatif berkecepatan tinggi jika unduhan direct server mengalami limit bandwidth.
Untuk Server Lokal Sekolah, Lab Komputer, atau Laptop Proktor.
mc-exam-go-windows-amd64-v1.2.2.exemc-exam-go-migrate.exeFile konfigurasi .env & folder assetsUntuk Cloud VPS Ubuntu / Debian berbasis processor Intel & AMD x86_64.
mc-exam-go-linux-amd64-v1.2.2mc-exam-go-migrate-linux-amd64File konfigurasi .env & folder assetsUntuk Oracle Cloud Ampere A1 (Free Tier), AWS Graviton, atau Raspberry Pi 4/5.
mc-exam-go-linux-arm64-v1.2.2mc-exam-go-migrate-linux-arm64File konfigurasi .env & folder assetsDatabase PostgreSQL 14+ (Rekomendasi v16+), RAM 512 MB, dan Storage 500 MB.
Rincian fitur baru, perbaikan bug, dan log pembaruan engine di setiap rilis.
Pembaruan ini menghadirkan dukungan native gateway 9Router, alokasi token dinamis (4.096–8.192), pemulihan naskah soal yang terpotong batas token (Resume Stream), live terminal pemantauan stream lanjutan, dan normalisasi kunci jawaban soal esai.
Dukungan proxy AI mandiri (9Router) dengan deteksi model otomatis (prefix 9router/ atau nr-), parameter konfigurasi lingkungan NINEROUTER_BASE_URL, serta kemampuan streaming respon SSE native yang stabil dan cepat.
Generator kini mengalokasikan token output secara adaptif (4.096–8.192 token). Jika naskah massal terhenti karena batas token provider, parser toleran otomatis menyelamatkan butir soal utuh dan menyediakan tombol "Lanjutkan Sisa Soal" untuk melengkapi naskah tanpa pengulangan materi.
Banner status yang mengonfirmasi keamanan soal sebelumnya saat proses lanjutan berjalan, dilengkapi fitur toggle Pantau Live Stream AI untuk melihat teks yang sedang diketik AI secara real-time.
Pemisahan tegas kunci isian singkat (exact match) dan rubrik penilaian esai (pedoman langkah kerja). Dilengkapi auto-fallback di backend dan frontend agar jawaban esai dari AI selalu tersimpan sempurna ke Bank Soal tanpa risiko hilang.
Pesan error teknis saldo kosong OpenRouter (Insufficient credits, kode 402/401) otomatis diterjemahkan ke solusi bahasa Indonesia yang mudah dipahami guru/admin.
Pembaruan ini menghadirkan deteksi cerdas aplikasi kiosk ujian (MC-ExamBrowser Android/Windows & Safe Exam Browser iOS), perapian tabel monitoring, serta pemisahan arsitektur layanan aksi pemantauan yang lebih tangguh.
Sistem kini otomatis mendeteksi dan memberi label visual khusus untuk MC-ExamBrowser (Android), MC-ExamBrowser (Windows), serta Safe Exam Browser (iOS/Mac) di layar pemantauan proktor.
Peserta yang masuk menggunakan browser umum (seperti Chrome atau Safari standar) langsung ditandai dengan badge khusus agar proktor dapat segera mewaspadai potensi membuka tab lain.
String kode identitas perangkat yang panjang kini digantikan dengan ikon gembok Terkunci yang rapi lengkap dengan tooltip, menjaga fitur proteksi anti-joki tetap aktif tanpa mengotori tabel.
Konfigurasi User-Agent kustom pada pembuat profil .mcode kini otomatis tersinkronisasi ke pengaturan server saat berkas diunduh, mencegah kesalahan pengaturan antar sistem.
Refaktorisasi modul monitoring ke dalam MonitoringActionService terpisah memastikan eksekusi perintah proktor (force submit, reset sesi, tambah waktu) berjalan lebih cepat, stabil, dan thread-safe.
Opsi pembagian kuota AI sekolah dan izin API key guru kini dipusatkan 100% di halaman Pengaturan AI bersamaan dengan konfigurasi API Key, serta dibersihkan dari tab Pengaturan Sistem agar antarmuka lebih fokus dan rapi.
Pembaruan ini membawa kemudahan pengelolaan lisensi langsung di dashboard, deteksi perangkat yang lebih stabil, pemeliharaan sistem otomatis, serta keandalan ujian offline/intranet.
Machine ID server kini tampil langsung di kartu Informasi Sistem Admin Dashboard lengkap dengan tombol Salin instan untuk mempermudah proses aktivasi lisensi sekolah.
Peningkatan deteksi hardware mencegah Machine ID berubah saat kabel LAN dilepas atau ketika adapter jaringan berganti, menjamin lisensi aktif tetap terkunci dengan aman.
Instalasi baru kini langsung aktif dengan mode gratis bawaan (Community Edition), dan server tetap berjalan normal tanpa kendala meski dioperasikan di jaringan lokal tertutup tanpa internet.
Sistem otomatis memangkas dan merotasi berkas catatan log di latar belakang, menjaga ruang penyimpanan (disk) server sekolah tetap hemat dan performa selalu ringan.
Optimasi database dan layanan background untuk memastikan kelancaran respons aplikasi saat siswa mengerjakan ujian secara bersamaan.
Kemudahan menyaring tipe soal di bank soal, perbaikan tampilan rumus matematika mengalir, kunci soal Benar/Salah lebih presisi, pemantauan nilai langsung, dan fitur koreksi essay bersama guru lain.
Cukup klik kartu ringkasan tipe soal di bagian atas bank soal untuk langsung menyaring daftar butir soal yang diinginkan dengan cepat dan interaktif.
Tampilan rumus matematika LaTeX dan matriks kini tersambung rapi tanpa jeda baris yang terputus, baik pada pratinjau bank soal maupun layar ujian siswa.
Tombol opsi Benar dan Salah di formulir pembuatan soal kini terkunci terpisah dan menyajikan status kunci jawaban yang pasti dan akurat.
Panitia dapat menugaskan guru mata pelajaran sebagai kolaborator pasca-ujian untuk bersama-sama memeriksa dan memberi nilai soal uraian secara aman.
Pengawas dan proktor dapat memantau perolehan skor sementara peserta yang sedang mengerjakan ujian secara langsung tanpa membebani server ujian.
Hak akses kini dapat diatur secara detail, misalnya membedakan peran pengawas ruangan murni dengan guru yang bertugas mengoreksi nilai.
Tampilan identitas resmi sekolah pada halaman login dan portal sistem, integrasi profil instansi, serta penyelarasan tombol pintasan cepat di dashboard.
Menampilkan logo, nama sekolah, dan NPSN secara elegan pada halaman masuk siswa dan guru, menegaskan identitas resmi instansi penyelenggara ujian.
Logo dan nama sekolah tampil rapi pada bilah navigasi admin dan header portal siswa untuk memperkuat kesan profesional.
Tampilan di layar HP secara otomatis menyesuaikan proporsi logo dan nama sekolah dengan tata letak yang bersih dan ramah layar sentuh.
Seluruh tombol pintasan di dashboard (Buat Soal AI, Data Peserta, Rekap Nilai, dan Cadangan) kini langsung mengarah ke halaman tujuan dengan presisi.
Tampilan berkas ekspor Excel berstandar resmi, integrasi NIP guru pada dokumen ujian, akurasi batas kelulusan soal, serta integrasi Safe Exam Browser (SEB) untuk edisi Whitelabel.
Seluruh berkas unduhan Excel (Siswa, Ruang, Mapel, Pengguna) kini memiliki kop instansi resmi, petunjuk pengisian yang jelas, dan tabel bergaris rapi.
Kolom NIP guru pengampu kini otomatis tercetak pada lembar berita acara, daftar hadir, dan lembar analisis butir soal ujian.
Penentuan status kelulusan disesuaikan dengan KKM secara konsisten, dilengkapi penentuan peringkat nilai peserta yang adil berdasarkan nilai dan waktu pengerjaan.
Penghapusan akun pengguna dilengkapi proteksi data: sistem mencegah penghapusan jika akun masih memiliki bank soal atau jadwal aktif, serta menyediakan opsi transfer kepemilikan data ke guru lain.
Fasilitas pembuatan file setelan ujian terkunci penuh untuk laptop Windows, Mac, dan iPad khusus sekolah pengguna Whitelabel Edition.
Pilih lingkungan deployment target Anda untuk melihat perintah instalasi lengkap siap salin.
JWT Secret Generator
Buat 2 secret aman (64 karakter, URL-safe) langsung di browser — tidak dikirim ke server
Klik tombol ⚡ Generate Secrets untuk membuat JWT Secret yang aman secara kriptografis.
Dibuat menggunakan crypto.getRandomValues() —
100%
client-side, tidak pernah meninggalkan browser Anda.
💡 Paste langsung ke file .env Anda. Re-generate
kapan saja untuk mendapatkan nilai baru.
Jalankan perintah berikut di terminal SSH VPS Anda untuk menginstal PostgreSQL dan membuat database
mc_examgo:
# 1. Update & Install PostgreSQL
sudo apt update && sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql
# 2. Buat User & Database mc_examgo
sudo -u postgres psql -c "CREATE USER mc_user WITH PASSWORD 'PasswordKuat!2026';"
sudo -u postgres psql -c "CREATE DATABASE mc_examgo OWNER mc_user;"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE mc_examgo TO mc_user;"
Buat direktori /opt/mc-examgo, ekstrak file zip installer (AMD64 atau ARM64), dan
berikan hak eksekusi binary:
sudo mkdir -p /opt/mc-examgo/uploads /opt/mc-examgo/logs && cd /opt/mc-examgo
sudo unzip MC-ExamGo-amd64-v1.2.2.zip
# Beri izin eksekusi binary & proteksi .env
sudo chmod +x mc-exam-go-linux-amd64-v1.2.2 mc-exam-go-migrate-linux-amd64
sudo chmod 600 .env
1. Buka editor nano untuk mengedit file .env:
sudo nano /opt/mc-examgo/.env
2. Sesuaikan konfigurasi database PostgreSQL dan JWT Secrets:
# Port aplikasi (Biarkan 8080 jika tidak ada bentrok)
SERVER_PORT=8080
# Zona Waktu Ujian: Asia/Jakarta (WIB) | Asia/Makassar (WITA) | Asia/Jayapura (WIT)
DB_TIMEZONE=Asia/Jakarta
# PostgreSQL (Wajib Diisi)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=mc_examgo
DB_USER=mc_user
DB_PASS=PasswordKuat!2026
# Keamanan Sistem (Dual JWT Wajib 64+ Karakter Acak)
JWT_SECRET=isi-dengan-string-acak-panjang-min-64-karakter-admin
JWT_STUDENT_SECRET=isi-dengan-string-acak-panjang-min-64-karakter-siswa
Jalankan binary migrasi untuk membuat tabel dan data inisial default:
cd /opt/mc-examgo
sudo ./mc-exam-go-migrate-linux-amd64 --seed
1. Buka editor untuk membuat file unit service baru di sistem Linux:
sudo nano /etc/systemd/system/mc-examgo.service
2. Salin dan tempel konfigurasi service berikut ke dalam file tersebut:
[Unit]
Description=MC-ExamGO CBT Daemon Server
After=network.target postgresql.service
Wants=postgresql.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/mc-examgo
ExecStart=/opt/mc-examgo/mc-exam-go-linux-amd64-v1.2.2
Restart=always
RestartSec=5s
StandardOutput=append:/opt/mc-examgo/logs/app.log
StandardError=append:/opt/mc-examgo/logs/app.log
[Install]
WantedBy=multi-user.target
3. Simpan file, lalu aktifkan dan nyalakan service:
sudo systemctl daemon-reload && sudo systemctl enable --now mc-examgo
1. Instal Nginx dan Certbot untuk mengelola web server dan sertifikat SSL:
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
2. Buka editor untuk membuat konfigurasi virtual host Nginx:
sudo nano /etc/nginx/sites-available/mc-examgo
3. Tempelkan konfigurasi proxy Nginx berikut (sesuaikan cbts.sekolahanda.sch.id dengan domain
Anda):
server {
listen 80;
server_name cbts.sekolahanda.sch.id;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
}
}
4. Aktifkan konfigurasi situs, reload Nginx, dan pasang SSL Let's Encrypt otomatis:
sudo ln -s /etc/nginx/sites-available/mc-examgo /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d cbts.sekolahanda.sch.id
1. Masuk ke dashboard FastPanel Anda (https://IP-VPS:8888).
2. Klik tombol utama + Create site (+ Buat situs) di panel atas.
3. Pada layar Site Creation Wizard (Choose template), pilih template Reverse
proxy (Ikon tameng dengan teks "Increase security, performance, and reliability").
1. Domain binding: Masukkan domain/subdomain sekolah di kolom Which domain to
bind? (contoh: cbts.sekolahanda.sch.id), pilih IP VPS
→ Klik Next step.
2. Configuration (Sesuaikan kartu konfigurasi):
Klik ikon edit pada kartu Backend → arahkan target ke: http://127.0.0.1:8080.
Klik ikon edit pada kartu Database, lalu sesuaikan:
mc_examgo.mc_user.
.env.3. Klik tombol Create site. FastPanel akan otomatis menyusun Nginx Reverse Proxy, direktori webroot, dan database PostgreSQL!
1. Buka menu Files (File Manager) pada kartu situs yang baru dibuat di FastPanel.
2. Upload file paket MC-ExamGo-amd64-v1.2.2.zip lalu
klik Extract (Ekstrak) di direktori root tersebut.
3. Buat folder baru bernama uploads dan logs (jika belum ada).
4. Edit file .env langsung dari File Manager FastPanel:
SERVER_PORT=8080
DB_TIMEZONE=Asia/Jakarta
# Database PostgreSQL FastPanel
DB_HOST=127.0.0.1
DB_PORT=5432
DB_NAME=mc_examgo
DB_USER=mc_user
DB_PASS=PasswordKuatYangDibuatTadi
# Dual JWT Secrets (Wajib min. 64 karakter acak)
JWT_SECRET=isi-dengan-string-acak-panjang-min-64-karakter-admin
JWT_STUDENT_SECRET=isi-dengan-string-acak-panjang-min-64-karakter-siswa
Buka SSH Terminal di FastPanel (atau terminal SSH eksternal seperti PuTTY / Terminal), lalu jalankan perintah berikut:
# 1. Masuk ke direktori web situs Anda di FastPanel
cd /var/www/*/data/www/cbts.sekolahanda.sch.id
# 2. Beri izin eksekusi binary & proteksi .env
sudo chmod +x mc-exam-go-linux-amd64-v1.2.2 mc-exam-go-migrate-linux-amd64
sudo chmod 600 .env
# 3. Jalankan migrasi database
sudo ./mc-exam-go-migrate-linux-amd64 --seed
Tunggu hingga muncul konfirmasi: "AutoMigrate completed successfully!"
Agar server Go terus aktif di latar belakang dan otomatis hidup saat VPS restart:
sudo nano /etc/systemd/system/mc-examgo.service
Salin konfigurasi berikut (sesuaikan USER_ANDA dengan user pengelola situs FastPanel Anda):
[Unit]
Description=MC-ExamGO FastPanel Daemon Server
After=network.target postgresql.service
Wants=postgresql.service
[Service]
Type=simple
User=root
WorkingDirectory=/var/www/USER_ANDA/data/www/cbts.sekolahanda.sch.id
ExecStart=/var/www/USER_ANDA/data/www/cbts.sekolahanda.sch.id/mc-exam-go-linux-amd64-v1.2.2
Restart=always
RestartSec=5s
StandardOutput=append:/var/www/USER_ANDA/data/www/cbts.sekolahanda.sch.id/logs/app.log
StandardError=append:/var/www/USER_ANDA/data/www/cbts.sekolahanda.sch.id/logs/app.log
[Install]
WantedBy=multi-user.target
Aktifkan dan jalankan service:
sudo systemctl daemon-reload && sudo systemctl enable --now mc-examgo
sudo systemctl status mc-examgo
Karena Nginx Reverse Proxy sudah otomatis dikonfigurasikan oleh FastPanel pada langkah 2, Anda hanya perlu mengaktifkan SSL HTTPS:
1. Buka kartu situs Anda di dashboard FastPanel → Buka menu SSL Certificates.
2. Klik + New certificate → Pilih Let's Encrypt.
3. Centang opsi Redirect HTTP to HTTPS → Klik Save.
4. Buka https://cbts.sekolahanda.sch.id di browser. Server MC-ExamGO siap digunakan! 🚀
1. Download installer resmi PostgreSQL dari postgresql.org/download/windows.
2. Jalankan instalasi, tetapkan password superuser postgres.
3. Buka aplikasi pgAdmin 4, klik kanan Databases → Create
→ Database → Isi nama: mc_examgo.
Ekstrak file MC-ExamGo-Win-v1.2.2.zip ke folder (misal:
C:\MC-ExamGo-Win).
Buka file .env menggunakan Notepad dan sesuaikan:
# Port aplikasi
SERVER_PORT=8080
# Zona Waktu Ujian
DB_TIMEZONE=Asia/Jakarta
# PostgreSQL Windows
DB_HOST=localhost
DB_PORT=5432
DB_NAME=mc_examgo
DB_USER=postgres
DB_PASS=password_postgresql_anda
# Keamanan Sistem (Dual JWT Wajib 64+ Karakter Acak)
JWT_SECRET=isi-karakter-acak-panjang-min-64-karakter-admin
JWT_STUDENT_SECRET=isi-karakter-acak-berbeda-untuk-siswa
Buka Command Prompt (cmd) atau PowerShell, arahkan ke folder, lalu jalankan migrasi:
cd C:\MC-ExamGo-Win
mc-exam-go-migrate.exe --seed
Tunggu hingga muncul pesan: "AutoMigrate completed successfully! Migration process finished."
Klik ganda file mc-exam-go-windows-amd64-v1.2.2.exe atau jalankan via
Command Prompt:
cd C:\MC-ExamGo-Win
mc-exam-go-windows-amd64-v1.2.2.exe
Terapkan konfigurasi ini pada server VPS produksi (Ubuntu / Debian / FastPanel) agar server mampu menampung lonjakan ribuan siswa login dan submit jawaban serentak tanpa socket drop atau 502 Bad Gateway.
Jalankan perintah ini melalui terminal SSH VPS untuk menaikkan batas koneksi socket dan antrean TCP kernel
(sudah dilengkapi sudo siap salin):
# 1. Naikkan batas open file descriptor sesi saat ini ke 65.535
sudo ulimit -n 65535
# 2. Tambahkan tuning TCP Network ke /etc/sysctl.conf
sudo bash -c 'cat << "EOF" >> /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
EOF'
# 3. Terapkan perubahan kernel secara instan
sudo sysctl -p
/etc/nginx/nginx.conf)1. Buka file konfigurasi global Nginx dengan editor nano:
sudo nano /etc/nginx/nginx.conf
2. Sesuaikan atau tambahkan baris worker_rlimit_nofile dan blok events:
user www-data;
worker_processes auto;
worker_rlimit_nofile 65535; # Batas file descriptor worker
events {
worker_connections 20480; # Izinkan hingga 20.480 koneksi per worker
multi_accept on;
use epoll;
}
Pilih lokasi penyuntingan konfigurasi virtualhost sesuai panel yang Anda gunakan:
Buka file virtualhost Nginx:
sudo nano /etc/nginx/sites-available/mc-examgo
Buka FastPanel → Kartu Situs → Settings (Pengaturan) → Manual configuration (Konfigurasi Nginx).
Gunakan koneksi pipa persisten (keepalive pool) dan konfigurasi buffer berikut pada virtual host:
# 1. Pipa koneksi persisten ke Go Backend (Letakkan di luar blok server {})
upstream mc_examgo_backend {
server 127.0.0.1:8080;
keepalive 512; # Mencegah Nginx membuka-tutup port lokal berulang kali
}
# 2. Blok server situs Anda
server {
server_name cbts.sekolahanda.sch.id;
location / {
proxy_pass http://mc_examgo_backend;
proxy_http_version 1.1;
# Dukungan WebSocket / SSE & Telemetri Real-time
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# Forward Headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header CF-Connecting-IP $http_cf_connecting_ip;
# Buffer Tuning untuk Traffic Masif
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
Terapkan dan muat ulang konfigurasi:
sudo nginx -t && sudo systemctl reload nginx
Panduan teknis menyeluruh untuk menjalankan server lokal MC-ExamGO di Windows (Intel Ultra 7 / Core i7/i9, RAM 16–32GB) yang dihubungkan melalui Cloudflare Tunnel / Proxy untuk melayani hingga 1.800 siswa serentak tanpa lag, tanpa socket drop, dan tanpa IP publik statis.
15% – 25%
~8.5 GB / 32 GB
~21 Mbps / 94 Mbps
~90% Statis di CDN
Buka dashboard domain Anda di dash.cloudflare.com dan terapkan pengaturan berikut:
Masuk ke Caching → Cache Rules → Buat rule:
Buka PowerShell as Administrator di server Windows dan jalankan script optimasi socket jaringan berikut:
# 1. Perluas Rentang Port Dinamis TCP (Ephemeral Ports) ke 64.511 port
netsh int ipv4 set dynamicport tcp start=1025 num=64511
netsh int ipv6 set dynamicport tcp start=1025 num=64511
# 2. Percepat Daur Ulang Socket TCP yang Selesai (30 detik, default 240 detik)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "TcpTimedWaitDelay" -Value 30 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "MaxUserPort" -Value 65534 -Type DWord
# 3. Kunci Skema Daya CPU ke High Performance (Intel / AMD Full Boost Clock)
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
postgresql.conf)Buka file C:\Program Files\PostgreSQL\16\data\postgresql.conf
dan sesuaikan konfigurasi RAM 32GB & NVMe SSD:
# ------------------------------------------------------------------------------
# OPTIMASI POSTGRESQL 16+ (RAM 32GB, NVMe SSD, 1.800 SISWA CONCURRENT)
# ------------------------------------------------------------------------------
# 1. KONEKSI POOLING
max_connections = 300 # Cukup untuk pool Go (150) + Admin + Cadangan
# 2. MEMORI BUFFER
shared_buffers = 2GB # Maksimal 2GB-4GB di Windows
huge_pages = off # Wajib OFF di Windows
effective_cache_size = 18GB # 60% dari total RAM untuk query planner
work_mem = 16MB # Memori sorting per operasi query
maintenance_work_mem = 512MB # Memori untuk index & vacuum
# 3. STORAGE & CHECKPOINT (NVMe SSD High IOPS)
checkpoint_completion_target = 0.9 # Meratakan penulisan checkpoint ke SSD
checkpoint_timeout = 15min
min_wal_size = 1GB
max_wal_size = 8GB
random_page_cost = 1.1 # Nilai optimal untuk NVMe PCIe SSD
effective_io_concurrency = 200 # Paralelisasi baca-tulis SSD
# 4. QUERY PLANNER & PARALLEL WORKERS
max_worker_processes = 16
max_parallel_workers_per_gather = 4
max_parallel_workers = 16
max_parallel_maintenance_workers = 4
Buka menu Uji Jaringan di Navbar Admin MC-ExamGO untuk memastikan Ping rata-rata di bawah 30 ms.
Pastikan status awan di DNS Cloudflare berwarna Orange (Proxied) untuk proteksi DDoS dan edge caching.
Lakukan uji coba login serentak dengan 1–2 lab komputer (60–100 siswa) untuk memastikan access point Wi-Fi stabil.
Atur backup harian otomatis ke drive penyimpanan sekunder (HDD / Cloud Storage) melalui menu Pengaturan → Backup.
Uji beban dilakukan dari mesin penguji terpisah (laptop atau VPS terpisah) untuk mensimulasikan 10.000 siswa melakukan login, mengambil soal, dan mengirim jawaban secara bersamaan.
Pilih OS komputer penguji Anda untuk menginstal K6:
winget install k6 --source winget
sudo apt update && sudo apt install -y k6
1. Login ke Dashboard Admin CBT → Master Data > Peserta/Siswa
→ Klik Impor Excel.
2. Unggah file akun simulasi (misal: akun ST00001 s.d ST20000 dengan
password password123).
3. Buka menu Jadwal Ujian → Buat 1 Jadwal Ujian Aktif hari ini yang mencakup
peserta tersebut.
stress_vps.js)
Simpan script berikut sebagai stress_vps.js di komputer penguji Anda (sesuaikan
BASE_URL):
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '45s', target: 1000 }, // Tahap 1: Pemanasan & TLS Pooling (1.000 Siswa)
{ duration: '1m', target: 3000 }, // Tahap 2: Beban 1 Sekolah (3.000 Siswa)
{ duration: '1m', target: 6000 }, // Tahap 3: Beban Gabungan (6.000 Siswa)
{ duration: '1m30s', target: 10000 },// Tahap 4: Lonjakan Puncak (10.000 Siswa)
{ duration: '30s', target: 0 }, // Tahap 5: Cool-down (Selesai)
],
thresholds: {
http_req_duration: ['p(95)<2000'], // 95% request di bawah 2 detik
http_req_failed: ['rate<0.01'], // Error rate di bawah 1%
},
};
const BASE_URL = 'https://cbts.sekolahanda.sch.id/api';
const STUDENT_PASSWORD = 'password123';
let cachedToken = null;
let cachedSessionId = null;
export default function () {
const studentId = `ST${__VU.toString().padStart(5, '0')}`;
// 1. Login Siswa
if (!cachedToken) {
const loginRes = http.post(`${BASE_URL}/auth/student/login`, JSON.stringify({
student_id: studentId,
password: STUDENT_PASSWORD,
}), { headers: { 'Content-Type': 'application/json' } });
if (!check(loginRes, { 'Login 200 OK': (r) => r.status === 200 })) return;
cachedToken = loginRes.json('data.token');
if (!cachedToken) return;
}
const authHeaders = { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${cachedToken}` } };
// 2. Mulai Ujian
if (!cachedSessionId) {
const dashboardRes = http.get(`${BASE_URL}/student/dashboard/schedules`, authHeaders);
const schedules = dashboardRes.json('data');
if (schedules && schedules.length > 0) {
const scheduleId = schedules[0].schedule_id || schedules[0].id;
const startRes = http.post(`${BASE_URL}/student/exam/start/${scheduleId}`, "{}", authHeaders);
const sessionData = startRes.json('data');
if (sessionData && sessionData.session_id) cachedSessionId = sessionData.session_id;
}
}
// 3. Sync Jawaban Real-time
if (cachedSessionId) {
const answerPayload = JSON.stringify({ answers: { "1": { selected_id: 1, type: "multiple_choice" } } });
http.post(`${BASE_URL}/student/exam/${cachedSessionId}/sync`, answerPayload, authHeaders);
}
sleep(Math.random() * 2 + 1);
}
Jalankan perintah berikut di terminal komputer penguji:
k6 run stress_vps.js
| Metrik Uji Beban | Standar Lulus Enterprise | Keterangan |
|---|---|---|
| checks_succeeded | ≥ 99.0% | Persentase request login & submit yang sukses. |
| http_req_failed | < 0.05% | Tingkat kegagalan koneksi socket / timeout. |
| http_req_duration (med) | < 400 ms | Waktu respon server rata-rata di bawah 0.4 detik. |
| http_reqs (Throughput) | ≥ 1.000 / detik | Kapasitas transaksi serentak yang diproses server. |
Unified AI Model Router & Local Proxy untuk Pembuatan Soal CBT Berkecepatan Tinggi
9Router bertindak sebagai proxy cerdas yang menyatukan berbagai provider AI (Google Gemini, Anthropic Claude, OpenAI, DeepSeek, OpenRouter) ke dalam satu endpoint standar OpenAI. Dilengkapi dengan RTK Token Saver (hemat token 20%–60%) serta Automatic Fallback otomatis antar provider.
Pastikan laptop/PC Anda sudah terinstall Node.js v18+ LTS (nodejs.org). Buka PowerShell atau Command Prompt (Run as Administrator), lalu jalankan perintah:
npm install -g --allow-scripts=9router 9router
Jalankan 9Router di latar belakang agar icon muncul di pojok kanan bawah taskbar Windows:
# Jalankan di background (system tray)
9router -t
# Atau mode foreground biasa (otomatis buka browser dashboard)
9router
💡 Setelah berjalan, dashboard web dapat diakses di browser melalui alamat: http://localhost:20128
Masuk via SSH ke server VPS Anda dan jalankan perintah:
# 1. Setup NodeSource Node.js 20 LTS & screen
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs screen
# 2. Install 9router global
sudo npm install -g 9router
9Router membutuhkan TTY interaktif dan melarang login remote jika password masih default. Konfigurasi
Systemd dengan wrapper screen dan variabel INITIAL_PASSWORD
adalah cara paling stabil di lingkungan server:
# 1. Pasang Systemd Service (Ganti PasswordRahasiaAnda dengan password pilihan Anda)
sudo bash -c 'cat << "EOF" > /etc/systemd/system/9router.service
[Unit]
Description=9Router AI Gateway Service
After=network.target
[Service]
Type=forking
User=root
WorkingDirectory=/usr/lib/node_modules/9router/app
Environment=PORT=20128
Environment=HOSTNAME=0.0.0.0
Environment=NODE_ENV=production
# PENTING: Wajib diisi agar bisa login via Domain/Remote VPS
Environment=INITIAL_PASSWORD=PasswordRahasiaAnda123!
ExecStart=/usr/bin/screen -dmS 9router /usr/bin/9router --host 0.0.0.0 --port 20128 -n
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF'
# 2. Aktifkan dan jalankan service
sudo systemctl daemon-reload
sudo systemctl enable --now 9router
Jika Anda mengakses dashboard melalui Domain/Subdomain (bukan localhost), 9Router
secara default menolak login jika masih menggunakan default password (123456). Dengan
memasang Environment=INITIAL_PASSWORD=... di file service di atas, Anda dapat langsung
login dari browser menggunakan password tersebut.
Jika VPS Anda menggunakan Nginx manual (bukan control panel), gunakan konfigurasi vhost berikut:
server {
listen 80;
server_name ai.sekolah.sch.id;
location / {
proxy_pass http://127.0.0.1:20128;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
# Nonaktifkan buffer agar streaming respons AI lancar
proxy_buffering off;
proxy_read_timeout 300s;
}
}
Buka terminal SSH (bisa via menu SSH Console di FastPanel atau aplikasi PuTTY/Termius), lalu pasang 9Router dan service daemon-nya:
# 1. Pastikan Node.js 20 LTS & screen terpasang
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs screen
# 2. Install 9router global
sudo npm install -g 9router
# 3. Buat Systemd Service (Sertakan INITIAL_PASSWORD agar bisa login remote)
sudo bash -c 'cat << "EOF" > /etc/systemd/system/9router.service
[Unit]
Description=9Router AI Gateway Service
After=network.target
[Service]
Type=forking
User=root
WorkingDirectory=/usr/lib/node_modules/9router/app
Environment=PORT=20128
Environment=HOSTNAME=0.0.0.0
Environment=NODE_ENV=production
Environment=INITIAL_PASSWORD=PasswordRahasiaAnda123!
ExecStart=/usr/bin/screen -dmS 9router /usr/bin/9router --host 0.0.0.0 --port 20128 -n
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF'
sudo systemctl daemon-reload
sudo systemctl enable --now 9router
1. Masuk ke dashboard FastPanel Anda (https://IP-VPS:8888).
2. Klik tombol + Create site (+ Buat situs) di pojok atas.
3. Pilih template Reverse proxy (Ikon Tameng/Server).
4. Which domain to bind? Masukkan subdomain khusus AI Anda, contoh: 9r.domainanda.com (pastikan DNS A-record subdomain
sudah diarahkan ke IP VPS Anda).
5. Di menu Settings situs → tab Backend (PHP, Reverse proxy,
etc.):
• Backend type: Reverse proxy
• Address list: Type host, Address: http://127.0.0.1:20128
6. Nonaktifkan database jika ada, lalu simpan (Save).
Agar komunikasi AI berjalan aman via protokol HTTPS:
9r.domainanda.com di FastPanel.https://9r.domainanda.com/login dan
login dengan password yang telah Anda pasang pada INITIAL_PASSWORD.Buka http://localhost:20128 (atau URL VPS Anda). Masukkan API Key asli Anda
(Gemini, Claude, DeepSeek, dll.). Buka menu Endpoints / Keys dan salin
Master Key yang digenerate (format sk-...).
Secara default MC-ExamGO otomatis terhubung ke http://localhost:20128/v1. Jika
9Router Anda berada di subdomain/server terpisah, tambahkan baris berikut pada file
.env backend:
Buka panel Admin → Pengaturan Aplikasi → Tab AI Configuration → Masukkan Master Key Anda pada kolom 9Router API Key → Klik Simpan Pengaturan.
Buka menu Model AI → Klik Tambah Model Baru →
Pilih Provider: 9Router (Local / Proxy) → Masukkan Kode Model yang
ingin diarahkan (misal: gemini-2.0-flash,
claude-3-5-sonnet-20241022, deepseek-chat) → Simpan &
aktifkan!
Geser slider untuk mengetahui estimasi spesifikasi VPS atau hardware lokal yang ideal untuk jumlah siswa Anda.
*Segera ganti kata sandi Administrator dan masukkan API Key AI (Google Gemini / OpenRouter) pada menu Pengaturan Aplikasi setelah login pertama kali.