一个面向技能考核的 Puff-Pastry 动态靶场管理平台。
- 注册开关:第一个注册用户自动成为管理员,后续用户默认为待激活。
- 用户状态:待激活、用户、管理员。
- 每个用户可独立启动完整 Puff-Pastry 环境,停止时销毁容器与网络。
- 每个用户拥有唯一
flag{uuid},同一用户环境内所有容器和数据库 flag 一致。 - 用户工作台展示入口地址、容器状态、操作日志和提交记录。
- 管理 Tab 仅管理员可见,可管理用户状态、注册开关、答题状态和容器状态。
- 后端使用 FastAPI + SQLite + Docker Engine API。
- 前端使用 Next.js + shadcn 预设,生产部署时静态导出后由 FastAPI 托管。
后端:
cd backend
python -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
export TARGET_SOURCE_DIR=../Puff-Pastry
export WORKSPACE_DIR=../workspaces
export DATABASE_URL=sqlite:////tmp/platform.db
uvicorn app.main:app --reload前端:
export NEXT_PUBLIC_API_BASE_URL=http://localhost:8000
npm run devgit submodule update --init --recursive
cp .env.example .env
docker compose up -d --build默认访问:
平台只有一个 FastAPI 容器。Docker build 会先构建 Next.js 前端并放入后端镜像的 /app/static,运行时由 FastAPI 同时提供页面和 API。
容器会映射 /var/run/docker.sock 来创建用户靶场容器。Puff-Pastry 作为 git submodule 挂载至容器内 /targets/Puff-Pastry:ro,workspaces 目录挂载至 /workspaces,data 目录挂载至 /data,均使用相对路径,不依赖宿主机绝对路径。