前言

目前CTFd平台的搭建教程网上有很多,但也有部分写的水,不够详细,跟着那些教程部署完多多少少还是会出现不少问题,从而导致部署失败,既浪费了时间精力不说还多多少少影响了学习的进度,有这个功夫在这多折腾平台,还不如多做两道PWN题目呢~

由于学校社团内部学习交流的需要,本人在经过两天的折腾学习后,结合各位前辈所写的的教程,终于成功搭建了最新的版本的CTFd,同时使用CTFd-Whale支持动态靶场环境。

本教程基于 Debian 10 + Docker + Docker Compose部署(CentOS 系统也可以参考,安装完Docker的步骤都是一样的),采用最新的CTFd v3.3.1安装,文章最后更新日期为 2021.08.04

如遇到网络环境不佳,导致下载安装速度过慢,请尝试换源、科学上网(自行搜索,禁止在评论区讨论)等。

博主 @Oliver 已经对CTFd v3.3.1官方源码进行了更换国内镜像源、添加CTFd-Whale子模块、配置frp网络、设置静态文件CDN加速等工作,可前往使用作者修改的版本进行安装部署。请前往获取:https://github.com/ollyhsu/CTFd.git

注意:本文已开启版权信息复制,复制相关代码,请在文本编辑器里手动删除,谢谢配合!

文章图片均已添加水印,转载请注明原出处:https://ollyhsu.github.io/posts/ctfd/

环境配置

系统换源

由于本人的环境为Debian10,故只针对此系统进行换源。

阿里源

直接编辑 /etc/apt/sources.list 文件(需要使用 root 权限)。

1
2
3
4
5
6
7
8
9
10
11
12
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.aliyun.com/debian/ buster main contrib non-free
deb http://mirrors.aliyun.com/debian/ buster-updates main contrib non-free
deb http://mirrors.aliyun.com/debian/ buster-proposed-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
# deb-src http://mirrors.aliyun.com/debian/ buster-updates main contrib non-free
# deb-src http://mirrors.aliyun.com/debian/ buster main contrib non-free
# deb-src http://mirrors.aliyun.com/debian/ buster-proposed-updates main contrib non-free
# deb-src http://mirrors.aliyun.com/debian/ buster-backports main contrib non-free

deb http://mirrors.aliyun.com/debian-security/ buster/updates main non-free contrib
# deb-src http://mirrors.aliyun.com/debian-security/ buster/updates main non-free contrib

更改完 sources.list 文件后请运行 sudo apt-get update 更新索引以生效。

中科大源

一般情况下,将 /etc/apt/sources.list 文件中 Debian 默认的源地址 http://deb.debian.org/ 替换为 http://mirrors.ustc.edu.cn 即可;对于Debian Security 源,将默认的源地址 http://security.debian.org/debian-security/ 替换为 http://mirrors.ustc.edu.cn/debian-security/ 即可。

可以使用如下命令:

1
2
sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list

当然也可以直接编辑 /etc/apt/sources.list 文件(需要使用 root 权限)。

以下是 Debian Stable (当前 Stable 为 Debian 10,代号为 Buster)参考配置内容:

1
2
3
4
5
6
7
8
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
# deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
deb http://mirrors.ustc.edu.cn/debian-security/ stable/updates main non-free contrib
# deb-src http://mirrors.ustc.edu.cn/debian-security/ stable/updates main non-free contrib

更改完 sources.list 文件后请运行 sudo apt-get update 更新索引以生效。

清华源

直接编辑 /etc/apt/sources.list 文件(需要使用 root 权限)。

1
2
3
4
5
6
7
8
9
10
11
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free

更改完 sources.list 文件后请运行 sudo apt-get update 更新索引以生效。

安装Git

1
sudo apt-get install git -y

Docker环境安装

本教程使用的是DaoCloud安装脚本,如果需要使用手动安装请移步官方教程、国内请参考各镜像站的教程。

在 Linux上 安装 Docker

Docker 的 安装资源文件 存放在Amazon S3,会间歇性连接失败。所以安装Docker的时候,会比较慢。你可以通过执行下面的命令,高速安装Docker。

1
curl -sSL https://get.daocloud.io/docker | sh

适用于Ubuntu,Debian,Centos等大部分Linux,会3小时同步一次Docker官方资源

