下载CTFd代码

CTFd的仓库代码下载地址:https://github.com/CTFd/CTFd/releases
写这篇文章的时候最新版本是CTFd-3.4.0版本,因此以该版本为例。

此处我下载的是第一个.zip文件

上传代码至Centos7服务器并解压

如果你下载的是.zip文件请使用命令unzip CTFd-3.4.0.zip进行解压缩
如果提示如下内容,说明没有安装unzip工具,请先执行命令yum install -y unzip安装unzip工具,再进行解压缩

-bash: unzip: 未找到命令

如果你下载的是.tar.gz文件,请使用命令tar -zxvf CTFd-3.4.0.tar.gz进行解压缩

安装运行环境

首先需要检查的是你的python环境,CTFd采用python3编写。
请先尝试执行命令python,如果出现的是Python 2.x.x说明python是python2的环境,执行输入exit()后回车退出。
再尝试执行python3,如果能够出现Python 3.x.x则说明存在python3的环境。后续我们将使用python3进行相关操作。
如果输入python3出现如下信息,则说明没有python3的环境,我们需要先进行python3环境的安装。

-bash: python3: 未找到命令

安装python3

如果python3已经安装,请跳过此步。
python3截至到本文章的编写日期来看,推荐安装CTFd开发所用的python版本,这里我曾用过的版本是python3.7.x,没有出现问题,不推荐使用太高的版本,太高的版本在一些语法上可能会略有不同。
你可以选择从Python的官网中下载python进行安装,也可以直接使用Centos7的yum进行安装。
为了方便,我这里直接使用yum进行安装,其他安装方式请看其他文章。
执行命令yum install -y python3进行python3的安装。(此处yum默认给我安装的是python3.6.8版本)
安装完成后执行python3命令,验证是否能正常使用。yum安装会自动将pip工具进行安装。
执行pip3 -V验证pip3工具的安装情况。

安装CTFd依赖库(模块)

首先进入之前解压的CTFd-3.4.0文件夹(即CTFd项目根目录)
在进行后续步骤之前,建议先使用yum安装以下几个依赖,避免pip3安装过程中出现一些问题。
执行如下个命令:
yum install -y libevent-devel
yum install -y python3-devel
yum install -y gcc

然后执行命令pip3 install -r requirements.txt
等待安装完成。

该命令安装期间通常会出现一些安装失败的情况,一般是有两种类型:
1、网络不通畅导致的安装失败——有一些依赖库,如果你默认使用pip3去安装的话,可能会请求一些国外的源,此时可以尝试先将pip源更换为国内的镜像源,然后再执行命令安装。(如何过呢更换源,自行查阅相关资料,不在本篇文章范围)
2、缺少相关的依赖文件和程序,如常见的gcc编译失败,缺少.c或.h文件等

运行CTFd

进入到之前解压的CTFd-3.4.0文件夹(即CTFd项目根目录)
然后执行python3 serve.py即可默认在本地进行启动了。
默认地址127.0.0.1
默认端口4000

如果你想让别人能访问,通常我们需要将127.0.0.1换成0.0.0.0
我们使用vim打开serve.py文件,找到最下面一行
app.run(debug=True, threaded=True, host="127.0.0.1", port=args.port)
将其改成你需要的即可,对应的参数解释如下。
debug:是否开启debug模式
threaded:是否开启线程模式
host:主机地址(允许其他机器访问改成0.0.0.0)
port:主机端口
将其改成如下:
app.run(debug=False, threaded=True, host="0.0.0.0", port=8080)
然后执行python3 serve.py即可运行CTFd。
浏览器访问地址 http://你服务器地址:8080/ 即可
我的样例:http://192.168.234.136:8080/
至此,成功访问CTFd,并进入到了CTFd的安装界面

CTFd汉化

Github搜索CTFd汉化,找到CTFd_chinese_CN项目(该汉化项目汉化覆盖率高,并且更换优化了官方CDN地址,解决了访问静态资源无法加载或加载过慢问题)
https://github.com/Gu-f/CTFd_chinese_CN
下载对应版本的CTFd汉化,此处我的CTFd是3.4.0版本,因此我下载的是Release中的CTFd-CN_V1.1.1-V3.4.0.zip

下载后将其上传到服务器,然后执行命令unzip CTFd-CN_V1.1.1-V3.4.0.zip进行解压缩
此时我服务器中的文件和文件夹如下:

CTFd-3.4.0: 是我们CTFd原始的代码文件
CTFd-V3.4.0:是我们下载的汉化的代码文件
然后执行命令/bin/cp -rf CTFd-V3.4.0/* CTFd-3.4.0/将汉化的代码文件覆盖到CTFd中。

此时再执行命令python3 serve.py运行CTFd,刷新浏览器,即可看到汉化后的CTFd界面

后续

如果仅仅是少数人,或自己的小团队,去使用CTFd,以上的安装步骤,和python3 serve.py的运行方式已经足够用了。
如果是面向的人数比较众多的。建议使用gunicorn(Python-WSGI)来进行高并发、高性能的优化处理。

gunicorn高并发优化

gunicorn常用参数如下:

-c CONFIG, --config=CONFIG 设定配置文件。
-b BIND, --bind=BIND 绑定的端口,建议使用 HOST:PORT。
-w WORKERS, --workers=WORKERS 设置工作进程数。
-k MODULE 选定异步工作方式使用的模块。

比较关键的是 -w 参数,表示工作进程数,建议的设置是cpu核心数*2+1,可根据实际情况进行调整。

然后,项目根目录下执行以下命令进行启动:
gunicorn -w 3 -b 0.0.0.0:8080 "CTFd:create_app()"
接下来就可以愉快玩耍了。
(ps:个人感觉使用gunicorn后,如果gunicorn不太稳定或服务器性能不太好,并没有明显的质的提升,相反,给人的使用体验并没有直接使用python3 serve.py丝滑流畅)
END