Skip to content
/ NOJ Public

Online Judge của CLB Tin học - Khoa CNTT trường Đại học Cần Thơ, base on NOJ.

License

Notifications You must be signed in to change notification settings

lvdat/NOJ

Repository files navigation

CICT OJ - Hệ thống chấm bài thuật toán tự động

CICTOJ Banner

[DEPRECATED] - Hiện project sẽ dừng phát triển và chuyển sang sử dụng VNOJ. Xem repo ở đây

OJ này được fork và chỉnh sửa lại từ NOJ. Chi tiết có thể xem qua repo gốc ở đây: NOJ. Đây là OJ chính thức của CLB Tin học - khoa CNTT&TT trường ĐH Cần Thơ.

Scrutinizer build (GitHub/Bitbucket) GitHub Workflow Status (branch) GitHub Workflow Status (branch2) GitHub repo size FOSSA Status

Ngôn ngữ hỗ trợ (15)
Language Compile/Run Command
C /usr/bin/gcc -DONLINE_JUDGE -O2 -w -fmax-errors=3 -std=c99 {src_path} -lm -o {exe_path}
C11 /usr/bin/gcc -DONLINE_JUDGE -O2 -w -fmax-errors=3 -std=c11 {src_path} -lm -o {exe_path}
C++ /usr/bin/g++ -DONLINE_JUDGE -O2 -w -fmax-errors=3 -std=c++11 {src_path} -lm -o {exe_path}
C++14 /usr/bin/g++ -DONLINE_JUDGE -O2 -w -fmax-errors=3 -std=c++14 {src_path} -lm -o {exe_path}
C++17 /usr/bin/g++ -DONLINE_JUDGE -O2 -w -fmax-errors=3 -std=c++17 {src_path} -lm -o {exe_path}
Java /usr/bin/javac {src_path} -d {exe_dir} -encoding UTF8
/usr/bin/java -cp {exe_dir} -XX:MaxRAM={max_memory}k -Djava.security.manager -Dfile.encoding=UTF-8 -Djava.security.policy==/etc/java_policy -Djava.awt.headless=true Main
Python2 /usr/bin/python -m py_compile {src_path}
/usr/bin/python {exe_path}
Python3 /usr/bin/python3.7 -m py_compile {src_path}
/usr/bin/python3.7 {exe_path}
PHP7 /usr/bin/php {exe_path}
Javascript /usr/bin/jsc {exe_path}
Go /usr/bin/go build -o {exe_path} {src_path}
C# /usr/bin/mcs -optimize+ -out:{exe_path} {src_path}
Ruby /usr/bin/ruby {exe_path}
Rust /usr/bin/rustc -O -o {exe_path} {src_path}
Haskell /usr/bin/ghc -O -outputdir /tmp -o {exe_path} {src_path}
Free Pascal /usr/bin/fpc -O2 -o{exe_path} {src_path}
Plaintext /bin/cat {exe_path}
Free Basic /usr/local/bin/fbc {src_path}
Feature

Base on NOJ Feature

Trình duyệt yêu cầu
Chrome
Chrome
Firefox
Firefox
IE
Internet Explorer
Edge
Edge
Opera
Opera
Safari
Safari
69 and above 62 and above Not supported 69 and above Not Supported 13.1 and above

Cài đặt nhanh

Platform:

Triển khai trên các hệ thống dưới đây để dễ dàng nhất và tránh gặp các lỗi linh tinh :)

  • Ubuntu 20.04+
  • CentOS Linux release 8.0+
  • Không sử dụng Windows

Môi trường

Cài đặt trước những thứ sau:

PHP Composer MySQL Redis NodeJS NPM Apache

Note:

  • Các phiên bản đã được test trên Ubuntu 20.04. Trên các hệ thống khác cần chú ý phiên bản khi cài đặt.
  • NodeJS nên cài đặt bằng nvm.
  • Các hướng dẫn tiếp theo được thực hiện trên Ubuntu 20.04 [amd64] dùng Apache2, các distro khác thực hiện tương tự, riêng trường hợp dùng Windows, Nginx lỗi không support :)

Cài đặt web interface

  • wkhtmltopdf 0.12.6
    wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb`
    sudo dpkg -i wkhtmltox_0.12.6-1.focal_amd64.deb
    
    Bước này thường sẽ gặp lỗi
    dpkg: dependency problems prevent configuration of wkhtmltox:
     wkhtmltox depends on xfonts-75dpi; however:
      Package xfonts-75dpi is not installed.
     wkhtmltox depends on xfonts-base; however:
      Package xfonts-base is not installed.
    
    Thay vì google search rồi vào StackOverflow thì ta chạy mấy dòng sau để fix:
    sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner"
    sudo apt --fix-broken install
    sudo dpkg -i wkhtmltox_0.12.6-1.focal_amd64.deb
    
  • Clone project
    git clone https://github.com/lvdat/NOJ.git
    cd NOJ
    
  • Config host, ví dụ tôi dùng domain ctuoj.local
    sudo cp examples/apache2.conf /etc/apache2/sites-available/ctuoj.local.conf
    sudo vim /etc/apache2/sites-available/ctuoj.local.conf
    
    Tìm và sửa ServerName thành domain, DocumentRoot, Directory thành đường dẫn đến thư mục NOJ/public, file config sẽ giống như vầy:
    <VirtualHost *:80>
        ServerName ctuoj.local
    
        DocumentRoot /home/levandat/NOJ/public
    
        <Directory /home/levandat/NOJ/public>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
                Require all granted
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    </VirtualHost>
    
    Disable default site, enable rewrite, NOJ and reload Apache2
    sudo a2dissite 000-default
    sudo a2enmod rewrite
    sudo a2ensite ctuoj.local
    sudo service apache2 reload
    
  • Cài đặt package
    sudo apt install php-intl php-gd php-mbstring php-zip php-curl php-mysql php-xml php-dom
    composer install
    
  • Để tránh lỗi phân quyền và mò mấy tiếng để fix thì tôi đề xuất đổi user chạy các task của OJ thành current user. Đổi user apache:
    sudo vim /etc/apache2/envvars
    
    Sửa user và group
    export APACHE_RUN_USER=lvdat
    export APACHE_RUN_GROUP=lvdat
    
    Nếu bạn dùng php-fpm thì tự search cách đổi, php thường không cần. Hoặc nếu bạn không thích cách này vẫn có thể chmod theo docs của Laravel.
  • Set up Database
    mysql -u root -p
    CREATE DATABASE noj CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    CREATE USER 'noj'@'localhost' IDENTIFIED BY 'nojsobruh';
    GRANT ALL PRIVILEGES ON noj.* TO 'noj'@'localhost';
    FLUSH PRIVILEGES;
    \q
    
  • Tạo file .env
    cp .env.example .env
    vim .env
    
    Chỉnh sửa thông tin database và base url
    APP_URL=http://127.0.0.1
    
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=noj
    DB_USERNAME=noj
    DB_PASSWORD=nojsobruh
    
  • Set key mới
    php artisan key:generate
    
  • Migration
    php artisan migrate
    
  • Install passport (for API Auth Services)
    php artisan passport:install
    
  • CI npm
    npm ci
    
  • Build static
    npm run production
    
  • Add NOJ label
    php artisan babel:install noj
    

Đã set up xong web interface.

Cài đặt judge server

...

Sync test case giữa client và judger server

...

License

FOSSA Status

About

Online Judge của CLB Tin học - Khoa CNTT trường Đại học Cần Thơ, base on NOJ.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks