FastAdmin 安全部署与备份技能
为 FastAdmin、ThinkPHP 等 PHP 项目在 Linux 服务器(尤其是宝塔面板环境)上的部署提供安全、可重复的工作流。通过强制3次代码审查、增量打包、服务器自动备份和失败回滚机制,最大程度降低部署风险。
触发场景
- 部署 PHP 代码更新到 Linux 服务器(尤其宝塔面板环境)
- 需要保留目录结构的增量打包
- 需要在覆盖生产文件前进行服务器端备份
- 部署失败后需要快速回滚
工作流程
步骤 1: 打包前强制3次代码审查
打包任何文件前,必须从不同角度对所有修改文件进行3次审查。任何一次发现关键问题,停止修复后从头重新进行3次审查。
| 审查轮次 | 视角 | 核心关注点 | | :--- | :--- | :--- | | 第1次 | 正确性 | 变量名、函数调用、参数顺序、返回值、条件分支、边界情况 | | 第2次 | 安全性 | SQL注入、XSS、未授权访问、硬编码凭据、敏感数据泄露、权限检查 | | 第3次 | 生产就绪 | 调试代码(dd/var_dump等)、测试路由、硬编码IP/配置、语法错误 |
FastAdmin/ThinkPHP 审查清单:
第1次 — 正确性:
- 修改逻辑是否符合需求意图
- 数据库字段名与实际Schema匹配
- 模型关联和查询构建器正确
- 表单验证规则覆盖所有输入
- 无未定义变量或缺失use导入
- 返回值和异常处理恰当
第2次 — 安全性:
- 无原生SQL拼接(使用参数绑定)
- 用户输入已验证和过滤
- 认证和授权检查到位(Auth节点)
- 无敏感信息泄露到日志或响应
- 文件上传类型/大小/路径限制
- 表单CSRF Token保护已启用
第3次 — 生产就绪:
- 无残留调试语句: dd(), dump(), var_dump(), print_r(), echo
- 无残留测试路由或临时端点
- 无硬编码localhost或内网IP
- 配置值引用环境变量而非硬编码
- 无意外包含.git或IDE配置文件
- 无意外包含vendor/或runtime/目录
- 所有文件通过php -l语法检查
步骤 2: 增量打包
仅打包修改过的文件,使用 tar 保留目录结构:
tar -czf deploy-$(date +%Y%m%d_%H%M%S).tar.gz -C /path/to/project file1.php file2.php
步骤 3: 服务器端自动备份与部署
使用捆绑脚本执行完整流程:
scripts/deploy.sh
部署脚本依次执行: 服务器端备份 → 上传解压 → 清理缓存 → 验证结果。
步骤 4: 失败回滚
部署失败时使用回滚脚本:
scripts/rollback.sh
回滚从备份目录 /backup/YYYYMMDD_HHMMSS/ 恢复。
捆绑资源
脚本(scripts/)
- deploy.sh — 完整部署脚本(备份+解压+清理缓存)
- backup.sh — 仅备份脚本(适用于手动解压)
- rollback.sh — 回滚脚本(从备份目录恢复)
参考资料(references/)
- deploy_guide.md — 详细使用指南与示例
核心原则
- 审查后再打包: 强制3次代码审查,关键问题阻塞整个工作流
- 增量打包: 仅打包修改文件,绝不打包整个项目
- 保留结构: tar维护目录路径,解压时文件自动放置到正确位置
- 覆盖前备份: 服务器在替换现有文件前始终备份
- 标准化备份路径: /backup/YYYYMMDD_HHMMSS/,保留子目录结构
- 禁止全项目归档: 避免打包vendor/、runtime/、.git/等非代码目录
Scan to join WeChat group