Pilih Mode Deployment
Absenta On-Premise tersedia dalam dua varian jaringan — pilih yang sesuai infrastruktur sekolah Anda
Full Lokal (Intranet Only)
Server dan seluruh perangkat siswa terhubung dalam satu jaringan WiFi sekolah. Tidak ada koneksi keluar ke internet sama sekali.
Hybrid (Lokal + Internet)
Server di sekolah, namun dapat diakses dari luar melalui domain publik atau VPN. Cocok untuk ujian take-home atau monitoring jarak jauh.
Mode Full Lokal — Intranet Only
Semua traffic hanya beredar di dalam jaringan WiFi/LAN sekolah
✅ Keunggulan
- Data siswa tidak pernah meninggalkan jaringan sekolah — privasi absolut
- Latensi sangat rendah (sub-5ms) karena semua traffic di jaringan lokal
- Tidak ada biaya bandwidth internet — ujian bisa berlangsung walau ISP mati
- Serangan dari luar internet tidak mungkin terjadi (air-gapped)
- Semua perangkat siswa di ruang ujian terhubung via WiFi AP yang sama
⚠️ Keterbatasan & Kebutuhan
- WiFi Access Point yang cukup untuk menampung semua perangkat secara bersamaan
- Server harus berada di lokasi fisik sekolah
- Siswa tidak bisa mengakses sistem dari rumah atau luar sekolah
- Admin/proktor juga harus berada di jaringan yang sama untuk mengakses panel
- Aktivasi lisensi awal butuh internet sekali — selanjutnya fully offline
Pesantren, Madrasah, Sekolah TNI/BUMN, Sekolah dengan kebijakan perangkat no-internet di area ujian, atau sekolah di lokasi terpencil tanpa infrastruktur internet yang stabil.
Mode Hybrid — Lokal + Internet
Server di sekolah, tetapi dapat diakses dari manapun via domain/IP publik
✅ Keunggulan
- Siswa bisa mengerjakan ujian dari rumah (take-home exam) via internet
- Proktor dapat memantau sesi ujian dari luar sekolah secara real-time
- Data tetap 100% tersimpan di server sekolah — bukan di cloud pihak ketiga
- Backup otomatis ke storage cloud eksternal bisa dikonfigurasi
- Laporan dan hasil ujian bisa diakses kepala sekolah dari rumah
⚠️ Keterbatasan & Kebutuhan Tambahan
- Server harus memiliki IP publik statis atau domain yang diarahkan ke server
- Wajib HTTPS dengan sertifikat SSL valid (Let's Encrypt direkomendasikan)
- Memerlukan koneksi internet yang stabil di sisi server (min. 20 Mbps upload)
- Konfigurasi firewall lebih ketat — port 443 terbuka ke internet
- Direkomendasikan mengaktifkan Fail2Ban atau rate-limiting Nginx
Sekolah yang menginginkan fleksibilitas penuh: ujian tatap muka sekaligus bisa take-home, kepala sekolah yang aktif memantau jarak jauh, atau yayasan yang mengelola beberapa unit dari satu server pusat.
Prasyarat Teknis
Pastikan semua komponen berikut tersedia sebelum memulai instalasi
Sistem Operasi
- Ubuntu 20.04 LTS atau 22.04 LTS (direkomendasikan)
- Debian 11 / 12 (Bullseye / Bookworm)
- CentOS Stream 9 / Rocky Linux 9
- Akses
sudoatau root
Runtime & Tools
- Node.js
v18.xatauv20.xLTS - npm
v9+atau yarn - PM2 (process manager) —
npm i -g pm2 - Git
v2.30+
Web Server & SSL
- Nginx
v1.18+sebagai reverse proxy - Sertifikat SSL (Let's Encrypt / self-signed untuk intranet)
- Domain atau IP lokal yang dapat dijangkau perangkat siswa
- Port
80,443,3000dibuka di firewall
Database
- SQLite 3 (default, bawaan — tidak perlu instalasi terpisah)
- PostgreSQL 14+ (opsional, untuk instalasi skala besar >500 siswa)
- Lokasi data:
/var/www/absenta/data/ - Backup otomatis via cron job disarankan
Jaringan & Firewall
- IP lokal statis atau DHCP-reserved untuk server
- Switch/router yang menghubungkan semua perangkat
- Bandwidth internal minimal 100 Mbps (LAN)
ufwatauiptablesdikonfigurasi
Lisensi
- Kunci lisensi On-Premise yang valid dari Absenta.id
- Lisensi dikunci ke hardware fingerprint server
- Satu lisensi untuk satu server fisik/VM
- Perpanjangan tahunan via panel admin
Kalkulator Spesifikasi Server
Geser slider sesuai jumlah siswa untuk mendapatkan rekomendasi spesifikasi minimum dan ideal
Berapa jumlah siswa di sekolah Anda?
Hitung berdasarkan total siswa aktif, bukan siswa yang ujian bersamaan
Arsitektur Jaringan
Pilih topologi untuk melihat diagram jaringan sesuai mode deployment yang Anda pilih
🏫 Full Lokal: Semua traffic hanya beredar di dalam jaringan WiFi/LAN sekolah. Server tidak perlu terhubung ke internet setelah aktivasi awal.
Perangkat Siswa
Android (Absenta App)
IP: 192.168.1.x
📡 WiFi AP Sekolah
LAN Only
Server Sekolah
Ubuntu 22.04 LTS
IP Lokal: 192.168.1.100
Nginx → Node.js → SQLite
Nginx — HTTP (atau HTTPS self-signed)
Untuk intranet, cukup HTTP atau HTTPS dengan self-signed certificate. Browser siswa perlu menerima warning SSL sekali di awal.
PM2 — Process Manager
Auto-restart dan startup otomatis. Sangat penting agar sistem tetap berjalan setelah listrik padam dan server reboot.
Node.js — Absenta Backend
Engine ujian. Karena tidak ada internet, semua soal dan jawaban diproses secara penuh secara lokal.
SQLite — Database Lokal
File database tunggal di server. Ringan, tidak perlu server database terpisah. Backup via cron ke flashdisk/NAS sekolah.
🌐 Hybrid: Server di sekolah terhubung ke internet dan bisa diakses via domain publik. Perangkat siswa bisa dari WiFi sekolah maupun dari internet.
Siswa di Sekolah
Via WiFi LAN
192.168.1.x
Server Sekolah
Domain: ujian.smkn1.sch.id
IP Publik: 203.x.x.x
Nginx + SSL (Let's Encrypt)
Siswa dari Rumah
Via internet
Browser / App
Nginx + Let's Encrypt SSL — Wajib HTTPS Valid
Karena bisa diakses dari internet, wajib menggunakan SSL certificate yang valid. Let's Encrypt gratis dan auto-renew.
Fail2Ban + Rate Limiting — Proteksi dari Serangan
Karena port 443 terbuka ke internet, Fail2Ban memblokir IP yang terlalu sering gagal login. Nginx rate-limit per IP.
PM2 — Process Manager
Sama seperti Full Lokal, namun lebih kritikal karena downtime berarti siswa dari rumah juga tidak bisa akses.
Node.js — Absenta Backend
Sama dengan Full Lokal. Bedanya, harus handle request dari jaringan eksternal dengan beban yang berpotensi lebih tinggi.
Database — SQLite atau PostgreSQL
Untuk Hybrid dengan >300 siswa concurrent, disarankan migrasi ke PostgreSQL yang lebih tahan terhadap concurrent writes.
✅ Yang Sama dengan Full Lokal
- → Stack Node.js + PM2 + Nginx identik
- → Data tersimpan di server sekolah
- → Panel admin di path
/admin - → Lisensi dan konfigurasi .env sama
➕ Konfigurasi Tambahan Hybrid
- → DNS A Record domain → IP publik server
- → Certbot Let's Encrypt + auto-renew cron
- → Fail2Ban + Nginx rate limiting
- → Port forwarding 80/443 di router ISP
Langkah Instalasi
Panduan step-by-step dari awal hingga sistem siap digunakan
Persiapkan Server & Update Sistem
Login ke server via SSH dan pastikan semua paket sistem dalam kondisi terbaru.
# Update & upgrade sistem sudo apt update && sudo apt upgrade -y # Install dependencies dasar sudo apt install -y curl git unzip ufw nginx
Install Node.js v20 LTS via NodeSource
Absenta memerlukan Node.js versi 18 atau 20 LTS. Jangan gunakan Node.js dari repository apt default karena biasanya versi lama.
# Tambah repository NodeSource curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - # Install Node.js sudo apt install -y nodejs # Verifikasi instalasi node -v && npm -v # Output: v20.x.x dan 10.x.x
Install PM2 & Clone Absenta
PM2 akan menjaga proses Absenta tetap berjalan 24/7 dan restart otomatis saat server reboot.
# Install PM2 secara global sudo npm install -g pm2 # Buat direktori aplikasi sudo mkdir -p /var/www/absenta sudo chown $USER:$USER /var/www/absenta # Clone repository (gunakan URL lisensi yang diberikan tim Absenta) git clone https://repo.absenta.id/onpremise.git /var/www/absenta cd /var/www/absenta npm install --production
Konfigurasi Environment & Aktivasi Lisensi
Buat file konfigurasi dan masukkan kunci lisensi On-Premise yang Anda terima dari tim Absenta.
# Salin template konfigurasi cp .env.example .env nano .env
# Isi file .env dengan konfigurasi sekolah Anda NODE_ENV=production PORT=3000 LICENSE_KEY=XXXX-XXXX-XXXX-XXXX-XXXX SCHOOL_NAME="SMKN 1 Contoh Kota" SCHOOL_DOMAIN=192.168.1.100 DB_PATH=/var/www/absenta/data/absenta.db ADMIN_SECRET=ganti-dengan-password-kuat-anda
LICENSE_KEY sesuai dengan yang diterima via email. Lisensi dikunci ke MAC Address dan hostname server. Jangan jalankan di VM yang di-clone.
Konfigurasi Nginx sebagai Reverse Proxy
Nginx akan menjadi pintu masuk utama, menangani SSL dan meneruskan request ke Node.js di port 3000.
sudo nano /etc/nginx/sites-available/absenta
# Konfigurasi Nginx untuk Absenta On-Premise server { listen 80; server_name 192.168.1.100; # Ganti dengan IP/domain server location / { proxy_pass http://127.0.0.1:3000; 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; proxy_read_timeout 300; } # Batasi ukuran upload (soal bergambar) client_max_body_size 50M; }
# Aktifkan konfigurasi sudo ln -s /etc/nginx/sites-available/absenta /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl restart nginx
Jalankan Absenta dengan PM2
Start aplikasi dan konfigurasikan PM2 agar berjalan otomatis saat server reboot.
cd /var/www/absenta # Jalankan aplikasi pm2 start server.js --name absenta-school # Simpan konfigurasi PM2 pm2 save # Auto-start saat reboot pm2 startup systemd -u $USER --hp $HOME # Cek status — pastikan status "online" pm2 list
Setup Firewall & Pengujian Akses
Konfigurasi firewall agar hanya port yang dibutuhkan yang terbuka, lalu uji akses dari perangkat siswa.
# Konfigurasi firewall UFW sudo ufw allow ssh sudo ufw allow 'Nginx Full' sudo ufw enable sudo ufw status # Cek apakah aplikasi berjalan di port 3000 curl -s http://localhost:3000/health # Output: {"status":"ok","license":"valid","version":"x.x.x"}
http://192.168.1.100 (IP server). Panel proktor dapat diakses di http://192.168.1.100/admin.
Konfigurasi Backup Otomatis
Jadwalkan backup database secara rutin menggunakan cron job agar data ujian aman.
# Buka cron editor crontab -e # Tambahkan baris berikut (backup setiap hari jam 02:00) 0 2 * * * cp /var/www/absenta/data/absenta.db /var/backups/absenta-$(date +\%Y\%m\%d).db # Hapus backup lebih dari 30 hari 0 3 * * * find /var/backups/ -name "absenta-*.db" -mtime +30 -delete
Pertanyaan Umum (FAQ)
Jawaban atas pertanyaan yang paling sering ditanyakan