feat(ci): P1-4 前端预览环境实施(轻量版) #482
Reference in New Issue
Block a user
Delete Branch "ci/p1-4-preview-environment"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
功能概述
实现 PR 级前端预览环境(轻量版),每个前端 PR 自动部署一个独立预览站。
变更内容
新增文件
.gitea/workflows/preview-deploy.yml- 预览部署工作流https://pr-{号}.preview.xiaoxiajianji.comVITE_API_URL=https://staging-api.xiaoxiajianji.com构建.gitea/workflows/preview-cleanup.yml- 预览清理工作流scripts/ci/preview_init_server.sh- 服务器初始化脚本/var/www/preview/目录scripts/ci/preview_nginx.conf.template- Nginx 配置模板*.preview.xiaoxiajianji.com/var/www/preview/pr-{N}//api/*→staging-api.xiaoxiajianji.comtry_files $uri /index.html技术方案
runtime-builder(有 npm 缓存和 SSH 密钥)服务器端配置(需手动执行一次)
后续优化方向
代码审查结果 - PR #482
⚠️ 问题(3个需要修改)
.gitea/workflows/preview-deploy.yml 第36-46行:存在 Tar 路径穿越安全风险
member.name以去除root_prefix,但未对修改后的路径进行校验。如果恶意构建的 tar 包中包含文件名如../../etc/passwd,在去除前缀后可能保留路径穿越字符,导致文件被解压到工作目录之外。tar.extract之前,必须检查member.name是否包含..或是否以/开头(绝对路径)。建议使用if ".." in member.name or member.name.startswith("/"): continue或抛出异常。.gitea/workflows/preview-deploy.yml 第181行 & .gitea/workflows/preview-cleanup.yml 第62行:SSH 连接存在中间人攻击风险
ssh连接时显式使用了-o StrictHostKeyChecking=no。虽然之前执行了ssh-keyscan,但关闭严格主机密钥检查会使连接容易受到中间人攻击,且使得known_hosts机制失效。-o StrictHostKeyChecking=no,依赖ssh-keyscan写入的known_hosts文件进行验证。如果担心首次连接问题,应确保ssh-keyscan成功且指纹正确。.gitea/workflows/preview-deploy.yml 第168行 & .gitea/workflows/preview-cleanup.yml 第48行:硬编码敏感的基础设施信息
47.98.113.167。将真实的公网 IP 地址提交到代码仓库中会暴露基础设施信息,增加被攻击的风险,且不利于后续基础设施的迁移或变更。💡 建议(2个可选)
.gitea/workflows/preview-deploy.yml 第242行:评论查找逻辑较为脆弱
'预览环境已部署'存在且'Preview URL'不存在。这种基于特定文本内容的匹配方式非常脆弱,一旦评论文案发生微调(如翻译、格式调整),就会导致无法更新评论而重复发布。建议在评论中插入一个隐藏的 HTML 标记(如<!-- preview-comment-marker -->)来唯一标识该评论。scripts/ci/preview_nginx.conf.template 第1行:HTTPS 配置与 Workflow 输出不一致
https://...。如果服务器未配置 SSL 或默认重定向,用户访问链接会失败。建议确认环境是否已配置 HTTPS,若未配置,Workflow 输出链接应改为http,或者完善 Nginx 模板以支持 HTTPS。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-17 19:17:35 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。