安装 Docker Compose

Docker Compose 存放在Git Hub,不太稳定。你可以也通过执行下面的命令,高速安装Docker Compose。

1
2
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

你可以通过修改URL中的版本,可以自定义您的需要的版本

启动Docker服务并设置为开机启动

1
2
sudo systemctl start docker
sudo systemctl enable docker

Docker Hub加速(可选)

为避免docker pull拉取镜像的速度过慢,我们可以选择配置镜像站进行加速。

请先前往DaoCloud官网获取类似下面的加速脚本,复制官网上的加速脚本。博主使用的加速地址已经使用“xxx”隐藏,请使用最新官方地址,请注意修改。

1
2
3
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxxxxxxx.m.daocloud.io

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。

手动修改:

修改/etc/docker/daemon.json文件(若不存在则自行创建),加入如下内容:

1
2
3
{
"registry-mirrors": ["你的加速地址"]
}

里面更换为想要的镜像地址即可。

本文采用的是DaoCloud镜像站,整体体验效果及速度都还不错!你也可以选择其他加速服务。

修改文件后,执行命令重启docker服务:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

查看版本信息

通过docker --version来验证Docker安装是否成功

image-20210801161605012

通过docker-compose --version来验证Docker Compose安装是否成功

image-20210801161632646

如果能正常返回版本信息,那么恭喜你现在已经完成了环境准备环节,加油!

安装准备

本文针对的是最新版CTFd 3.3.1及CTFd-whale的教程,若不需要配置CTFd-Whale,请移步官方教程。

Docker集群设置

1、启用Docker Swarm,并为生成的Manager节点取一个别名

1
2
3
docker swarm init		# 初始化
docker node ls # 查看节点ID
docker node update --label-add name=linux-1 <节点 ID> # 添加别名

image-20210801163328862

下载CTFd修改版

博主 @Oliver 已经对CTFd v3.3.1官方源码进行了更换国内镜像源、添加CTFd-Whale子模块、配置frp网络、设置静态文件CDN加速等工作,可前往使用作者修改的版本进行安装部署。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git clone -b frp https://github.com/ollyhsu/CTFd.git		# 修改版(根目录不建议修改名字)
cd CTFd # 进入CTFd目录
git submodule update --init # 更新CTFd-Whale子模块

# ——————————————————————————————————————————————————————
# 如果你访问Github的速度不佳,也可以使用博主提供的CSDN和Gitee版(可选)
git clone -b https://codechina.csdn.net/ollyhsu/CTFd.git # CSDN
cd CTFd # 进入CTFd目录
sed -i 's/github.com/codechina.csdn.net/g' .gitmodules # 修改子模块Url
git submodule update --init # 更新CTFd-Whale子模块
# ——————————————————————————————————————————————————————
git clone -b frp https://gitee.com/ollyhsu/CTFd.git # Gitee
cd CTFd # 进入CTFd目录
sed -i 's/github.com/gitee.com/g' .gitmodules # 修改子模块Url
git submodule update --init # 更新CTFd-Whale子模块

手动配置修改(可选)

如果你不想使用本人上面修改并集成CTFd-Whale版本,也可以参考下面的步骤进行手动修改~

下载官方CTFd与CTFd-Whale

1
2
3
4
5
6
7
8
9
10
11
12
git clone https://github.com/CTFd/CTFd.git					# 官方Git源码
cd CTFd/ # 进入CTFd目录
git reset --hard 1447d14b6ba5eb35b871aeaea689a0cfed2a4195 # 回滚至3.3.1版

# 或者从Release页面下载指定版本的CTFd
wget -O CTFd.zip https://codeload.github.com/CTFd/CTFd/zip/refs/tags/3.3.1
sudo apt install unzip -y # 如果无unzip命令请安装
unzip CTFd.zip
cd CTFd/ # 进入CTFd目录

# 下载CTFd-Whale(glzjin师傅的版本不兼容最新版本,这里使用Frank师傅的维护版)
git clone https://github.com/frankli0324/ctfd-whale.git CTFd/plugins/ctfd-whale

image-20210801174129374

大家在这里一定要注意插件放置的路径,插件名称要确保是小写

image-20210801174417670

配置frp

image-20210801180431829

