Nginx+tornado+flask(CTFd)的网站搭建

简单地搭建一个CTF平台(包括一些简单的优化)

只是简单的搭建一个ctf平台,也没有对平台做大量的改写(能用稳定的水平).期间尝试过很多的搭配,比如apache+ gevent+flasknginx+uwsgi+flask, nginx+tornado+flask. 发现第三种最容易配置,且性能相对较好。如果可以的话,还是想把CTFd改写为tornado。毕竟tornado的异步架构性能还是很强的。

我们先把整个流程分为三步:

安装

  • 服务器基础环境配置
    • ubuntu
    • python3
    • redis
    • 就先不上mysql了
  • nginx
    • 网站教程很多,下面再给出具体配置。
  • tornado
    • pip install tornado
  • flask(CTFd)
    • github地址CTFD-github
    • 找一个合适的目录,推荐/var/www/html
    • 可以选择搭建一个虚拟环境venv,在里面搭建 tornado和flask的环境,tornado命令照旧,ctfd跟着 requirement.txt
      安装就好了 pip install -r requirements.txt
  • 到现在,我们已经有了所需要的东西了,接下来就快速搭建一个CTFd平台

搭建

大致的流程是:先用nginx转发流量到tornado里,再由tornado转发流量到flask

nginx

  • /etc/nginx/sites-enabled 文件夹里面新建一个 ctfd.conf文件 (ctfd网站的nginx配置文件)。下面是代码
      server{
           listen 8000; # 端口随意你,如果搭在服务器上记得看服务器端口是否开放
           server_name 120.77.246.8 # 填你服务器的ip
           charset     utf-8;
           client_max_body_size 75M;
           root /var/www/html/CTFd;  # 这里写CTFd平台的根目录,取决于个人具体情况

           location / {
               proxy_pass http://localhost:5000;  # 转发到本地的这个端口,之后会解释,这个是tornado开放的端口
           }
           location /static {
               root /var/www/html/CTfd/CTFd/themes/core/static/;  # 静态文件走这边,nginx自己处理静态文件贼快
           }
       }
  • nginx按照上面配置文件就基本没问题了,如果要修改nginx的配置文件,记得重启服务 nginx -s reload

tornado

tornado是一个异步架构的web框架,由于他的异步架构,它可以承受很高的并发量,在python的著名web框架中,性能表现上可谓是遥遥领先,比django和flask都要出色很多。但我们这里不用tornado做网站,而是用它做个桥梁,连接nginx和flask.在ctfd根目录文件夹下,新建一个文件 run.py,下面是源代码。
还记得刚开始nginx配置时候的转发的地址 http://localhost:5000吗?其实就是在这里设置的.

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
#导入flask项目
from manage import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000,address='127.0.0.1') #对应flask的端口 
IOLoop.instance().start()

#如果要开启多进程模式用下面的代码,不过仅在linux下
# http_server = HTTPServer(WSGIContainer(app))
# http_server.bind(5000,address='127.0.0.1')
# http_server.start(0)
# IOLoop.instance().start()

flask

单单不优化,在搭建上面,flask需要改动的很少,只需要改动一下manage.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
#from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from CTFd import create_app

app = create_app()

#manager = Manager(app)
#manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    app.run()

好了,现在我们已经完成了80%的任务了,nginx服务开启,
我们只需要敲下这行命令 nohup python run.py log.txt > nohup.out 2>&1 &,我们的平台就上线了
访问一下服务器加特定端口就OK了

接下来就是一些网站优化的步骤了,我们将从nginx,tornado,flask三个方面同时入手.

优化

我先去打CS1.6了