跳到主要内容

二进制部署

二进制部署适用于已有基础设施(MySQL、Redis、K8s)且需要最大灵活性的场景。

前置要求

组件版本要求说明
Go1.26+编译后端
Node.js22+编译前端
pnpm10+前端包管理器
libpcap-dev任意流量捕获功能(不需要时可跳过)
MySQL8.0+主数据存储
Redis6.0+缓存与任务队列
Kubernetes1.20+动态附件题目和容器题目(可选)

编译

1. 克隆仓库

git clone https://github.com/0RAYS/CBCTF.git
cd CBCTF

2. 编译前端

cd frontend
pnpm install
pnpm build
cd ..

构建产物位于 frontend/dist/,将通过 go:embed 嵌入 Go 二进制。

3. 编译后端

含流量捕获功能(推荐,需 libpcap)

# Ubuntu/Debian
sudo apt install -y libpcap-dev

# Alpine
apk add libpcap-dev build-base

CGO_ENABLED=1 go build \
-ldflags="-linkmode external -extldflags '-static' -s -w" \
-trimpath -o cbctf .

不含流量捕获功能(无需 CGO)

go build -ldflags="-s -w" -trimpath -o cbctf .

配置

首次运行

首次运行时,若当前目录下不存在 config.yaml,程序会自动生成默认配置并退出:

./cbctf

按照实际环境编辑生成的 config.yaml,然后重新运行。

最小配置示例

host: https://ctf.example.com    # 平台对外访问地址

path: ./data # 数据存储目录

gin:
host: 0.0.0.0
port: 8000
cors:
- https://ctf.example.com
jwt:
secret: change-this-to-a-random-string # 必须修改!

gorm:
mysql:
host: 127.0.0.1
port: 3306
user: cbctf
pwd: your-mysql-password
db: cbctf

redis:
host: 127.0.0.1
port: 6379
pwd: your-redis-password

k8s:
config: ./admin.yaml # K8s kubeconfig,不使用容器题可省略
namespace: cbctf

完整配置字段说明见 配置说明

运行

./cbctf

查看初始管理员密码:

./cbctf 2>&1 | grep "Init Admin"
# 或查看日志文件(log.save: true 时)
grep "Init Admin" ./logs/*.log

后台运行(systemd)

创建服务单元文件 /etc/systemd/system/cbctf.service

[Unit]
Description=CBCTF Platform
After=network.target mysql.service redis.service

[Service]
Type=simple
User=cbctf
WorkingDirectory=/opt/cbctf
ExecStart=/opt/cbctf/cbctf
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable --now cbctf
# 查看日志
sudo journalctl -u cbctf -f