公司动态
如何10分钟用Docker部署CTFNote:新手零基础上手自托管CTF协作平台
如何10分钟用Docker部署CTFNote新手零基础上手自托管CTF协作平台【免费下载链接】CTFNoteCTFNote is a collaborative tool aiming to help CTF teams to organise their work.项目地址: https://gitcode.com/gh_mirrors/ct/CTFNoteCTFNote 是一款开源的 CTF 团队协作工具帮助比赛团队管理比赛、题目、Flag 和共享解题笔记。本文将带你用 Docker 在 10 分钟内零基础部署并自托管一个 CTF 协作平台全程只需几条命令无需任何数据库或前端经验。部署CTFNote前的准备了解平台与硬件要求在动手之前先花一分钟了解 CTFNote 能做什么CTF 管理集中展示即将开始、进行中和已结束的比赛支持日历视图和 CTFtime 一键导入题目协作题目卡片支持分类筛选、认领Working on、解题记录团队分工一目了然✍️共享记事本每道题内置实时协作 Pad解题过程中的分析可以边写边讨论硬件与软件要求很简单项目要求内存自构建镜像需 ≥ 3 GB内存不足时可直接拉取官方预构建镜像软件Docker Docker Compose端口默认占用本机127.0.0.1:8080CTFNote 由四个容器组成API 后端api/、前端front/、PostgreSQL 数据库db/以及共享记事本服务 HedgeDoc全部由 docker-compose.yml 编排一键启动。一键安装步骤5个命令跑通CTFNote第一步克隆CTFNote仓库git clone https://gitcode.com/gh_mirrors/ct/CTFNote cd CTFNote第二步配置 .env 环境变量文件这是新手最容易漏掉的一步。项目提供了一份带完整注释的模板.env.example复制为.env即可cp .env.example .env对于快速上手.env可以先保持全部注释使用默认值。如果你打算正式对外提供服务建议至少配置这三项# 时区例如欧洲/巴黎可按需改为 Asia/Shanghai TZAsia/Shanghai # 会话密钥强烈建议配置长度 64 字符以上可用 pwgen -s 64 1 生成 SESSION_SECRET在这里填入随机字符串 # 图片上传走本地文件系统默认走 imgur自托管建议改为本地 CMD_IMAGE_UPLOAD_TYPEfilesystem所有可用变量及说明都在.env.example中以注释形式写好了照着填即可。第三步用 docker compose 启动CTFNote容器方式 A拉取预构建镜像推荐内存小的服务器必选sudo docker compose up -d --pull always方式 B从源码自构建需要至少 3 GB 内存sudo docker compose up -d --build命令执行完成后四个容器会自动创建网络、数据卷并启动。数据库初始化脚本位于db/create-multiple-postgresql-databases.sh会自动为 CTFNote 和 HedgeDoc 分别创建独立数据库无需手动操作。访问CTFNote实例第一个账号就是管理员浏览器打开http://127.0.0.1:8080就能看到 CTFNote 登录页。⚠️关键规则第一个注册/创建的账号自动获得管理员Admin权限。所以请第一时间用团队管理员账号注册后续可以在Users管理面板为成员分配角色Guest来宾、Friend朋友、Member成员、Manager队长、Admin管理员通过Registration with password生成一次性密码让他人以指定角色注册最快配置方法用 Nginx 为CTFNote开启HTTPSCTFNote 默认只监听本机回环地址官方建议用 Nginx 反向代理并启用 HTTPS。在 Nginx 中添加如下配置server { server_name ctfnote.example.com; location / { proxy_pass http://127.0.0.1:8080/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 5M; } }然后修改.env文件告知记事本服务使用 HTTPS 并设置域名# 安全我们使用 HTTPS -# CMD_PROTOCOL_USESSLtrue CMD_PROTOCOL_USESSLtrue # 域名需要启用相关选项时必须定义 -# CMD_DOMAINexample.org:1337 CMD_DOMAINctfnote.example.com最后运行certbot签发 Lets Encrypt 证书你的 CTFNote 实例就正式对外可用了。部署后的进阶玩法部署完成只是开始CTFNote 还有几个新手值得一试的功能导入 CTFManager 以上角色可以从 CTFtime 一键导入比赛及题目免去手动录入Discord 机器人在.env中设置USE_DISCORDtrue、DISCORD_BOT_TOKEN、DISCORD_SERVER_ID后即可在 Discord 中用/start、/stop、/solve [flag]等命令直接联动题目状态机器人代码见api/src/discord/解题笔记每道题自带共享 Pad团队可以实时协作文档常见问题与升级迁移Q启动后打不开页面确认容器是否全部运行sudo docker compose ps并用sudo docker compose logs -f查看日志。Q服务器内存低于 3 GB使用预构建镜像--pull always不要用--build自构建。Q版本升级怎么办已有实例升级前请先阅读项目中的迁移指南 MIGRATION.md其中详细说明了各版本间的迁移步骤。Q数据存在哪里数据库与上传文件都保存在 Docker 数据卷ctfnote、ctfnote-uploads、pad-uploads中容器删除也不会丢数据备份时卷才是关键。从克隆仓库到打开网页整个过程不超过 10 分钟。现在就为你们的 CTF 战队搭建一个专属的协作平台吧【免费下载链接】CTFNoteCTFNote is a collaborative tool aiming to help CTF teams to organise their work.项目地址: https://gitcode.com/gh_mirrors/ct/CTFNote创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考