리눅스, 그 두 번째 이야기 | 알고리즘 대회 운영을 위한 CMS 설치  By junukwon7

카테고리 없음|2020. 12. 29. 16:53
Language :

이 글은 언어로 작성되어 있습니다.
사용하실 언어를 선택하십시오.

This post is written in Language.
Select the language you want to use.

この文は言語で作成されています。
使用する言語を選択してください。


이 글은 문제해결 프로그래밍 대회 운영을 위한 시스템인 cms-dev를 설치하고 운영하는 방법에 대해 소개하는 글이다. 먼저 이전 글을 읽고 오기를 바란다.

chocobear.tistory.com/83

 

리눅스, 그 첫 번째 이야기 | 알고리즘 대회 운영을 위한 CMS 설치

정보과학 공부는 재미있다. 아름다운 알고리즘은 매우 유익하고 즐겁다. 하지만, 내가 어느 정도 경지에 올랐는지 알고 동기부여를 받으려면 경쟁이 필요하다. 그러니 PS 대회를 열자. CMS 소개

chocobear.tistory.com

DB 구성

cms를 비롯한 많은 사이트들은 데이터를 저장하고 관리하기 위해 이미 만들어져 있는 database를 이용한다. cms-dev는 poetgresql을 이용하므로 이를 구성하도록 하자. (이미 이전 설치 과정에서 같이 설치되었을 것이다.)

 

먼저 db 사용자로 로그인한다.

sudo su - postgres

 

이후 다음 명령어를 이용해 cmsuser를 만든다. 이때의 암호를 기억하도록 하자.

createuser --username=postgres --pwprompt cmsuser

 

다음 명령어를 이용해 cmsuser가 주인인 cmsdb를 만든다.

createdb --username=postgres --owner=cmsuser cmsdb

 

이제 권한을 설정한다.

psql --username=postgres --dbname=cmsdb --command='ALTER SCHEMA public OWNER TO cmsuser'
psql --username=postgres --dbname=cmsdb --command='GRANT SELECT ON pg_largeobject TO cmsuser'

 

CMS에 DB 연결

이제 우리는 cms와 db를 연결하기 위한 connection string을 손봐야 한다. 먼저 다음 명령어를 통해 cms.conf가 있는 곳으로 이동해야 한다.

cd /usr/local/etc

 

아마 cms.conf.sample 파일이 있을 것이다. 먼저 뒤에 .sample을 제거하여 cms.conf로 만들어 주자. 이후 이 파일을 열고 다음과 같이 connection string을 수정해야 한다.

59번 줄을 보자.

"database": "postgresql+psycopg2://cmsuser:your_password_here@localhost:5432/cmsdb",

여기서 your_password_here 부분에 앞서 DB구성에서 만들었던 cmsuser의 암호를 입력한다.

 

그리고, 만약 현재 cms를 돌리려고 하는 환경이 저사양이라면 worker의 수를 줄이는 것이 권장된다.

27번 줄을 보자.

"Worker":    [["localhost", 26000],
                ["localhost", 26001],
                ["localhost", 26002],
                ["localhost", 26003],

                        ...
 
                ["localhost", 26014],
                ["localhost", 26015]],

현재 26000~26015로 총 16개의 worker가 가동되도록 되어 있다. cpu 하나 당 worker 2개가 권장되므로 worker를 줄이도록 하자. 코어 수가 2개라면, 다음과 같이 수정하면 된다.

"Worker":    [["localhost", 26000],
                ["localhost", 26001],
                ["localhost", 26002],
                ["localhost", 26003]],

 

이외에도 cms.conf를 보면 cms 전반에 대한 옵션들이 숨어 있음을 확인할 수 있다. 심화된 구성에 대해서는 나중에 다루도록 하겠다.

 

만약 지금까지 아무런 문제가 없었다면, 다음 명령어를 통해 cms와 db를 연결할 수 있다.

cmsInitDB

 

CMS 시작

cms는 총 3개의 front-end page로 구성된다. 각각 contestWebServer, adminWebServer, rankingWebServer이다. 이 페이지들은 각각 8888, 8889, 8890번 포트에서 운영되며 이는 cms.conf를 수정하여 바꿀 수 있다.

각설하고, 우리는 먼저 관리자 계정을 만들어야 한다. 다음 명령어를 통해 관리자를 만들자.

cmsAddAdmin -p <계정 암호> <계정 이름>

 

이 계정은 관리자 페이지, 즉 adminWebServer에서만 쓰이는 계정임에 유의하라. 이제 다음 명령어를 통해 관리자 페이지를 시작하면 된다.

cmsAdminWebServer

 

만약 정상적으로 실행되었다면, 인터넷을 통해 127.0.0.1:8889 또는 <아이피 주소>:8889로 들어가 확인할 수 있다. 만들어 놓은 관리자 계정으로 로그인한 후, create new contest를 이용해 빈 contest를 하나 만들도록 하자.

 

이제 cmsAdminWebServer를 실행시켰던 shell에서 Ctrl+C를 눌러 종료하고, 다음 명령어를 입력하라.

cmsResourceService -a

 

이후 contest 목록에서 ID를 선택하면, cmsContestWebServer와 cmsAdminWebserver, cmsWorker 등 대회 운영에 필요한 모든 서비스가 함께 실행된다. (cmsRankingWebServer는 별도로 실행해야 하므로 다음에 다루도록 하겠다.)

 

이제 대회를 운영하면 된다.

댓글()