?半夜留下清泪,谨记念我坎坷的搭建历程。
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环境已知的列表中删除任务的进程标识。