首先,需要在CTFd目录下创建frp目录用于放置配置文件

1
mkdir frp

接下来,使用命令 vim frp/frps.inifrp目录下添加下面的配置文件,token值要修改成随机值,其他保持默认即可,保存退出。

1
2
3
4
5
6
[common]
bind_port = 6490
token = randomme # 一定要随机生成
vhost_http_port = 8080 # HTTP可选
subdomain_host = domain.io # HTTP可选
custom_404_page = /conf/404.html # HTTP可选

容器节点自定义域名的请请修改域名

使用命令 vim frp/frpc.inifrp目录下添加下面的配置文件,token值需要与frps.ini的值一样,其他保持默认即可,保存退出。

1
2
3
4
5
6
7
8
9
[common]
token = randomme # 要与frps.ini中的值相同
server_addr = 172.1.0.1
server_port = 6490
pool_count = 200
tls_enable = true

admin_addr = 172.1.0.3
admin_port = 7400

最后我们使用cat命令查看一下配置文件

1
2
cat frp/frps.ini
cat frp/frpc.ini

image-20210804153303442

修改Dockerfile

由于CTFd默认使用的环境服务器在国外,对于国内用户部署过程非常不友好,因此我们需要使用命令vim Dockerfile修改,添加国内镜像源。此文件一共需要修改三个地方,如图所示。

image-20210801180034789

1、添加容器的默认源,由于原镜像的默认源为Debian,我们将其修改为中科大的源。

只需要在apt-get update \RUN之间添加两行命令即可,但一定要注意每行后面的换行符不要丢了~

image-20210801175045937

修改后:

image-20210801175321957

参考代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# hadolint ignore=DL3008
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list && \
apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential \
default-mysql-client \
python3-dev \
libffi-dev \
libssl-dev \
git \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

2、为pip添加阿里云的源,在requirements.txt后加上-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com ,即可。

image-20210801175552699

修改后

image-20210801175721365

参考代码:

1
RUN pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --no-cache-dir

3、同为修改pip源,参考第二处的方法即可

image-20210801175819479

修改后

image-20210801175943382

参考代码:

1
RUN pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --no-cache-dir

三处修改完毕,英文输入状态下先按ESC再输入:wq保存退出。

附:Dockerfile完整配置文件(非CTFd 3.3.1版本的可能不能直接使用下面的完整文件,请手动修改)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
FROM python:3.7-slim-buster
WORKDIR /opt/CTFd
RUN mkdir -p /opt/CTFd /var/log/CTFd /var/uploads

# hadolint ignore=DL3008
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && \
sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list && \
apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential \
python3-dev \
libffi-dev \
libssl-dev \
git \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

COPY requirements.txt /opt/CTFd/

RUN pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --no-cache-dir

COPY . /opt/CTFd

