假期要做点简单的培训需要一个平台放题,在考虑再三后还是选择了CTFd .部署没有采用官方推荐的gunicorn而用了tornado,为了利用多核性能前面加了Nginx做反向代理,其后运行四个Tornado实例。
系统: Centos7.3
安装前准备工作
因为要用到非正常端口还懒所以先关闭SELinux
setenforce 0
编辑/etc/sysconfig/selinux
修改SELINUX=disabled
安装必要软件
sudo yum install epel-release
sudo yum install python python-pip
安装CTFd及所需组件
首先clone CTFd到本地
git clone https://github.com/CTFd/CTFd.git
安装所需python库
切换到CTFd目录下sudo pip install -r requirements.txt
安装并配置Tornado
- 安装
sudo pip install tornado
修改CTFd启动脚本
修改serve.py
内容为:
python serve.py
启动,可以本机wget一下8000端口看是否成功访问,这里由于还没添加防火墙规则外界无法访问.
利用supervisor控制Tornado进程
安装supervisor
sudo pip install supervisor
用
echo_supervisord_conf
创建默认配置文件sudo sh -c "echo_supervisor_conf > /etc/supervisord.conf"
由于有重定向这里不能直接使用sudo echo_supervisor_conf > /etc/supervisord.conf
,因为sudo会只执行了重定向前面的命令,而需要利用sh -c "command"
来执行。每次都要打错一边T。T向配置文件中添加进程组
12345678910111213[program:ctfd]command=python /home/leommxj/CTFd/serve.py --port=80%(process_num)02ddirectory=/home/leommxj/CTFdprocess_name = %(program_name)s%(process_num)dautorestart=trueredirect_stderr=truestdout_logfile=/home/leommxj/CTFd/log/tornado.logstdout_logfile_maxbytes=500MBstdout_logfile_backups=50stderr_logfile=/home/leommxj/CTFd/log/tornado.logloglevel=infonumprocs = 4numprocs_start = 1通过传入port参数控制端口号,这里生成四个进程分别用 8001-8004四个端口
启动supervisord
supervisord
查看进程状况supervisorctl status
运行正常如下1234ctfd:ctfd1 RUNNING pid 12451, uptime 1:27:34ctfd:ctfd2 RUNNING pid 12452, uptime 1:27:34ctfd:ctfd3 RUNNING pid 12453, uptime 1:27:34ctfd:ctfd4 RUNNING pid 12454, uptime 1:27:34
安装并配置Nginx反向代理
安装
sudo yum install nginx
编辑
\etc\nginx\nginx.conf
删除其中原有的80端口服务新建
\etc\nginx\conf.d\ctfd.conf
配置反向代理1234567891011121314151617upstream tornado{server 127.0.0.1:8001;server 127.0.0.1:8002;server 127.0.0.1:8003;server 127.0.0.1:8004;}server{listen 666;location /{proxy_pass_header Server;proxy_set_header Host $http_host;proxy_redirect off;proxy_set_header X-Real_IP $remote_addr;proxy_pass http://tornado;}}防火墙添加规则开放端口,centos7默认使用firewall-cmd而不是iptables了,尝试一下新东西.
firewall-cmd --permanent --add-port=666/tcp
配置完毕,不太懂ctfd静态文件位置没有配置nginx直接处理静态文件,有时间加上.