# 部署 GZCTF

从前天晚上开始开始着手部署,忙了一整天才搞好,感觉所有能踩到的坑都踩了......

首先去官网:

快速上手 - GZ::CTF

注意不要直接看部署部分的使用 Docker+K8s,先看快速上手。

只关注安装配置的部分,其他的可以先不看。

注意:参数中的

1759035917474

是比赛容器的入口地址,是服务器 ip 或者域名,不需要端口号

1759035996105

如果有给比赛平台本身配置反向代理,这里请填写该容器 docker 网络的网段,否则平台看到的 ip 全部都是内网地址

接下来再去看

使用 Docker 和 K8s - GZ::CTF

按照要求修改对应部分。

注意:因为 k3s 在宿主机上,所以导出的 kube-config.yml 中:

1759036275653

要将地址改成这个容器的网关(端口不变),并且最好不要对这个地址使用反向代理(而且也没有必要),可能导致平台出现错误。

正常情况下也只用看配置 GZ-CTF 的部分

然后在目录里直接 docker-compose up -d

# 部署题目

使用容器的题目:

1759037136458

这一栏要这样填,拉取镜像

# 网络问题

主要发生在 k3s 的部署部分,有时平台上开的容器始终没法使用,就很可能是由于 kube 的组件下载失败导致的(容器镜像请使用类似上面的镜像源,因为下面的配置不会影响到这个的拉取)

PS: 要找能用的镜像源

要怎么确认这个问题?

1759037427790

如果这里的 kube-system 项目 STATUS 始终没有变化且不是 Running 时,很可能就是网络问题,

按照上面第二个链接的最底下:

1759037699750

配置可用的镜像仓库即可!

# 占领了?

当正常运作时,你的服务器很多配置都会失效,因为 k3s 的 traefik 组件会代替你的 nginx 等中间件管理网页,尽管你可能根本看不到它监听任何端口

如果是在本地部署无需关心这个问题,但是对于有其他服务的人来说,参考

移除 k3s 自带的 traefik | JovenKing 的三言两语

将其删去

# Docker

直接用实例:

docker-compose.yml

version: "3"
services:
  challenge:
    build: .
    image: registry.rois.team/fctf2505/shop:1
    ports:
      - "10801:80"#可以不要
    environment:
      - GZCTF_FLAG=ctfhub{test_flag}#动态 flag 依靠这个环境变量插入

Dockerfile

FROM ctfhub/web_nginx_mysql_php_5.6
COPY files/flag.sh /flag.sh
COPY files/start.sh /start.sh
COPY src /var/www/html/
EXPOSE 80

flag.sh

#!/bin/bash
mysql -uweb -pweb -e 'INSERT INTO web.comment (id, goods_id, user, score,content,time) VALUES (3, 99, "wells", 5 ,"'${GZCTF_FLAG}'", "2024-04-9")'

要适时插入环境变量

start.sh

#!/bin/bash
echo start

注意: .sh 文件在 windows 下写会因为换行符的问题(尤其是如果你用记事本写的话)导致不兼容,可以使用

dos2unix <path_to_file>

来转换

Docker 容器 /bin/bash start.sh 无法找到 not found_docker: not found-CSDN 博客