DOMjudge adalah sistem automated programming contest judge, biasa digunakan untuk lomba algoritma / competitive programming seperti ICPC. Dengan DOMjudge, kita bisa:
- Membuat kontes
- Upload problem set (ZIP)
- Mengatur scoreboard & tim
- Menguji submission otomatis
Di tutorial ini, kita akan menginstal DOMjudge menggunakan Docker & Docker Compose pada Ubuntu Desktop. Metode ini mudah, portable, dan minim konflik dependensi.
1. Install Docker & Docker Compose
Pastikan sistem kita up to date, lalu install Docker dan plugin Docker Compose. Kita buka terminal dan jalankan sintak untuk update Ubuntu-nya dulu :
sudo apt update
Kemudian jalankan perintah :
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
Perintah ini digunakan untuk menginstal beberapa paket pendukung penting di Ubuntu, biasanya sebelum menambahkan repository pihak ketiga (seperti Docker, Node.js, dan lain-lain). Berikut arti masing-masing:
Paket | Fungsi |
---|---|
apt-transport-https |
Agar apt bisa mengunduh paket dari repository HTTPS, bukan hanya HTTP. Ini lebih aman. |
ca-certificates |
Instal sertifikat SSL root. Diperlukan agar Ubuntu bisa memverifikasi keamanan koneksi HTTPS (misalnya saat mengunduh paket atau meng-clone repo git). |
curl |
Tool baris perintah untuk download data dari internet (HTTP, HTTPS, FTP). Sering dipakai untuk ambil GPG key. |
software-properties-common |
Menyediakan utilitas add-apt-repository untuk menambah repository baru ke apt . |
gnupg |
Instal GPG (GNU Privacy Guard) untuk memverifikasi tanda tangan digital pada repository (misalnya GPG key Docker). |
lsb-release |
Menyediakan perintah lsb_release -cs untuk mengetahui codename Ubuntu (misalnya bionic , focal , noble ). Biasanya digunakan saat membuat list repository. |
Tambahkan GPG key Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Tambahkan repository Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Install Docker & Compose
Update lagi ubuntunya :
sudo apt update
Kemudian :
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
2. Siapkan direktori proyek DOMjudge
Buat direktori/folder domjudge :
mkdir ~/domjudge
Kemudian masuk ke direktori domjudge :
cd ~/domjudge
3. Buat file docker-compose.yml
Buat file konfigurasi Docker Compose:
nano docker-compose.yml
Lalu isi dengan konfigurasi berikut :
version: '3.9' networks: domjudge: name: domjudge services: mariadb: container_name: mariadb image: mariadb:latest networks: - domjudge ports: - "13306:3306" environment: - MYSQL_ROOT_PASSWORD=rootpw - MYSQL_USER=domjudge - MYSQL_PASSWORD=djpw - MYSQL_DATABASE=domjudge domserver: container_name: domserver image: domjudge/domserver:latest volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro networks: - domjudge ports: - "12345:80" depends_on: - mariadb environment: - CONTAINER_TIMEZONE=Asia/Jakarta - MYSQL_HOST=mariadb - MYSQL_ROOT_PASSWORD=rootpw - MYSQL_USER=domjudge - MYSQL_PASSWORD=djpw - MYSQL_DATABASE=domjudge judgehost: container_name: judgehost image: domjudge/judgehost:latest privileged: true hostname: judgedaemon volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro networks: - domjudge depends_on: - domserver environment: - DAEMON_ID=0 - JUDGEDAEMON_PASSWORD=xxx
4. Jalankan database & domserver
sudo docker compose up -d mariadb domserver
5. Ambil password untuk Judgehost
Jalankan perintah ini untuk mendapatkan password daemon:
sudo docker exec -it domserver cat /opt/domjudge/domserver/etc/restapi.secret
Salin password pada baris judgehost
, lalu edit docker-compose.yml
dan ganti:
- JUDGEDAEMON_PASSWORD=xxx
dengan password yang tadi didapatkan.
6. Jalankan semua layanan
sudo docker compose up -d
7. Akses DOMjudge
Buka browser dan akses alamat :
http://localhost:12345
Login Admin
untuk mendapatkan password domserver gunakan perintah :
sudo docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret
Gunakan:
- Username:
admin
- Password: sesuai hasil command di atas.
Sekarang DOMjudge sudah berjalan penuh. Kita bisa:
- Membuat kontes
- Upload problem set (ZIP)
- Mengatur scoreboard & tim
- Melakukan simulasi perlombaan
Tips manajemen Docker
Cek container berjalan:
sudo docker ps
Hentikan semua:
sudo docker compose down
Nyalakan kembali:
sudo docker compose up -d
Cara Penggunaan DOMjudge
1. Login Admin
- Buka browser, akses alamat DOMjudge:
http://localhost:12345
atau jika via jaringan:
http://[IP_SERVER]:12345
- Login dengan:
Username: admin Password: (lihat dari `initial_admin_password.secret` atau yang sudah kita set)
Contoh jika via docker:
sudo docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret
2. Membuat Kontes
- Klik menu “Contests” → “Add contest”.
- Isi form:
- Shortname: misalnya
kontes1
- Name:
Kontes Pemrograman SMK
- Start time: waktu mulai (format
YYYY-MM-DD HH:MM:SS
) - End time: waktu selesai
- Shortname: misalnya
- Klik Submit.
3. Menambahkan Soal
- Klik menu “Problems” → “Add problem”.
- Isi:
- Name:
Penjumlahan Bilangan
- Short name:
A
- Color: pilih warna (untuk scoreboard)
- Name:
- Upload file soal (zip) yang isinya:
problem.pdf # deskripsi soal secret/ sample.in sample.out input1.in output1.out ...
Struktur folder ZIP untuk soal DOMjudge
soal-penjumlahan.zip ├── problem.pdf └── secret/ ├── sample.in ├── sample.out ├── input1.in ├── output1.out ├── input2.in └── output2.out
DOMjudge mengharapkan:
problem.pdf
berisi deskripsi soal untuk peserta.secret/
berisi file test case input dan output, yang akan digunakan DOMjudge untuk menguji submission peserta.
Contoh isi masing-masing file
-
problem.pdf
: File PDF ini berisi penjelasan soal yang dibaca peserta.
Contohnya:
Judul: Penjumlahan Dua Bilangan Deskripsi: Buatlah program untuk membaca dua bilangan bulat A dan B, kemudian mencetak hasil penjumlahannya. Input: Satu baris berisi dua bilangan bulat A dan B (1 <= A,B <= 100). Output: Cetak satu baris berisi hasil penjumlahan A + B. Contoh Input: 5 7 Contoh Output: 12
(Disimpan dalam file
problem.pdf
.)secret/ — test cases
DOMjudge akan memakai file di sini untuk menilai solusi peserta.
Nama file input harus berakhiran
.in
, output harus.out
Contoh file
sample.in
5 7
Contoh file
sample.out
12
Ini biasanya digunakan untuk sample case, ditampilkan di halaman soal (kalau pengaturan aktif).
Contoh file
input1.in
10 20
Contoh file
output1.out
30
Contoh file
input2.in
100 1
Contoh file
output2.out
101
Cara membuat ZIP
Dari dalam folder yang berisi:
problem.pdf secret/
jalankan:
zip -r soal-penjumlahan.zip problem.pdf secret/
problem.pdf
berisi deskripsi soal untuk peserta. - Klik Submit.
Tips:
Pastikan struktur ZIP benar, DOMjudge butuh foldersecret
berisi input/output.
4️. Menambahkan User (Team / Peserta)
- Klik Teams → Add team.
- Isi:
- Team name:
Tim Alpha
- Short name:
alpha
- Username:
alpha
- Password:
123456
- Team name:
- Pilih contest yang diikuti (misalnya
kontes1
). - Klik Submit.
5️. Login Sebagai Peserta
- Peserta buka browser ke:
http://[IP_SERVER]:12345
- Login pakai:
Username: alpha Password: 123456
- Setelah login, peserta akan melihat daftar soal dan bisa:
- Mengunduh deskripsi soal
- Submit source code (C, C++, Python, dsb)
- Melihat status compile / runtime / hasil testcase.
6️. Memantau Lomba
- Admin bisa buka Scoreboard realtime.
- Klik menu Submissions untuk melihat detail status (Compile error, Wrong Answer, Accepted).
- Klik Rejudge jika ingin mengulang penilaian.
7️. Tips untuk Juri
Beberapa fitur penting:
- Clarifications: untuk menjawab pertanyaan dari tim.
- Rejudge: mengulang penilaian jika testcase diubah.
- Freeze scoreboard: biasanya dilakukan 1 jam sebelum akhir, agar peserta tidak tahu perkembangan poin tim lain.
Perintah singkat CLI
Kalau mau rejudge semua submission via CLI (opsional):
sudo docker exec -it domserver /opt/domjudge/domserver/bin/dj_admin rejudge 1
Demikian tutorial cara install DOMjudge di iubtu 24.04 dengan Docker dan cara penggunaannya, semoga bermanfaat.