[HustOJ] Online Judge System 구축하기
카테고리: HustOJ
HustOJ
HustOJ는 전세계에서 흔히 사용하는 Online Judge System의 한 종류이다. 한국에서도 여러 대학, 중고등학교에서 수행평가나 프로그래밍 학습 교구로 많이 사용하고 있다.
다만, 현재 구글에 올라온 구축 방법들이 상당히 오래전 방법이라 최신 방법을 포스팅하고자 한다.
※ 본 게시글은 Ubuntu 22.04 LTS 버전을 기준으로 작성되었습니다.
1. HustOJ 다운로드 후 설치하기
설치 방법은 예전과 다르게 많이 간편화되어 아래의 명령어 두줄이면 자동으로 설치를 시작한다.
다만, Ubuntu 운영체제만 지원하며, WSL 및 도커로 구축한 Ubuntu는 지원되지 않고 듀얼 코어 CPU와 2G RAM 이상의 사양을 요구한다.
wget http://dl.hustoj.com/install.sh
sudo bash install.sh
설치가 완료되면 아래와 같은 내용이 출력되는데, 출력된 username과 password를 기억해두어야 나중에 db를 직접 접근하는 상황에서 사용할 수 있다.
2. 홈페이지 한국어로 설정하기
구축이 완료된 후, 127.0.0.1로 접속하면 /home/judge/src/web/include/db_info.inc.php의 $OJ_LANG와 HTTP_ACCEPT_LANGUAGE 헤더를 바탕으로 언어를 자동으로 설정해준다. 또한, 기본적으로 syzoj라는 템플릿을 사용하여 사이트를 구성한다.
하지만, syzoj 템플릿은 중국인이 개발하여 배포하는 만큼 일부분 한글화가 부족하여 중국어나 영어가 섞여있다. 이와 같은 불편함을 해결하고자 수정한 템플릿을 원본 License인 GPL3에 따라 템플릿을 배포한다.
1. 설치하기
vim update.sh
#!/bin/bash
#Update Script
if [[ -z $SUDO_USER ]] ; then
echo "Use 'sudo bash ${THISFILE}'"
exit 1
fi
cd /home/judge/src/web/ || exit
wget https://github.com/syudal/SYZOJ-Kor/archive/refs/heads/main.zip
unzip -o main.zip -d template
rm main.zip
cd template
rm -rf syzoj-kor
mkdir syzoj-kor
cp -r SYZOJ-Kor-main/* syzoj-kor/
chown -R www-data:www-data syzoj-kor
rm -rf SYZOJ-Kor-main
sudo bash update.sh
2. 적용하기
vim /home/judge/src/web/include/db_info.inc.php
static $OJ_LANG="ko";
static $OJ_TEMPLATE="syzoj-kor";
3. admin 계정 생성하기
관리자 계정은 자동으로 생성되는 것이 아니라, 회원가입 페이지에서 별도로 가입을 해야한다.
회원가입 페이지에서 id는 admin으로 하고 회원가입을 진행하면 관리자 계정이 생성된다.
이후 로그인 한 후, 우상단을 눌러보면 ‘관리’ 버튼이 생겨있다면 구축에 성공한 것이다.
4. 도메인 연결하고 https 설정하기(선택)
도메인을 구매하여 가지고 있다면, 당연하게도 HustOJ와 도메인을 연동할 수 있다.
도메인을 구매한 곳에서 DNS 설정에서 A record를 구축한 서버의 외부 아이피로 설정하고 아래의 포스팅을 따라하면 간단하게 도메인 연동과 동시에 https도 설정할 수 있다.
https://syudal.github.io/post/Ubuntu-Nginx-Lets-Encrypt로-https-적용하기/
5. PHPMyAdmin 설치하기(선택)
HustOJ를 사용하다가 DB의 관리가 필요한 경우, 3306 포트에 연결하여 관리 할 수 있지만 웹 기반의 오픈 소스 관리도구인 PHPMyAdmin을 사용하면 더욱 편리하다.
Nginx와 MariaDB가 설치된 상태이므로, 1번과 2번을 건너뛰고 3번 부터 진행하면 된다.