搭建的环境
操作系统:Ubuntu22.04工具软件:docker、docker-composedocker容器镜像:postgres:alpine、gztime/gzctf
搭建的储备
操作系统
先安装一个Ubuntu22.04系统,在阿里云的镜像库中安装适合的版本 https://mirrors.aliyun.com/ubuntu-releases/22.04/
记得要先建一个root用户
sudo passwd root su root
安装 docker、docker-compose
# 安装命令sudo apt update #更新源sudo apt install docker.io docker-compose# 验证安装是否成功docker --versiondocker-compose -v
说明我们已经成功安装好了!!
拉取 GZCTF 镜像
docker pull --platform linux/amd64 gztime/gzctf
部分 |
作用 |
---|---|
docker pull |
拉取镜像 |
--platform linux/amd64 |
强制拉取适用于 amd64 架构的镜像(即 x86_64) |
gztime/gzctf |
你要拉取的镜像名 |
这是典型的 Docker 无法连接 Docker Hub 问题,通常出现在中国大陆,由于网络限制或 DNS 问题导致连接不上国外服务器。我们先换个源
docker换源
vim /etc/docker/daemon.json
输入i插入
{ "registry-mirrors": [ "https://ustc-edu-cn.mirror.aliyuncs.com/", "https://ccr.ccs.tencentyun.com/", "https://docker.m.daocloud.io/","https://dockerhub.azk8s.cn","https://mirror.baidubce.com","https://docker.nju.edu.cn","https://mirror.iscas.ac.cn","https://dockerhub.icu","https://docker.anyhub.us.kg","https://hub.gog.email","https://dockerpull.com","https://atomhub.openatom.cn" ]}
换完源之后记得重启一下docker
sudo systemctl restart docker#orsudo systemctl restart docker.service
再重新下载GZCTF的容器,就没有报错了
下载容器使用的数据库
docker pull --platform linux/amd64 postgres:alpine
打包容器镜像
要将 Docker 容器镜像 打包为离线文件(如 .tar),方便在其他机器上导入运行
打包需要的web容器
docker save -o gzctf_1.tar.gz gztime/gzctf:latest
输出的文件名为 gzctf_1.tar.gz
打包容器使用的数据库
docker save -o postgres.tar.gz postgres:alpine
备注如果系统为arm系统,则修改成linux/arm64
部署GZTCTF
根据官网的文档,我们要修改两个配置文件appsettings.json和compose.yml:https://gzctf.gzti.me/zh/guide/start/quick-start.html
appsettings.json
必须修改如下参数,已在配置文件中文说明;Database:修改默认Postgres数据库密码;
XorKey:随便输入一串数字,用于加密运算;
PublicEntry:输入IP地址或域名,用于访问GZCTF平台,如果是自己搭建的可以"PublicEntry": "localhost" or "PublicEntry": "127.0.0.1"
TrustedNetworks:信任的代理 IP 段,如果是自己本地搭建可以填自己的ip段
将以下内容保存为 appsettings.json 文件,并替换为你的初始化参数,具体配置说明请参考 appsettings.json 配置。
{ "AllowedHosts": "*", // 允许所有主机访问(可设为具体域名以提高安全性)"ConnectionStrings": { // 数据库连接配置:连接 PostgreSQL 容器 "Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=<Your POSTGRES_PASSWORD>" // db: 指向 docker-compose 中定义的服务名为 db 的容器 },"EmailConfig": { // 邮件相关配置(用于找回密码、通知等) "SenderAddress": "", // 发件人邮箱地址 "SenderName": "", // 发件人显示的名称 "UserName": "", // 邮箱账户名 "Password": "", // 邮箱密码或授权码 "Smtp": { "Host": "localhost", // SMTP 邮件服务器地址 "Port": 587 // SMTP 端口号 } },"XorKey": "<Your XOR_KEY>", // XOR 加密密钥(用于加密敏感信息)"ContainerProvider": { // 容器运行平台配置 "Type": "Docker", // 可选值:"Docker" 或 "Kubernetes" "PortMappingType": "Default", // 映射方式,"Default" 或 "PlatformProxy" "EnableTrafficCapture": false, // 是否开启流量抓包(一般用于调试) "PublicEntry": "<Your PUBLIC_ENTRY>", // 公网入口地址,例如 "123.123.123.123" 或域名 // Docker 专属配置(可选) "DockerConfig": { "SwarmMode": false, // 是否启用 Docker Swarm 模式 "Uri": "unix:///var/run/docker.sock" // Docker 宿主机连接路径(本地 socket) } },"CaptchaConfig": { // 验证码配置(防止机器人注册等) "Provider": "None", // 验证码提供商:"None"、"CloudflareTurnstile" 或 "HashPow" "SiteKey": "<Your SITE_KEY>", // 第三方验证码平台提供的站点密钥 "SecretKey": "<Your SECRET_KEY>" // 第三方验证码平台提供的密钥 },"ForwardedOptions": { // 反向代理配置(如果部署在 Nginx、Traefik 等反代后面) "ForwardedHeaders": 7, // 使用哪些转发头(X-Forwarded-For、X-Forwarded-Host 等) "ForwardLimit": 1, // 最大允许转发层数(防止头部伪造) "TrustedNetworks": ["192.168.12.0/8"] // 信任的代理 IP 段(例如内网 IP) }}
docker-compose.yml
必须修改如下参数,已在配置文件中文说明;1.GZCTF_ADMIN_PASSWORD:平台默认登录口令,登录账号默认为Admin,注意口令需要满足复杂程度,包含大小写和特殊符号,不然首次初始化平台Admin密码将不会初始化,需要进入数据库进行修改。
2.POSTGRES_PASSWORD:Postgres密码,和上一个配置文件密码一致即可。
将以下内容保存为 compose.yml 文件,并替换为你的初始化参数。其中,可选后端语言有:en-US, zh-CN, zh-TW, ja-JP, id-ID, ko-KR, ru-RU, de-DE, fr-FR, es-ES, vi-VN。
services: gzctf: image: registry.cn-shanghai.aliyuncs.com/gztime/gzctf:develop restart: always environment: - "GZCTF_ADMIN_PASSWORD=<Your GZCTF_ADMIN_PASSWORD>" # choose your backend language `en_US` / `zh_CN` / `ja_JP` ... - "LC_ALL=zh_CN.UTF-8" ports: - "80:8080" volumes: - "./data/files:/app/files" - "./appsettings.json:/app/appsettings.json:ro" # - "./kube-config.yaml:/app/kube-config.yaml:ro" # this is required for k8s deployment - "/var/run/docker.sock:/var/run/docker.sock"# this is required for docker deployment depends_on: - db db: image: postgres:alpine restart: always environment: - "POSTGRES_PASSWORD=<Your POSTGRES_PASSWORD>" volumes: - "./data/db:/var/lib/postgresql/data"
导入docker容器
准备阶段打包好的容器镜像上传服务器,导入docker容器。先创建一个目录images,在opt目录下,再把打包好的容器镜像文件移动到images目录下
从本地压缩包文件加载Docker镜像。
docker load -i gzctf_1.tar.gzdocker load -i postgres.tar.gz
先把之前修改的配置文件保存在同一个目录下再执行部署命令
docker-compose up -d
查看一下docker的容器
访问ip,这里是用本地搭建的。所以是127.0.0.1
下一篇记录如何去部署ctf各类题目,点点关注吧 o(╥_╥)o