Saturday, May 16, 2026

Judge0 Installation Full steps

 

Judge0 Installation & Running Document

Domain: judge.tr**klms.org
Server: AWS EC2 Ubuntu
Purpose: Deploy Judge0 code execution server with SSL using Nginx reverse proxy.


1. Server Requirements

Minimum recommended server:

Ubuntu 22.04 LTS
2 vCPU
4 GB RAM minimum
40 GB SSD minimum

Recommended for live usage:

Ubuntu 22.04 LTS
2 vCPU or more
8 GB RAM
80 GB SSD

2. Required Ports in AWS Security Group

Open these ports in EC2 Security Group:

22    SSH      Your IP only
80    HTTP     0.0.0.0/0
443   HTTPS    0.0.0.0/0

Do not expose Judge0 port 2358 publicly.

Judge0 will run internally on:

http://127.0.0.1:2358

Public users will access:

https://judge.tr**klms.org

3. DNS Setup

In the domain DNS panel, create an A record:

Type: A
Name: judge
Value: EC2_PUBLIC_IP
TTL: Auto

Example:

judge.tr**klms.org  ->  Your EC2 public IP

4. Update Server Packages

Run:

sudo apt update
sudo apt upgrade -y

Install basic required packages:

sudo apt install -y unzip curl wget nginx certbot python3-certbot-nginx

5. Install Docker

Run:

sudo apt install -y docker.io

Enable and start Docker:

sudo systemctl enable docker
sudo systemctl start docker

Check Docker:

docker --version

6. Install Docker Compose

First try:

sudo apt install -y docker-compose

Check:

docker-compose --version

If docker-compose is still not found, install manually:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Check again:

docker-compose --version

7. Important Note About Judge0 Package

Do not use this package for our setup:

judge0-v1.13.0-https.zip

Because it starts its own Docker Nginx container and tries to use port 80.

We are using system Nginx and Certbot SSL, so use normal package:

judge0-v1.13.0.zip

8. Stop Wrong HTTPS Package If Already Running

If HTTPS package was already started, stop it:

cd /judge0-v1.13.0/judge0-v1.13.0-https
docker-compose down

Check running containers:

docker ps

9. Download Normal Judge0 Package

Create folder:

cd /
mkdir -p /judge0-normal
cd /judge0-normal

Download Judge0:

wget https://github.com/judge0/judge0/releases/download/v1.13.0/judge0-v1.13.0.zip

Unzip:

unzip judge0-v1.13.0.zip

Go to Judge0 folder:

cd judge0-v1.13.0

10. Configure Judge0 Passwords

Open config file:

nano judge0.conf

Find these values:

REDIS_PASSWORD=
POSTGRES_PASSWORD=

Set strong passwords:

REDIS_PASSWORD=YourStrongRedisPassword123
POSTGRES_PASSWORD=YourStrongPostgresPassword123

Save file.

In nano:

CTRL + O  -> Enter
CTRL + X  -> Exit

11. Start Judge0

Start database and Redis first:

docker-compose up -d db redis

Wait 10 seconds:

sleep 10s

Start all Judge0 services:

docker-compose up -d

Check containers:

docker-compose ps

Expected services:

db
redis
server
workers

12. Test Judge0 Locally

Run:

curl http://localhost:2358/about

Also test:

curl http://localhost:2358/languages

If you get JSON response, Judge0 is running correctly.


13. Configure Nginx Reverse Proxy

Create Nginx config:

sudo nano /etc/nginx/sites-available/judge.tr**klms.org

Paste this:

server {
    listen 80;
    server_name judge.tr**klms.org;

    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:2358;
        proxy_http_version 1.1;

        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 300;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
    }
}

Save and exit.

Enable site:

sudo ln -s /etc/nginx/sites-available/judge.tr**klms.org /etc/nginx/sites-enabled/

Remove default site:

sudo rm -f /etc/nginx/sites-enabled/default

Test Nginx:

sudo nginx -t

Restart Nginx:

