去年看到不少高校都有自己的ctf练习平台,就想着给学校社团也搭一个,期间也尝试过fbctf,界面确实够炫酷,可就是太臃肿,就想着试试CTFd,测试一段时间,觉着还算稳定,就把折腾的思路记录一下,免得大家多走弯路。

Flask安装

需求的环境是要能使用apt的(ubuntu或者debian之类)

以下全部在ubuntu16.04下测试

  1. 安装git

    1
    sudo apt install git
  2. 安装pip

    1
    sudo apt install python-pip
  3. 安装Flask

    1
    sudo pip install Flask
  4. 下载&安装&运行CTFd

    1
    2
    3
    4
    sudo git clone https://github.com/isislab/CTFd.git
    cd CTFd
    sudo ./prepare.sh
    sudo python serve.py

但是,看各位师傅说这样直接运行性能很差,所以也可以用gunicorn

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

至此平台就搭建完成了,在浏览器访问你的服务器公网ip:4000就可以进入了.

Nginx + uwsgi

看画船师傅说flask和gunicorn在低配服务器上性能不好(官方也说只能用来测试),就折腾了一下Nginx + uwsgi

  1. 安装nginx&uwsgi

    1
    2
    sudo apt install nginx
    sudo pip install uwsgi
  2. 配置nginx

    在/etc/nginx/sites-available/目录,创建一个站点文件(删除default文件)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    server {
    listen 80;
    server_name www.site.com;
    location / {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/uwsgi.sock;
    }
    }

    cp文件到/etc/nginx/sites-enable/下(删除default文件)

  3. 运行

    切换到CTFd目录下

    1
    2
    service nginx start
    sudo uwsgi -s /tmp/uwsgi.sock -w "CTFd:create_app()"

    访问站点,若502错误

    1
    sudo chmod 777 /tmp/uwsgi.sock
  4. 启动/停止一键脚本(画船师傅的)

    start.sh

    1
    2
    3
    sudo nohup uwsgi -s /tmp/uwsgi.sock -w "CTFd:create_app()"&
    service nginx start
    sudo chmod 777 /tmp/uwsgi.sock

    stop.sh

    1
    2
    ps -ef | grep uwsgi | grep -v grep | awk '{print $2}' | xargs kill -9
    service nginx stop


参考:

qcloud

CTFd搭建CTF平台

CTFd折腾笔记

Python Web(mainly Flask)环境折腾小记