JUSTCTF比赛平台搭建
环境:ubuntu22.04、docker、GZCTF、
一、ubuntu安装docker
安装命令:
1
| sudo apt install docker.io docker-compose
|
然后换源:
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
| { "registry-mirrors": [ "https://6kx4zyno.mirror.aliyuncs.com", "https://1nj0zren.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "http://f1361db2.m.daocloud.io", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://mirror.ccs.tencentyun.com/", "https://dockerproxy.com", "https://docker.nju.edu.cn", "https://mirror.iscas.ac.cn", "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://dockerhub.azk8s.cn", "https://docker.m.daocloud.io", "https://docker.m.daocloud.io", "https://0c105db5188026850f80c001def654a0.mirror.swr.myhuaweicloud.com", "https://noohub.ru", "https://huecker.io", "http://mirror.azure.cn/", "https://dockerhub.timeweb.cloud", "https://5tqw56kt.mirror.aliyuncs.com", "https://docker.m.daocloud.io", "https://docker.1panel.live", "https://hub.rat.dev/", "https://docker.ckyl.me/", "https://docker.chenby.cn", "https://docker.hpcloud.cloud", "http://mirrors.ustc.edu.cn/" ] }
|
然后重启进程:
1 2
| sudo systemctl daemon-reload #重启daemon进程 sudo systemctl restart docker #重启docker
|
docker安装成功,可以拉取镜像。
还有一种方法通过安装宝塔面板,面板里安装docker,自定义源。==》来安装docker。(推荐这种)
二、拉取GZCTF
1 2 3 4 5
| cd /home mkdir JUSTCTF cd JUSTCTF sudo touch appsettings.json sudo touch docker-compose.yml
|
这两个创建好的文件,GZCTF的配置文件
1、首先是appsettings.json:
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
| { "AllowedHosts": "*", "ConnectionStrings": { "Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=<Your POSTGRES_PASSWORD>" }, "EmailConfig": { "SendMailAddress": "a@a.com", "UserName": "", "Password": "", "Smtp": { "Host": "localhost", "Port": 587 } }, "XorKey": "<Your XOR_KEY>", "ContainerProvider": { "Type": "Docker", // or "Kubernetes" "PortMappingType": "Default", // or "PlatformProxy" "EnableTrafficCapture": false, "PublicEntry": "<Your PUBLIC_ENTRY>", // or "xxx.xxx.xxx.xxx" // optional "DockerConfig": { "SwarmMode": false, "Uri": "unix:///var/run/docker.sock" } }, "RequestLogging": false, "DisableRateLimit": true, "RegistryConfig": { "UserName": "", "Password": "", "ServerAddress": "" }, "CaptchaConfig": { "Provider": "None", // or "CloudflareTurnstile" or "GoogleRecaptcha" "SiteKey": "<Your SITE_KEY>", "SecretKey": "<Your SECRET_KEY>", // optional "GoogleRecaptcha": { "VerifyAPIAddress": "https://www.recaptcha.net/recaptcha/api/siteverify", "RecaptchaThreshold": "0.5" } }, "ForwardedOptions": { "ForwardedHeaders": 5, "ForwardLimit": 1, "TrustedNetworks": ["192.168.12.0/8"] } }
|
需要修改部分:
1 2 3 4 5 6 7
| <Your POSTGRES_PASSWORD>: 数据库密码、自己定义
<Your XOR_KEY>: 用于加密比赛私钥的随机字符串、随机定义
<Your PUBLIC_ENTRY>: 外部访问地址,可以是IP或域名
TrustedNetworks: 修改成自己的对应IP,防止网段冲突问题
|
2、docker-compose.yml 配置文件内容:
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
| version: "3.0" services: gzctf: image: gztime/gzctf:latest 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"
|
需要修改部分有:
1 2
| <Your GZCTF_ADMIN_PASSWORD>:初始管理员密码一定要和平台相符,GZ的是大于8位并且有大小写字母和数字。 <Your POSTGRES_PASSWORD>: 数据库密码和刚刚appsettings里面的数据库密码必须保持一致
|
平台创建,使用这个命令来搭建平台:
1
| sudo docker-compose up -d
|
拉取成功。
访问ip+80

三、上传镜像到自己github镜像库
1、准备条件
2、推送镜像
将 <PAT>
替换为个人访问令牌,将 <your-github-username>
替换为 GitHub 用户名。
标记你的 Docker 镜像: 使用以下命令将 Docker 镜像标记为 GitHub Container Registry 镜像:
docker tag <your-image-name>:<tag> ghcr.io/<your-github-username>/<your-image-name>:<tag>
1 2 3 4 5
| 将 `<your-image-name>:<tag>` 替换为本地 Docker 镜像名与tag名,`<your-github-username>` 替换为 GitHub 用户名,`<tag>` 替换想要使用的标签(例如默认的`latest`标签)。
- **推送 Docker 镜像到 GitHub:** 使用以下命令将 Docker 镜像推送到 GitHub Container Registry:
|
docker push ghcr.io/<your-github-username>/<your-image-name>:<tag>
完成以上步骤后,就可以在 GitHub个人账号的 的 “Packages” 部分看到Docker 镜像了,但是该镜像默认为private镜像,Pull使用时需要先登录。
参考文献:推送 Docker 镜像到Github Registry – 老梅笔记 laomeinote
docker详解(关于CTF的出题和搭建CTF赛场) - 先知社区