sudo systemctl restart nginx

Now check:

http://judge.tr**klms.org/docs

14. Install SSL Certificate

Run Certbot:

sudo certbot --nginx -d judge.tr**lms.org

When it asks for redirect, select redirect HTTP to HTTPS.

After SSL installation, open:

https://judge.tr**klms.org/docs

15. Final URLs

Judge0 API base URL:

https://judge.tr**klms.org

Judge0 API documentation:

https://judge.tr**klms.org/docs

Languages API:

https://judge.tr**klms.org/languages

About API:

https://judge.tr**klms.org/about

16. Useful Commands

Go to Judge0 folder:

cd /judge0-normal/judge0-v1.13.0

Check running containers:

docker-compose ps

View logs:

docker-compose logs -f

View server logs only:

docker-compose logs -f server

Restart Judge0:

docker-compose restart

Stop Judge0:

docker-compose down

Start Judge0 again:

docker-compose up -d db redis
sleep 10s
docker-compose up -d

Restart Nginx:

sudo systemctl restart nginx

Check Nginx config:

sudo nginx -t

Check SSL renewal:

sudo certbot renew --dry-run

17. Issue Faced and Solution

Issue

While using:

judge0-v1.13.0-https.zip

Docker showed this error:

failed to bind host port 0.0.0.0:80/tcp: address already in use

Reason

The HTTPS package starts its own Docker Nginx container on port 80.

But our EC2 server already had system Nginx running on port 80.

So two Nginx services were trying to use the same port.

Solution

We stopped the HTTPS package and used the normal Judge0 package:

judge0-v1.13.0.zip

Then we used system Nginx as reverse proxy with Certbot SSL.


18. Final Deployment Flow Summary

AWS EC2 Ubuntu Server
        ↓
Docker + Docker Compose installed
        ↓
Judge0 normal package installed
        ↓
Judge0 runs internally on port 2358
        ↓
Nginx reverse proxy handles domain
        ↓
Certbot adds SSL
        ↓
Final URL: https://judge.tr**klms.org/docs

Final setup:

Public URL:
https://judge.tr**klms.org

Internal Judge0:
http://127.0.0.1:2358

0 comments:

Post a Comment

Labels

