🖥️ Panduan Teknis On-Premise

Panduan Instalasi &
Spesifikasi Server Absenta

Semua yang perlu Anda ketahui untuk menginstal, mengkonfigurasi, dan menjalankan Absenta di server sekolah Anda sendiri — dari spesifikasi hardware hingga langkah deployment.

🐧 Ubuntu / Debian ⚡ Node.js + PM2 🔒 Nginx Reverse Proxy 🗄️ SQLite / PostgreSQL
🗺️

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.

✓ Tanpa Internet ✓ Privasi Maksimal ✓ Latensi Rendah ⚠ Hanya di Sekolah
🌐

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.

✓ Akses dari Rumah ✓ Domain Publik ✓ Data di Sekolah ⚠ Butuh Internet
🏫

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
💡 Cocok Untuk

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
💡 Cocok Untuk

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.

Aspek 🏫 Full Lokal 🌐 Hybrid
Akses perangkat siswa WiFi Sekolah Only WiFi + Internet
Internet di server Tidak diperlukan Wajib (stabil)
Ujian dari rumah (take-home) ✗ Tidak bisa ✓ Bisa
SSL Certificate Self-signed / Opsional Let's Encrypt (Wajib)
Kompleksitas setup ⭐ Lebih sederhana ⭐⭐ Lebih kompleks
Pemantauan proktor dari luar ✗ Harus di sekolah ✓ Bisa remote
📋

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 sudo atau root

Runtime & Tools

  • Node.js v18.x atau v20.x LTS
  • 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, 3000 dibuka 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)
  • ufw atau iptables dikonfigurasi
🔑

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

200 siswa
50 siswa 500 1.000 1.500 2.000 siswa
🏫 Sekolah Kecil — Konfigurasi Standar
💾
RAM Memory
4 GB MIN
8 GB IDEAL
⚙️
CPU Cores
2 core MIN
4 core IDEAL
💿
Storage SSD
60 GB MIN
120 GB IDEAL
👥
Maks. Ujian Bersamaan
120 sesi 60%
200 sesi MAX
Estimasi Kebutuhan Bandwidth LAN (Peak)
📡 Bandwidth minimum (peak concurrent) 24 Mbps
🚀 Bandwidth ideal (burst handling) 50 Mbps

* Bandwidth LAN internal switch ke server. Bukan koneksi internet.

⚠️ Catatan Kalkulasi: Estimasi dihitung berdasarkan asumsi 60% siswa ujian secara bersamaan, beban rata-rata 2–4 MB RAM per sesi aktif, dan 200–400 KB/s bandwidth per koneksi ujian aktif. Spesifikasi "Ideal" direkomendasikan agar sistem tetap responsif saat semua siswa mengakses bersamaan di jam puncak. Tambahkan margin 30% untuk growth capacity ke depan.
🏗️

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

HTTP/HTTPS
LAN Only
🖥️
Server Sekolah

Ubuntu 22.04 LTS
IP Lokal: 192.168.1.100

Nginx → Node.js → SQLite

Stack di Server (Full Lokal)
:80
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
PM2 — Process Manager

Auto-restart dan startup otomatis. Sangat penting agar sistem tetap berjalan setelah listrik padam dan server reboot.

:3000
Node.js — Absenta Backend

Engine ujian. Karena tidak ada internet, semua soal dan jawaban diproses secara penuh secara lokal.

SQLite
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

LAN
🖥️
Server Sekolah

Domain: ujian.smkn1.sch.id
IP Publik: 203.x.x.x

Nginx + SSL (Let's Encrypt)

Internet
🏠
Siswa dari Rumah

Via internet
Browser / App

Stack di Server (Hybrid)
:443 HTTPS
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
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
PM2 — Process Manager

Sama seperti Full Lokal, namun lebih kritikal karena downtime berarti siswa dari rumah juga tidak bisa akses.

:3000
Node.js — Absenta Backend

Sama dengan Full Lokal. Bedanya, harus handle request dari jaringan eksternal dengan beban yang berpotensi lebih tinggi.

SQLite / PG
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

1

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
2

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
3

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
4

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
⚠️ Pastikan LICENSE_KEY sesuai dengan yang diterima via email. Lisensi dikunci ke MAC Address dan hostname server. Jangan jalankan di VM yang di-clone.
5

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
6

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
7

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"}
Jika berhasil, buka browser di perangkat siswa dan akses http://192.168.1.100 (IP server). Panel proktor dapat diakses di http://192.168.1.100/admin.
8

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

Ya, setelah aktivasi awal, Absenta On-Premise dapat beroperasi sepenuhnya dalam jaringan intranet tanpa koneksi internet. Aktivasi lisensi awal memerlukan koneksi internet sekali saja. Setelah itu, semua fitur ujian berjalan 100% offline di jaringan lokal sekolah.
Lisensi On-Premise tersedia dalam model tahunan. Sekolah dapat memperpanjang dari panel admin Absenta sebelum masa berlaku habis. Sistem akan memberikan peringatan 30 hari sebelum lisensi kedaluwarsa. Perpanjangan tidak memerlukan reinstalasi.
Ya, dengan proses migrasi lisensi yang difasilitasi oleh tim teknis Absenta. Karena lisensi terikat ke hardware fingerprint, pemindahan ke server baru memerlukan verifikasi dan re-aktivasi. Hubungi support@absenta.id dengan menyertakan detail server lama dan baru.
Saat ini satu instalasi Absenta On-Premise diperuntukkan untuk satu institusi/sekolah. Untuk kebutuhan multi-sekolah (misalnya yayasan dengan banyak unit), tersedia paket Enterprise dengan arsitektur multi-tenant. Silakan hubungi tim kami untuk diskusi lebih lanjut.
Absenta memiliki mekanisme auto-save jawaban di sisi perangkat siswa (local cache). Jika server kembali online dalam 10 menit, jawaban yang sudah diinput akan ter-sync secara otomatis. PM2 juga dikonfigurasi untuk auto-restart server dalam hitungan detik jika terjadi crash.
Ya. "On-Premise" dalam konteks Absenta berarti Anda yang mengontrol dan mengelola server — baik itu server fisik di ruang server sekolah, maupun VPS cloud yang Anda kelola sendiri (DigitalOcean, Vultr, Niagahoster, dll). Yang membedakannya dari SaaS adalah data dan infrastruktur ada di bawah kendali Anda.

🤝 Butuh Bantuan Instalasi?

Tim teknis Absenta siap mendampingi proses instalasi, konfigurasi, dan pengujian sistem Anda — dari awal hingga sistem siap digunakan oleh seluruh siswa.