前面的壁画
战队招新赛要打了,这几天也是忙着尝试Docker环境的部署,本来也没什么问题,从github上面拉一下就好了,自己起环境总是出现一堆乱七八糟的问题,很无解。
感谢 @Richard 大手子的帮忙,最后算是搭起来了这个平台,这里记录一下自己搭建环境以及踩坑的过程,以及自己后续运维该环境的一些心得吧。
CTFd github 地址: https://github.com/CTFd/CTFd
CTFd docs地址: https://docs.ctfd.io/
搭建
这里使用的CTFd版本为3.1.1,一切以该版本为准。
本地直接起服务
这是我在docker起不来之后尝试的,大概遇到的坑都是系统兼容问题。
例如Ubuntu 20.04 删掉了 python2 的 pipe,导致安装 requirements.txt的时候找不到pip命令。
解决方法:https://linuxize.com/post/how-to-install-pip-on-ubuntu-20.04/
还有一些是关于 requirements.txt 文件里面需要的python库函数直接没有的问题,有些库太新了,这就有点无解,去弄轮子安装或者调低版本号(其实也不行,可能会有版本冲突)。
Docker起CTFd
Docker 当然才是重点,我是用opensuse发行版本起的Docker。这里假设你是一台没有安装任何东西的白板Linux的发行版本,那么你需要:
前戏
这里用的是opensuse,如果是例如Ubuntu请使用 apt
更新源:
$ sudo zypper update
$ sudo zypper upgrade
安装git及拉取CTFd:
$ sudo zypper install git
$ git clone https://github.com/CTFd/CTFd.git
起Docker
下载完成后,进入目录启动服务:
$ docker-compose up -d
会需要拉取镜像,以及根据 requirements.txt 安装 python 需要的一些配置文件库。
如果你是需要在本地起服务,那么请先确保本地有python-pip2环境,然后运行以下:
$ pip install -r requirements.txt
$ python serve.py
具体的在github仓库里面的README文档已经有了具体描述。
踩过的一些坑
- 对于clone下来的CTFd文件,根据自身需求进行修改。例如Dockerfile换源等等(源原为debian)。没有科学上网的时候,请别相信自己的网速。
- 遇到如下问题:
2020-09-28T14:09:41.864089908Z [2020-09-28 14:09:41 +0000] [31] [INFO] Booting worker with pid: 31 2020-09-28T14:09:43.933141974Z [2020-09-28 14:09:43 +0000] [32] [INFO] Booting worker with pid: 32 2020-09-28T14:09:44.317436676Z [2020-09-28 14:09:44 +0000] [33] [INFO] Booting worker with pid: 33 2020-09-28T14:09:44.795236476Z [2020-09-28 14:09:44 +0000] [34] [INFO] Booting worker with pid: 34
......
这篇文章中详细提出了解决方案:
将 requirements.txt 中的 gevent
版本号删除。
猜测可能是库源的问题,这个问题一度卡了我两天,很自闭。
运维
setup
起了之后进入默认的setup
填写赛事名称、赛事简介以及团队赛或者单人赛。
管理员名称、邮箱以及密码。
调整主题风格以及颜色。
赛事开始以及结束时间
MajorLeagueCyber(MLC)是由CTFd开发人员编写和维护的网络安全事件跟踪程序。用来统计数据,实时分享等等。
去官网注册一个号,创建及设置赛事。
选择finish,环境就起好了。
关于admin界面的一些介绍
有了root权限之后就可以做一些奇奇怪怪怪的事情啦~
statistics
查看CTFd的一些状态,
查看多少个用户注册,以及已经上线的总分和题目数量信息。
每一个分数的得分情况等等,这些具体什么样我现在也不是很清楚,等上线了就有图片了,再来更新吧。
Notifications
公告,可以编辑公告的类型,是否有提示音等等。注意公告本身并不支持Markdown类型。
Pages
添加CTFd的新页面,动态添加,改后台代码同理。
目前倒没发现有再添加其他页面的需求,等有了再来试试吧。
Users & ScoreBoard & Challenges
管理用户、得分、题目的界面。
Submissions
管理提交信息的页面,包括错误提交以及正确提交。
Configuration
网站的一些配置信息。
踩过的一写坑
无法删除题目、用户甚至公告?
原来是学校内网限制了无证书的delete操作……上了证书之后就好了。
修改/添加页面?
在page进行操作,例如删掉广告等等。注意要用html代码书写,也可以放点小彩蛋什么的。
比赛开始前先上题
上完题之后,设置比赛开始时间,就可以在比赛开始的时候直接让一部分可见。
至于后期上的题,可以在题目状态里设置成Hidden。