Hi there!

I am a student studying computer science.

Domjudge

Domjudge 7.3 - 2nd (Mariadb, DOMserver Docker container실행)

만능성구 2021. 2. 13. 17:43
728x90

Domjudge 7.3 - 1st에서 AWS EC2 ubuntu 인스터스를 시작하고 Docker engine을 설치했습니다.

 

이어서 Domjudge의 docker image를 실행시키겠습니다.

자세한 사항은 Docker hub에 있는 공식 메뉴얼을 참고하세요.

Domjudge Docker hub : hub.docker.com/r/domjudge/domserver/

 

Docker Hub

 

hub.docker.com

MariaDB Container를 먼저 실행시키고 Domserver Container를 실행시킵니다.

docker run 명령어로 각 컨테이너 실행시키고 뒤에 따라오는 매개변수들을 이용해서 간단하게 설정합니다.

docker run에 대한 간단한 옵션들은 아래 표를 참고하시고 자세한 사항은 docker run --help로 확인할 수 있습니다.

옵션 설명
-i, -t -interactive  -tty  i와 t는 터미널 입력을 위한 옵션으로 일반적으로 -it  혹은 -i -t
-d detached mode 흔히 말하는 백그라운드 모드
--name 컨테이너 이름 설정
-p  호스트와 컨테이너 포트의 연결 : 포워딩
-e 컨테이너 내에서 사용할 환경변수 설정
-rm 프로세스 종료시 컨테이너 자동 삭제
--link 컨테이너 연결 [컨테이너명:별칭] 
-v 호스트와 컨테이너의 디렉토리 연결 (마운트) 
-e 컨테이너 내에서 사용할 환경변수 설정 

 (출처 : swiftymind.tistory.com/82)

MariaDB container

$ sudo docker run -it --name dj-mariadb -e MYSQL_ROOT_PASSWORD=rootpw -e MYSQL_USER=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_DATABASE=domjudge -p 13306:3306 mariadb --max-connections=1000

공식 메뉴얼에 있는 MariaDB Container 실행 명령어를 하나씩 보면 아래와 같이 설정되어 있습니다. 비밀번호 같은 경우 원하면 수정해서 사용할 수 있다.

docker run
-it
--name dj-mariadb                              
-e MYSQL_ROOT_PASSWORD=rootpw
-e MYSQL_USER=domjudge
-e MYSQL_PASSWORD=djpw
-e MYSQL_DATABASE=domjudge
-p 13306:3306
mariadb
--max-connections=1000

 

 

저느 공식 메뉴얼에서 제공해준 명령어에서 대회의 시간을 한국시간에 맞추기 위해 -v 옵션을 추가해주고 백그라운드에서 실행되도록 옵션을 -itd로 해주었습니다.

$ date
$ sudo timedatectl set-timezone Asia/Seoul

ubuntu host의 시간이 한국 시간이 아닌 경우 date로 확인해보고 위의 명령어로 변경해줍니다.

이제 mariadb container를 실행시킵니다.

$ sudo docker run -itd --name dj-mariadb -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=rootpw -e MYSQL_USER=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_DATABASE=domjudge -p 13306:3306 mariadb --max-connections=1000

$ sudo docker exec -it dj-mariadb bash

mariadb -u root -p

docker exec 명령으로 docker container안으로 들어가서 mariadb를 확인하면 domjudge 데이터베이스가 생긴 것을 확인할 수 있습니다. 이때 비밀번호는 위에 docker run 명령어에서 "-e MYSQL_ROOT_PASSWORD=rootpw" 이렇게 설정했었습니다.

DOMserver container

$ sudo docker run --link dj-mariadb:mariadb -it -e MYSQL_HOST=mariadb -e MYSQL_USER=domjudge -e MYSQL_DATABASE=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_ROOT_PASSWORD=rootpw -p 12345:80 --name domserver domjudge/domserver:latest

공식 메뉴얼에 있는 DOMserver container 실행 명령어를 하나씩 보면 아래와 같이 설정되어 있습니다.

docker run 
--link dj-mariadb:mariadb 
-it 
-e MYSQL_HOST=mariadb 
-e MYSQL_USER=domjudge 
-e MYSQL_DATABASE=domjudge 
-e MYSQL_PASSWORD=djpw 
-e MYSQL_ROOT_PASSWORD=rootpw 
-p 12345:80 
--name domserver domjudge/domserver:latest

이 밖에도 설정할 수 있는 환경변수는 아래와 같고 이에 대한 설명은 docker hub에서 확인할 수 있습니다.

출처 : https://github.com/DOMjudge/domjudge-packaging/blob/master/docker/domserver/Dockerfile

위의 환경변수 중에서 CONTAINER_TIMEZONE을 서울로 해서 추가해주고 port는 12345에서 80으로 수정해서 host의 80port로 설정하고 mariadb와 연결해서 시작합니다.

$ sudo docker run --link dj-mariadb:mariadb -it -e MYSQL_HOST=mariadb -e MYSQL_USER=domjudge -e MYSQL_DATABASE=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_ROOT_PASSWORD=rootpw -e CONTAINER_TIMEZONE=Asia/Seoul -p 80:80 --name domserver domjudge/domserver:latest

이렇게 정상적으로 실행이됩니다. 마지막에 보면 Initial admin passowrd와 judehost password를 알려줍니다. 

이것을 기록해두겠습니다.

 

DOserver로 접속하기 위해 EC2 인바운드 규칙을 수정해줍니다.

AWS EC2 consol로 가서 인스턴스를 선택한 다음 보안>> 보안그룹의 링크로 갑니다.

인바운드 규칙 편집.

HTTP로 위치무관으로 설정하고 규칙 저장합니다.

변경된 사항 확인하고 EC2 인스턴스의 http://public ip로 접속합니다.

이렇게 초기의 DOMjudge화면을 볼 수 있습니다.

우측 상단에 로그인 버튼을 눌러줍니다.

ID는 admin, Password는 위에서 기록해 놓은 admin password를 입력합니다.

기록해 놓지 않았다면 아래의 명령어로 초기 비밀번호를 확인할 수 있습니다.

$ sudo docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret

이렇게 관리자 페이지로 들어가서 대회를 설정할 수 있습니다.

728x90