개요
이 가이드는 리눅스 환경에서 온라인 저지 시스템을 처음 구축해보는 초보자를 위한教程입니다. 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
보안 권장사항: 최초 접속 후 즉시 비밀번호를 변경하세요.
추가 문서는 공식 문서를 참고하세요.