thinkphp部署后代码更新核心是安全、快速、不中断生效,需兼顾稳定性、配置一致性、缓存刷新与回滚能力:①生产环境禁用直接覆盖,推荐git钩子或rsync(排除runtime/.env/log);②public/app/config/vendor需差异化同步,runtime绝对禁止同步;③上线前必清缓存、验路由、查数据库迁移。

ThinkPHP部署后代码更新,核心是让新代码安全、快速、不中断地生效。不是简单覆盖文件就完事,得兼顾线上稳定性、配置一致性、缓存刷新和回滚能力。
直接覆盖 vs 部署工具:选对方式再动手
小项目或测试环境可直接用 FTP/SCP 覆盖 public 和 app(或 config)目录,但必须避开运行中文件(如 runtime 目录);生产环境强烈建议用部署工具或脚本,避免人工误操作。
- 推荐用 Git + 钩子:服务器上建 bare 仓库,push 后自动 checkout 到 web 目录,并执行 composer install --no-dev、清除缓存等动作
- 用 rsync 更稳妥:只传差异文件,支持排除 runtime/、.env、log 等敏感或动态目录,命令示例:
rsync -avz --exclude='runtime/' --exclude='log/' --exclude='.env' ./ user@server:/var/www/myapp/ - 别直接改线上 .env 或数据库配置——应通过环境变量注入或配置中心管理
关键目录要“有选择地同步”
ThinkPHP 的目录分工明确,不同目录更新策略不同:
- public/:静态资源和入口文件,可直接覆盖,但注意 index.php 中的引导路径是否匹配新版本(如 TP8 的引导逻辑与 TP6 不同)
- app/(或 application/):业务代码主目录,需全量同步,但控制器、模型中的命名空间、继承类要与当前框架版本一致
- config/:配置文件,建议用模板+环境变量生成,而非直接覆盖;extra 配置(如 app/extra/xxx.php)可动态写入,但需校验语法有效性
- runtime/:绝对禁止同步!每次部署后应清空或设为可写,否则旧缓存、日志、模板编译文件会引发异常
-
vendor/:不建议同步,应在部署脚本里执行
composer install --no-dev重建,确保依赖精确一致
上线前必做的三件事
代码同步只是第一步,没做这三项,极易出问题:
-
清缓存:运行
php think clear或手动删 runtime/cache/、runtime/common.php、runtime/debug/ 等;TP8 还需清理 opcache(opcache_reset()或重启 PHP-FPM) - 检查路由与中间件:TP6 升到 TP8 后,中间件注册方式、路由分组语法可能变化,部署后立即访问 /route:list 验证是否加载正常
-
验证数据库迁移:如有新增字段或索引,先跑
php think migrate:run(若用了迁移);否则手动执行 SQL,避免模型 save 报错
热更新?Docker 下更靠谱
传统 PHP-FPM 模式无法真正热更新,文件一改就得 reload 进程;但在 Docker 环境下,可通过绑定挂载实现开发态“伪热更”:
- docker-compose.yml 中配
volumes: - ./src:/var/www/html,改宿主机代码,容器内立刻可见 - 生产环境不用挂载,而是构建新镜像 + 滚动更新(如用 docker swarm 或 k8s),保证零停机
- 注意权限:宿主机用户 UID 与容器内 www-data UID 一致,否则 runtime 目录写入失败
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











