目錄:
前言:
Docker安裝簡易方便,但在Docker中跑cms會使效率降低,可能會導致本來不會超時的code變成TLE,另外,如果參賽者眾多也建議使用直接安裝在電腦上的方式去運行CMS,比較有效率且保險。
主機環境:
Cgroup Version : 1 (cms只允許v1)
查看Cgroup版本
sudo docker info | grep 'Cgroup Version'
如果是2要切換到1。
sudo sed -i '/GRUB_CMDLINE_LINUX=/c\GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0"' /etc/default/grub
sudo update-grub
sudo reboot
Step. 1 更新所有套件
sudo apt update && sudo apt upgrade -y
Step. 2 安裝docker compose
sudo apt install docker-compose -y
Step. 3 下載cms
git clone https://github.com/erichung1113/cms.git && cd cms
Step. 4 執行docker compose
sudo docker-compose up -d
Step. 5 建立Admin帳號
sudo docker exec -t cms sudo cmsAddAdmin admin
接著打開瀏覽器並輸入以下網址就可使用啦
參賽者介面:localhost:8888
管理員介面:localhost:8889
計分板:localhost:8890
報錯有分兩種,一種是docker的報錯,另一種則是cms的報錯。遇到前者可以把Step 4的-d
參數拿掉,docker就會顯示詳細的log。遇到後者則可以先進入container並輸入cmsLogService
即可看到cms詳細的log。
進到管理員介面後,預設的比賽是這場,你需要在裡面找到Solution(在每一題的sol資料夾底下),並上傳cms測試各種語言是否能編譯及執行。
另外,如果想要切換比賽可以執行以下步驟 :
Step. 1 修改docker file
vim docker-compose.yml
在第38行找到cmsResourceService -a 1;
,並把最後面的數字改成要開啟的比賽編號,編號為操作管理員介面進到該比賽後,網址列最後的數字。
Step. 2 執行docker compose
(可直接執行,不需暫停container)
sudo docker-compose up -d
DB會存在本機上,你把container刪掉重新compose後比賽還是會在,如要完全刪除比賽請執行以下指令,執行前請三思(docker中的所有比賽將會被完全刪除)。
sudo rm -rf /cms_docker_postgresql_data