?半夜留下清泪,谨记念我坎坷的搭建历程。

1.必要安装

sudo apt install git

这里报了错,是因为新装的ubuntu系统,没有对其进行update。

解决方案:sudo apt-get update

sudo apt install python-pip

安装pip。

sudo pip install Flask

安装Flask。

git clone https://github.com/CTFd/CTFd.git

下载ctfd,下载完毕后cd CTFd/

sudo ./prepare.sh

这里报了错:Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-V12h3w/zipp/

解决方案:参考了这个文章:戳我,又执行了一遍python -m pip install –upgrade pip命令。

解决一个又报了新的错误:ERROR: Package ‘setuptools’ requires a different Python: 2.7.12 not in ‘>=3.5’

setuptools>=45的版本都不再支持python2.7。virtualenv的pip还是默认地安装了setuptools的最新版本,需要手动设置setuptools版本<45。指定一下版本号重新安装setuptools即可。

解决方案:pip install setuptools==44.0.0

2.数据库连接

成功排错以后,安装mysql。参考了这个文章:戳我

mysql> create database ctfd;
exit;

然后修改CTFd/config.py文件,这里有个好大的坑我排了好久的错:

DATABASE_URL = "mysql+pymysql://数据库用户名:数据库密码@localhost:3306/ctfd"
SQLALCHEMY_DATABASE_URI = "mysql://数据库用户名:数据库密码@localhost/ctfd?charset=utf8"

执行sudo python serve.py,然后进入mysql。

use ctfd;
show tables;

查看tables是否有内容,有的话就成功连接啦。

修改一下数据库表的编码为utf-8,跟进网上教程就可以了。

USE ctfd;
ALTER TABLE alembic_version CONVERT TO CHARACTER SET utf8;
ALTER TABLE awards CONVERT TO CHARACTER SET utf8;
ALTER TABLE challenges CONVERT TO CHARACTER SET utf8;
ALTER TABLE config CONVERT TO CHARACTER SET utf8;
ALTER TABLE dynamic_challenge CONVERT TO CHARACTER SET utf8;
ALTER TABLE files CONVERT TO CHARACTER SET utf8;
ALTER TABLE flags CONVERT TO CHARACTER SET utf8;
ALTER TABLE hints CONVERT TO CHARACTER SET utf8;
ALTER TABLE notifications CONVERT TO CHARACTER SET utf8;
ALTER TABLE pages CONVERT TO CHARACTER SET utf8;
ALTER TABLE solves CONVERT TO CHARACTER SET utf8;
ALTER TABLE submissions CONVERT TO CHARACTER SET utf8;
ALTER TABLE tags CONVERT TO CHARACTER SET utf8;
ALTER TABLE teams CONVERT TO CHARACTER SET utf8;
ALTER TABLE tracking CONVERT TO CHARACTER SET utf8;
ALTER TABLE unlocks CONVERT TO CHARACTER SET utf8;
ALTER TABLE users CONVERT TO CHARACTER SET utf8;

参考:戳我,照做执行执行sudo python serve.py后,出现了以下错误:

linux ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)

解决方案:参考:戳我

3.公网访问

需要安装gunicorn。

pip install gunicorn
sudo gunicorn --bind 0.0.0.0:8000 -w 1 "CTFd:create_app()"

听EDS师傅的话一起研究了Nginx反向代理,

这里有个坑,映射到ip会跳转到ip/setup显示404,

解决方案:删掉如图所示这一行

最后,因为要在服务器一直开启靶场,也就是在后台执行命令:

nohup python serve.py && gunicorn --bind 0.0.0.0:8000 -w 1 "CTFd:create_app()" && echo 1 &

需要注意的是,在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。

ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

Ctrl+c
终止前台命令。

jobs
查看当前有多少在后台运行的命令。
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。