Skip to main content

DMOJ 웹 사이트 설치

이 섹션에서는 DMOJ 웹 사이트 설치 메뉴얼을 알려드립니다.


설치 필요 조건

DMOJ 웹사이트를 설치하려면 아래의 환경이 필요합니다.

Docker와 Docker Compose가 설치되지 않았다면, 아래 링크에서 설치 방법을 확인하세요.


OJ Docker

설치는 리눅스 환경을 기본으로 합니다.

파일 다운로드

설치가 완료되면 자신이 원하는 경로에 파일을 받습니다.

$ git clone --recursive https://github.com/jxxn92/oj_docker.git

$ cd oj_docker

아래 같은 파일들이 존재합니다.

📦oj_docker
┣ 📂.git
┣ 📂oj
┣ 📜.gitmodules
┣ 📜README.md
┣ 📜config.js
┣ 📜local_settings.py
┗ 📜uwsgi.ini

디렉토리를 이동합니다.

$ cd oj

설정 방법

oj 디렉토리로 이동하면 수정해야 하는 파일들이 존재합니다.

📦oj
┣ 📂base
┣ 📂bridged
┣ 📂celery
┣ 📂environment
┃ ┣ 📜mysql-admin.env
┃ ┣ 📜mysql.env
┃ ┗ 📜site.env
┣ 📂mathoid
┣ 📂media
┣ 📂nginx
┃ ┗ 📂conf.d
┃ ┃ ┗ 📜nginx.conf
┣ 📂pdfoid
┣ 📂problems
┣ 📂repo
┣ 📂site
┣ 📂texoid
┣ 📂wsevent
┗ 📜docker-compose.yml

환경 변수 설정

아래 파일들의 <...> 부분을 수정해야 합니다.

mysql-admin.env

데이터베이스의 루트 비밀번호를 지정합니다.

MYSQL_ROOT_PASSWORD=<password>

mysql.env

데이터베이스와 유저 정보는 고정이며, <password> 부분만 수정합니다.

MYSQL_DATABASE=dmoj
MYSQL_USER=dmoj
MYSQL_PASSWORD=<password>

site.env

사이트의 도메인 주소를 <host> 칸에 적고, SECRET_KEY를 생성하여 입력합니다.

HOST=<host>
DEBUG=0
SECRET_KEY=<secret key>

nginx.conf

<접속주소> 부분에 자신의 도메인 주소를 입력합니다.

listen       80;
listen [::]:80;
server_name <접속주소>;

초기 설정

현재 경로가 oj인지 확인한 후 초기 설정을 진행합니다.

$ pwd

디렉토리가 oj에 위치해야 합니다. 예) /home/user/docker/oj_docker/oj

설정 파일과 기본 폴더를 생성 및 초기화합니다.

$ ./scripts/initialize

media 폴더와 problems 폴더가 생성됩니다.


이미지 빌드 및 실행

1. Docker 이미지 빌드

$ docker compose build

2. 사이트 컨테이너 실행

$ docker compose up -d site

3. 데이터베이스 마이그레이션

$ ./scripts/migrate

4. 정적(static) 파일 생성

$ ./scripts/copy_static

5. 초기 데이터 로드

$ ./scripts/manage.py loaddata navbar
$ ./scripts/manage.py loaddata language_small
$ ./scripts/manage.py loaddata demo
데이터 로드 명령어설명
navbar내비게이션 바 설정 로드
language_small기본 언어 데이터 로드
demo데모 데이터 로드

실행

모든 설정이 완료되면 다음 명령어로 서비스를 실행합니다.

$ docker compose up -d

부가 설명

Migration (데이터 변경 시)

DMOJ는 Django 기반이므로 데이터 업데이트 시 마이그레이션이 필요할 수 있습니다.

$ ./scripts/migrate

Static 파일 변경 시

정적 파일을 변경한 경우, 다시 빌드해야 합니다.

$ ./scripts/copy_static

사이트 업데이트 후 재빌드

사이트의 필수 구성 요소가 변경된 경우, 재빌드해야 합니다.

$ docker compose up -d --build base site celery bridged wsevent

정적 파일만 변경된 경우, 컨테이너만 재시작하면 됩니다.

$ docker compose restart site celery bridged wsevent

수동 마이그레이션 실행 (필요 시)

$ docker exec -it <사이트 컨테이너 이름> bash

접속 후:

$ python3 manage.py makemigrations

마무리

이제 DMOJ 웹사이트가 정상적으로 실행됩니다! 🎉