초보자를 위한 온라인 저지(OJ) 시스템 구축 가이드

개요

이 가이드는 리눅스 환경에서 온라인 저지 시스템을 처음 구축해보는 초보자를 위한教程입니다. QingdaoU에서 공개한 오픈소스 OJ 프로젝트를 기반으로 저렴하고 빠른 방법으로 개인용 온라인 저지 시스템을 구축할 수 있습니다.

필수 지식:

  • 리눅스 기본 명령어
  • Python 및 pip3 설치
  • Docker 설치 및 사용
  • 방화벽 및 포트 설정

사전 조건:

  • CentOS 7 이상의 리눅스 서버 (클라우드 서비스)
  • root 권한 또는 sudo 권한

1. 시스템 환경 준비

가장 먼저 클라우드 서비스 제공업체(테넌시,阿里雲 등)에서 CentOS 7 서버를 구매해야 합니다. 이教程에서는 CentOS 7 환경을 기준으로 설명합니다.

2. Python 3 설치

2.1 소스 코드 다운로드 및 컴파일

# Python 3.6 소스 코드 다운로드
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz

# 압축 해제
tar -xvf Python-3.6.0.tgz

# 컴파일 전 설정
cd Python-3.6.0
./configure --prefix=/usr/local/python3

# 빌드 및 설치
make && make install

2.2 심볼릭 링크 생성

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

2.3 pip3 설정

환경 변수 PATH에 Python 경로를 추가합니다:

export PATH=$PATH:/usr/local/python3/bin

3. pip3 수동 설치

pip3가 없는 경우 수동으로 설치해야 합니다:

# 설치 스크립트 다운로드
wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-9.0.1.tar.gz

# 압축 해제
tar -zxvf pip-9.0.1.tar.gz

# 빌드 및 설치
cd pip-9.0.1
python3 setup.py build
python3 setup.py install

참고: pip3는 docker-compose 설치에 필수적입니다.

4. Docker 설치

4.1 필수 패키지 설치

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

4.2 Docker 저장소 설정

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4.3 Docker Engine 설치

sudo yum install docker-ce docker-ce-cli containerd.io

4.4 Docker 서비스 시작

sudo systemctl start docker
sudo systemctl enable docker

4.5 설치 확인

sudo docker run hello-world

이 명령어가 정상적으로 실행되면 Docker 설치가 완료된 것입니다.

5. QingdaoU OJ 배포

5.1 필수 의존성 설치

# CentOS 기준
sudo yum install -y vim python-pip curl git

# docker-compose 설치
pip install docker-compose

문제 해결: CentOS에서는 apt-get 명령이 기본으로 지원되지 않습니다. apt-get을 yum으로 대체하여 사용하세요.

5.2 OJ 배포

# 디스크 여유 공간이 충분한 디렉토리에서 실행
git clone -b 2.0 https://github.com/QingdaoU/OnlineJudgeDeploy.git
cd OnlineJudgeDeploy

# 컨테이너 실행
docker-compose up -d

설치 시간: 네트워크 속도에 따라 5~30분 정도 소요됩니다.

5.5 설치 확인

docker ps -a

모든 컨테이너 상태가 healthy인지 확인합니다. unhealthy 또는 Exited 상태가 있다면 재시도해야 합니다.

6. 포트 및 방화벽 설정

6.1 방화벽 관리

# 방화벽 시작
sudo systemctl start firewalld

# 방화벽 중지
sudo systemctl stop firewalld

# 방화벽 상태 확인
sudo systemctl status firewalld

6.2 포트 개방

# HTTP 포트 (80) 개방
sudo firewall-cmd --add-port=80/tcp --permanent

# HTTPS 포트 (443) 개방
sudo firewall-cmd --add-port=443/tcp --permanent

# 컨테이너 내부에서 8080 포트 사용
sudo firewall-cmd --add-port=8080/tcp --permanent

# 방화벽 재시작
sudo firewall-cmd --reload

# 개방된 포트 목록 확인
sudo firewall-cmd --list-all

주의: --permanent 옵션은 영구 적용을 의미합니다. 이 옵션이 없으면 서버 재시작 후 설정이 초기화됩니다.

6.3 클라우드 보안 그룹 설정

클라우드 서비스 제공업체의 콘솔에서 보안 그룹 Inbound 규칙에 다음 포트를 추가해야 합니다:

  • 22 (SSH)
  • 80 (HTTP)
  • 443 (HTTPS)
  • 8080 (OJ 백엔드)

7. 접속 및 사용

설치가 완료되면 웹 브라우저에서 서버 IP로 접속합니다:

  • 프론트엔드: http://서버IP
  • 관리자 페이지: http://서버IP/admin

기본 관리자 계정:

  • 사용자명: root
  • 비밀번호: rootroot

보안 권장사항: 최초 접속 후 즉시 비밀번호를 변경하세요.

추가 문서는 공식 문서를 참고하세요.

8. 참고 자료

태그: online-judge linux CentOS docker python

5월 31일 22:48에 게시됨