.htaccess (5) 2step verification in php (1) 404 Page (1) Address Autocomplete (1) Admin (1) Ajax (3) alias key generation (1) All Browsers Testing (1) Android (19) Android 5.0 (2) Android Life Cycle (1) Android webview media capture (1) angular js (7) Angular Js ebook (1) AngularJS (23) Apache and mysql start up automatically once system boot (1) array_combine() (1) array_merge() (1) array_search() (1) async css and js (1) auto generate url slug in codeginiter (1) Auto reload (1) Autocomplete (1) automation code for php and mysql (1) AWS (1) AWS EC2 Hosting (6) AWS EC2 Hosting Connect with notepad++ (1) AWS ECS Hosting (1) base_url() (1) Basic php example on this keyword use (1) Best Practices to write jquery (1) Bootstrap (2) Bootstrap form tag problem (1) Bootstrap Modal (1) Bootstrap Modals (1) Breadcrumb (1) Broad band usage meter (1) Business Thoughts (1) Can't connect to MySQL server on (1) Cannot retrieve metalink for repository (1) Career Guidance (1) Carousel (1) Categories of websites (1) Cent OS (2) CI (1) Ci Errors (1) ckeditor (3) Clear Browser Cache Trick (1) Client IP Address (1) Code completion for codeigniter (1) Codehint for CodeIgniter (1) CodeIgniter (54) Codeigniter Controllers (1) Codeigniter email (1) Codeigniter file upload (2) Codeigniter send grid integration (1) CodeIgniter with Dreamweaver (1) Codigniter4 (1) color replace function in jquery (1) colorReplace function (1) configuration files locations (1) Controllers in controllers angular js (1) Cookies (1) Coolify VPS (1) core php file upload (1) count down timer in seconds in jquery (1) Countries Table in mysql (1) cPanel (2) Create User in mysql Db (1) CryptoJS (1) CSS (3) CSS tricks (2) curl parallel calls (1) Currency API (1) Customize date format in php (1) Data dictionary (1) data of birth validation and generation codeigniter (1) Database backup in php (1) date (1) Date Difference (2) date difference in jquery (1) Date format in php (1) Date functions (1) datepicker date format jquery (1) Datetime Picker (1) datewise mysql backup (1) DBFunctions (1) Default Image in html (1) Desktop tricks (1) Detect Android Mobile (1) Detect Iphone using javascript (1) Disadvantages of Joomla (1) Disadvantages of Wordpress (1) Distance Calculation (2) document printing (1) Document submit (1) dreamweaver (1) Drupal CMS (2) Drupal Components (1) Drupal Update (1) Dynamic jQuery (21) Dynamic websites building (1) echo (1) editor for html interface (1) Email (2) Email extract in php (1) email php configuration (1) EMAILS (1) empty() and is_null() difference (1) error handling in php (1) event.PreventDefault() (1) execution time in javascript (1) extract numbers php (1) Facebook Link Posting (1) Facebook Login Error Javascript (1) Facebook Page Likes (1) Fancybox (1) Fastpanel (2) Features of Joomla (1) Features of Wordpress (1) File Security (1) file upload (1) File upload in jquery (1) File upload through URL with php script (1) file_get_contents (1) Files listing from folders in php (1) FileUpload (2) fileupload in jquery with preview (1) filezilla (1) Filter to top (1) Find the Framework of a website (1) Firewall Configuration in Centos (1) FOR php developers (2) Form_validation form with codeigniter (1) FTP (1) Full calendar (1) Geo API (4) Geo Code (2) Geo complete (1) Geo Location (1) GeoLocation (4) get ipaddress (1) gmail contacts api (1) Google Chrome Install (1) Google Map (1) Google Maps (10) Grant all privileges in mysql db (1) Grocery Crud (5) Guess CMS (1) hashtag (1) History Clear (1) HMVC (1) Host is not allowed to connect to MySQL Server (1) how to include header and footer html in html (1) How to prevent sql injection in php (1) how to zip file in linux (1) HTML (4) HTML CSS JS compression (1) HTML Typography (1) HTML5 (4) httpd.conf Configurations (1) Huge IT Silder (1) Hybrid App (1) Hyperlinks (1) image resize in codeigniter (1) Image with preview and remove html (1) Include() and include_once Difference (2) India States (1) Interfaces in PHP (1) Internal server error solution (1) Invoice Templates (1) ionic (13) ionic ios (1) iOS (3) iTunes (1) Javascript (45) javascript countdown timer (1) javascript email validation (1) Javascript Object properties view (1) Javascript UNIX time stamp converter (1) jmeter (3) Jquery (40) jquery datepicker (2) jquery detect idle state (1) jquery list sort (1) Jquery OWL Carousel (1) Jquery UI (1) jquery username validation (1) jquery validation (1) JS (1) JSON (3) Laravel (4) Laravel Tutorials (2) Latest Android Version (1) Linux commands (5) LINUX Ftp Configuration (1) Linux Server IP Address (1) List Sortable in Jquery UI (1) Lollipop (1) Magento (1) mail in php (1) main controller and child controller and another child controller (1) Malware Removal (2) Malware Scan (1) Marketing (1) maximum execution time in php code (1) Media Capture in HTML5 (1) method overloading in php (1) method overriding in php (1) mod_rewrite (1) MongoDB (1) Mouse Deselection Javascript (1) Multidimensinal Array sort (1) multiple comparisons in php (1) Multiple file upload in Angular JS (1) Multiple file upload in jquery (1) multiple file upload in php (1) multiselect (1) Mysql (21) mysql and apache start up automatically once system boot (1) mysql connect (1) mysql connect in windows os (1) mysql database backup (1) mysql datatypes (1) Mysql DB (1) mysql Db connection program (1) Mysql Errors (1) mysql functions (1) MySQL HostName (1) mysql query tricks (1) MySQL server at 'reading initial communication packet' (1) mysql_real_escape_string() (1) mysql_secure_installation (1) mysql.sock (2) Error (1) mysqli (2) Native App (1) Netbeans for linux (1) Network usage monitor (1) NextJS (1) ng-bind (1) ng-click (1) Node js (1) NodeJS (1) Notepad++ (1) onchange display images (1) Online UNIX Timestamp to human readble format converter (1) OOPS in php (1) Pagination in Codeigniter (1) Pagination in php (1) Password encryption and decryption in php (1) Payment Gateways (1) Paypal (1) PayU Form (1) PDF (1) PDO (2) Pendrive Data Recovery (1) php (62) PHP 5.4.0 (2) php abstract class example (1) PHP ajax file upload (2) PHP ajax request detection (1) PHP Basic Login and logout (1) PHP Codeigniter database backup code (1) PHP Contact us email form code (1) PHP corn jobs (1) php database backup script (1) php email validation (1) PHP Environment Setup (1) PHP Errors (1) PHP Extension and Application Repository) (1) php file upload (1) PHP File Uploading (1) PHP fileupload helper in codeigniter (1) PHP interview questions (4) PHP lamda functions examples (1) PHP Login (1) PHP pdo (1) PHP PDO script to insert data inside mysql db (1) PHP Random Password generation Script (2) php script execution limit (1) php script to display months (1) php script to print years as dropdown (1) PHP Storm (2) PHP Storm license key (1) PHP strong encryption and decryption (1) php timeslot generator (1) php-mysql Modules (1) phpmyadmin (2) phpMyAdmin install (1) Pin-code finder (1) Pincode (1) Play youtube video in angular JS (1) Popup (2) POPUP in javascript (1) POST and GET Difference (1) POST DATA IN PHP (1) Postfix sendmail (1) preview of selected file (1) Print content with jquery (1) print() (1) Push Notifications (1) query string based pagination in codeigniter (1) Random key (1) ratings (1) regular expressions (1) remote validation (1) remove query string (1) Remove Sale Tag or Logo of woocommerce (1) Repository (1) require_once() (1) require() (1) Resize Image Dynamically (1) result_array() (1) rpmdb open fail (1) Salaries (1) SCP Command syntax (1) select images display in webbrowser (1) Selected values in javascript (1) Send free sms (1) Send Grid (1) Send Grid Email integration (1) SEO PHP (1) Session Management in PHP (1) show active class in the url automatically php (1) Show alternate image (1) simple ajax php script (1) Simple Login in PHP (1) Simple registraion (1) single file upload (1) site2sms script (1) Slideshow (1) SMTP Configuration (2) Socketio fastpanel (1) SOFTWARE TECHNOLOGY TIPS (1) Sort list items by Mouse in jquery (1) SPAM EMAILS (1) sprintf in php (1) SQL Injection in php (1) States Countries API (1) static variable in javascript (1) store date in php (1) stripslashes() (1) strtotime (1) sum of array values (1) sumo select (1) system error: 113 (1) Talk To Camera (1) Text to ASCII Generator (1) this keyword (1) Time ago function in javascript (1) Time ago Plugin (1) Time in PHP (1) time picker in grocery crud admin (1) Timeslot Generation in PHP (1) Tooltips using css (1) trigger in mysql (1) ubuntu (1) UNIX timestamp to HUMan readable converter (1) use full tutorials (1) user ur domain inseted of localhost (1) validation in javascript (1) Version Controls for PHP (1) Voice Over Prompts (1) Webmin (1) What CMS (1) Why Drupal CMS (1) Windows 10 (1) Windows Commands (1) Wordpress (2) Xampp (2) Xampp Localhost (1) Xampp Security (1) Yii Framework configuration (1) Yii framework installation (1) ZipArchive (1) ZipArchive php aws (1)
 
TOP