# hadolint ignore=SC2086
RUN for d in CTFd/plugins/*; do \
if [ -f "$d/requirements.txt" ]; then \
pip install -r $d/requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --no-cache-dir; \
fi; \
done;

RUN adduser \
--disabled-login \
-u 1001 \
--gecos "" \
--shell /bin/bash \
ctfd
RUN chmod +x /opt/CTFd/docker-entrypoint.sh \
&& chown -R 1001:1001 /opt/CTFd /var/log/CTFd /var/uploads

USER 1001
EXPOSE 8000
ENTRYPOINT ["/opt/CTFd/docker-entrypoint.sh"]

修改docker-compose

使用下面的命令修改docker-compose.yml配置文件,具体操作请往下看。

1
vim docker-compose.yml 

image-20210801180657502

image-20210801211924442

1、在ctfd服务下的volumes- .:/opt/CTFd:ro添加下面一行,通过它与Docker守护进程进行通信。

1
- /var/run/docker.sock:/var/run/docker.sock

在networks下的internal下方添加下面的内容

1
2
frp:
ipv4_address: 172.1.0.2

修改后如图:

image-20210801234247032

2、在cache下方及networks上方添加frpc和frps服务,网上有部分教程这个文件中没有加上frps,这会导致最后还要手动配置docker网络,属实麻烦,本文frps这里采用的是host模式的网络连接方式。

image-20210801212342839

修改内容(这里可以直接复制,不需要进行任何修改):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
frpc:
image: glzjin/frp:latest
restart: always
volumes:
- ./frp:/conf/
depends_on:
- frps
entrypoint:
- /usr/local/bin/frpc
- -c
- /conf/frpc.ini
networks:
frp:
ipv4_address: 172.1.0.3
frp_containers:

frps:
image: glzjin/frp:latest
restart: always
volumes:
- ./frp:/conf/
entrypoint:
- /usr/local/bin/frps
- -c
- /conf/frps.ini
network_mode: host

修改后如图所示,一定要注意格式缩进,否则后面会报错。

image-20210801212518071

3、配置网络

image-20210801212634001

在networks的internal: true下面添加frp的网络配置信息(直接复制即可,不需要修改)

1
2
3
4
5
6
7
8
9
10
11
frp:
driver: bridge
ipam:
config:
- subnet: 172.1.0.0/16
frp_containers:
driver: overlay
internal: true
ipam:
config:
- subnet: 172.2.0.0/16

修改后如图:

image-20210801212805468

修改完毕记得保存退出。

附:docker-compose.yml完整配置文件(非CTFd 3.3.1版本的可能不能直接使用下面的完整文件,请手动修改)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
version: '2'

services:
ctfd:
build: .
user: root
restart: always
ports:
- "8000:8000"
environment:
- UPLOAD_FOLDER=/var/uploads
- DATABASE_URL=mysql+pymysql://ctfd:ctfd@db/ctfd
- REDIS_URL=redis://cache:6379
- WORKERS=1
- LOG_FOLDER=/var/log/CTFd
- ACCESS_LOG=-
- ERROR_LOG=-
- REVERSE_PROXY=true
volumes:
- .data/CTFd/logs:/var/log/CTFd
- .data/CTFd/uploads:/var/uploads
- .:/opt/CTFd:ro
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- db
networks:
default:
internal:
frp:
ipv4_address: 172.1.0.2

nginx:
image: nginx:1.17
restart: always
volumes:
- ./conf/nginx/http.conf:/etc/nginx/nginx.conf
ports:
- 80:80
depends_on:
- ctfd

db:
image: mariadb:10.4.12
restart: always
environment:
- MYSQL_ROOT_PASSWORD=ctfd
- MYSQL_USER=ctfd
- MYSQL_PASSWORD=ctfd
- MYSQL_DATABASE=ctfd
volumes:
- .data/mysql:/var/lib/mysql
networks:
internal:
# This command is required to set important mariadb defaults
command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0]

cache:
image: redis:4
restart: always
volumes:
- .data/redis:/data
networks:
internal:


frpc:
image: glzjin/frp:latest
restart: always
volumes:
- ./frp:/conf/
depends_on:
- frps
entrypoint:
- /usr/local/bin/frpc
- -c
- /conf/frpc.ini
networks:
frp:
ipv4_address: 172.1.0.3
frp_containers:

frps:
image: glzjin/frp:latest
restart: always
volumes:
- ./frp:/conf/
entrypoint:
- /usr/local/bin/frps
- -c
- /conf/frps.ini
network_mode: host

networks:
default:
internal:
internal: true
frp:
driver: bridge
ipam:
config:
- subnet: 172.1.0.0/16
frp_containers:
driver: overlay
internal: true
ipam:
config:
- subnet: 172.2.0.0/16

构建镜像

运行 docker-compose build命令,等待

image-20210801213138417

image-20210801213415209

如果修改的各配置文件没有错误的话,那么应该就会返回 Successfully tagged ctfd_ctfd:latest~

部署容器

运行 docker-compose up -d 部署容器,耐心等待~

image-20210801213452229

不出意外的话,等全部显示done就成功啦~

image-20210801213932831

我们再来使用docker ps -a查看一下当前正在运行的容器是否都正常。

image-20210801214012976

访问你的服务器的公网IP就能打开平台界面啦,由于CTFd最新版启用了nginx端口转发,我们直接访问80端口即可,当然CTFd的默认端口8000也可以访问。

image-20210801214109697

Hint: 对于Docker的两条命令docker-compose builddocker-compose up -d ,我们可以将它们合起来写成一句命令 docker-compose up -d --build

后续配置

进入平台后的账号主题相关配置请自行设置,这里我们主要提一下根据本教程安装的CTFd-Whale的配置(别的教程可能不能保证完全适用)如果你使用的是本人修改集成CTFd-Whale插件的CTFd版本,那么插件设置处只需要修公网IP和HTTP域名即可。

进入后台CTFd-Whale插件的Frp标签下

第一处:Http Domain Suffix(HTTP模式域名)

此处填写的域名为Frp容器的节点域名,并非为CTFd平台的域名,(请先将该节点域名泛解析到本服务器的IP上)

例如 *.node.vixxxx.com | A | 39.111.11.111 ,不同DNS服务商操作或许不一样。

image-20210804172313247

然后在CTFd-Whale插件设置里设置node.vixxxx.com,这里填写的域名不需要填写 *.

image-20210804172754383

第二处:Direct IP Address(服务器公网IP)

image-20210804173127474

如果你修改了其他配置,例如CTFd根目录的文件夹名称可能会导致容器名称变化,或是Swarm节点别名,导致无法正常启动靶场,请参照CTFd-Whale完整配置信息表自行修改。

附:CTFd-Whale完整配置信息表

属性 参考配置 备注
Docker API URL unix:///var/run/docker.sock Docker API 链接(保持默认即可)
Credentials Docker Hub用户名和密码,以“:”分隔。用于拉取私人镜像
Swarm Nodes linux-1 前面Swarm 集群设置标记的节点别名
Use SSL 高级功能,暂不用管
Auto Connect Network ctfd_frp_containers 与 frpc 所在容器相连接的网络
Dns Setting 114.114.114.114 靶机内网有DNS可写DNS地址,没有则直接写一个外部DNS
Auto Connect Containers ctfd_frpc_1 frpc所对应的容器名称
Multi-Container Network Subnet 174.1.0.0/16 内网题大子网IP/CIDR
Multi-Container Network Subnet New Prefix 24 每个内网题实例的GIDR
API URL http://frpc:7400 需要要连接的 Frp API
Http Domain Suffix node.vixxxx.com 已经泛解析的子域名(不用加*)
Http Port 8080 frps http开放的端口
Direct IP Address 39.111.11.111 机器的公网IP
Direct Minimum Port 10000 容器最小的端口值
Direct Maximum Port 10100 容器最大的端口值
Frpc config template [common]
token = randomme
server_addr = 172.1.0.1
server_port = 6490
pool_count = 200
tls_enable = true

admin_addr = 172.1.0.3
admin_port = 7400
frp目录下frpc.ini文件内容,记得修改token
Frps config template [generated] 自动生成的frps配置模板(不用管)
Max Container Count 100 最多允许容器数量
Max Renewal Times 5 单个容器最多允许续期的次数
Docker Container Timeout 3600 实例存活的时间,单位为秒
Subdomain Template {{ container.uuid }} 设置生成容器的子域
Flag Template {{"flag{"+uuid.uuid4()\|string+"}"}} 自定义flag的前缀()

题目测试

这里我们使用 ctftraining/qwb_2019_supersqli 进行测试,添加题目后进行访问。

添加题目过程参考下图:

image-20210804182508256

image-20210804182507256

HTTP模式:

image-20210804182638340

image-20210804182717320

Direct模式:

image-20210804183338739

image-20210804183410903

如果两种模式下都能正常访问容器,那么恭喜你现在CTFd最新版本你已经成功部署啦~

避坑指南

1、安装完Docker,如遇使用 apt update 命令时在 Docker源处更新缓慢

image-20210804180538048

请删除/etc/apt/sources.list.d/docker.list文件,如果不更新或安装Docker无需此文件

1
rm -rf  /etc/apt/sources.list.d/docker.list

由于使用的是我改良集成版本的CTFd,目前来看可以一气呵成的的部署成功~

后面有机会再更新赵师傅的CTFd v2.3.2版的安装教程,这个版本的安装时坑较多,后续更新再写~

参考文章

https://www.zhaoj.in/read-6333.html

https://hujiekang.top/2020/04/26/CTFd-conf/index.html

https://err0r.top/article/CTFD/

转载请务必注明来源:https://ollyhsu.github.io/posts/ctfd/

如果有问题,请在个人Hexo博客 文章下面的评论区留言或私信联系我,不足之处敬请谅解!