# 部署 GZCTF
从前天晚上开始开始着手部署,忙了一整天才搞好,感觉所有能踩到的坑都踩了......
首先去官网:
注意不要直接看部署部分的使用 Docker+K8s,先看快速上手。
只关注安装配置的部分,其他的可以先不看。
注意:参数中的

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

如果有给比赛平台本身配置反向代理,这里请填写该容器 docker 网络的网段,否则平台看到的 ip 全部都是内网地址
接下来再去看
按照要求修改对应部分。
注意:因为 k3s 在宿主机上,所以导出的 kube-config.yml 中:

要将地址改成这个容器的网关(端口不变),并且最好不要对这个地址使用反向代理(而且也没有必要),可能导致平台出现错误。
正常情况下也只用看配置 GZ-CTF 的部分
然后在目录里直接 docker-compose up -d
# 部署题目
使用容器的题目:

这一栏要这样填,拉取镜像
# 网络问题
主要发生在 k3s 的部署部分,有时平台上开的容器始终没法使用,就很可能是由于 kube 的组件下载失败导致的(容器镜像请使用类似上面的镜像源,因为下面的配置不会影响到这个的拉取)
PS: 要找能用的镜像源
要怎么确认这个问题?

如果这里的 kube-system 项目 STATUS 始终没有变化且不是 Running 时,很可能就是网络问题,
按照上面第二个链接的最底下:

配置可用的镜像仓库即可!
# 占领了?
当正常运作时,你的服务器很多配置都会失效,因为 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 |
#!/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")' |
要适时插入环境变量
#!/bin/bash | |
echo start |
注意: .sh 文件在 windows 下写会因为换行符的问题(尤其是如果你用记事本写的话)导致不兼容,可以使用
dos2unix <path_to_file> |
来转换
见 Docker 容器 /bin/bash start.sh 无法找到 not found_docker: not found-CSDN 博客