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:12345atau 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.outDOMjudge mengharapkan:
problem.pdfberisi 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.outContoh file
sample.in5 7Contoh file
sample.out12Ini biasanya digunakan untuk sample case, ditampilkan di halaman soal (kalau pengaturan aktif).
Contoh file
input1.in10 20Contoh file
output1.out30Contoh file
input2.in100 1Contoh file
output2.out101Cara membuat ZIP
Dari dalam folder yang berisi:
problem.pdf secret/jalankan:
zip -r soal-penjumlahan.zip problem.pdf secret/problem.pdfberisi deskripsi soal untuk peserta. - Klik Submit.
Tips:
Pastikan struktur ZIP benar, DOMjudge butuh foldersecretberisi 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.

