Ubuntu16.04-CTFd平台搭建

配置环境:阿里云服务器ubuntu 16.04,python3

欢迎来平台玩~http://ctf.dropsec.xyz

下载CTFd

下载git:

apt-get install git

克隆:

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

安装配置虚拟环境、python包

下载pip

apt-get install python3-pip

安装virtualenv:

apt install python-virtualenv

安装virtualenvwrapper,方便管理虚拟环境:

pip3 install virtualenvwrapper

vim ~/.bashrc

在最后(shift+g)添加

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
# 虚拟环境存储的目录
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

source ~/.bashrc

用回官方的源,执行命令

vim ~/.pip/pip.conf

把配置信息都注释掉,让pip用回默认的官方源。

创建Python3环境,执行命令,

mkvirtualenv --python=/usr/bin/pyhton3 环境名

查看虚拟环境:

workon

使用虚拟环境:

workon 环境名称

退出虚拟环境:

deactivate

安装所需的包:

cd CTFd

python3 -m pip install -r requirements.txt 

启动Flask

cd CTFd

./prepare.sh

python3 serve.py

可在本地

curl 127.0.0.1:4000

查看启动是否成功

安装gunicorn

pip install gunicorn

启动服务:

cd /var/www/CTFd

gunicorn --bind 0.0.0.0:4000 -w 5 "CTFd:create_app()"

表示绑定端口号4000,有5个进程来处理请求

使用gunicorn启动服务,公网访问响应很慢

配置nginx

1.安装

apt-get install nginx

启动nginx:

systemctl start nginx

2.配置

vi /etc/nginx/sites-available/default

配置内容:

server{
   listen 90; # 端口不冲突就行,稍后映射此端口即可在公网用此端口访问服务
   server_name x.x.x.x # 填你服务器的ip
   charset     utf-8;
   client_max_body_size 75M;
   root /var/www/CTFd;  # 这里写CTFd平台的根目录,取决于个人具体情况

   location / {
       proxy_pass http://localhost:4000;  # 转发到本地的这个端口,这个是gunicorn开放的端口
   }
   location /static {
       root /var/www/CTfd/CTFd/themes/core/static/;  # 静态文件走这边,nginx自己处理静态文件贼快
   }
}

启动服务

启动守护进程gunicorn:

nohup gunicorn --bind 0.0.0.0:4000 -w 5 "CTFd:create_app()" &

启动nginx:

systemctl start nginx

即可在公网的90端口访问自己的服务

运行后你可以通过查看当前文件下的nohup.out文件来查看运行状况

端口占用

若启动失败,可能端口正被占用

1.查看端口及软件

netstat -antp

2.杀掉进程

kill 进程号

更换主题

将主题文件放到/CTFd/theme下,之后用管理员账号登录,在Config选项中切换主题即可;主题更换后,nginx的配置文件中配置的static路径也要更改

优化

发现请求的时候总是有个访问/static/user.css的404错误,解决方法:

找到CTFd/CTFd下的views.py文件,将下面的代码注释掉:

@views.route("/static/user.css")
def custom_css():
    """
    Custom CSS Handler route
    :return:
    """
    return Response(get_config("css"), mimetype="text/css")

在打开主题文件,这里是theme/hacker-theme/templates,找到base.html,搜索views.custom_css,将下面这一行删除掉即可(下面url_for('views.custom_css')两边有两个大括号,但发布时会显示markdown语法错误,就写成一个了)

link rel="stylesheet" type="text/css" href="{ url_for('views.custom_css') }"

测试的时候有的访问链接端口老是被重定向到80端口出错,最后发现是nginx文件配置有冲突,在这里感谢朴俊杰学长的耐心教导!!!


参考链接:

https://blog.csdn.net/weixin_42878826/article/details/81451668

https://blog.csdn.net/CC1991_/article/details/84944602

http://www.xalex.cn/blog/Typecho/index.php/archives/33/

https://www.andseclab.com/2018/07/23/nginxtornadoflaskctfd的网站搭建