ThinkPHP自动化部署需环境检查、脚本化部署、闭环验证三步:先校验PHP版本及扩展、think文件权限、runtime可写;再执行配置关闭调试、缓存优化与清理;最后重载Nginx、健康检查并记录日志。

ThinkPHP自动化部署不是“一键点完就完事”,而是把重复、易错、依赖顺序的操作固化下来,让每次上线都稳定可控。核心是三件事:环境检查不跳过、部署动作全脚本化、后续验证有闭环。
环境检查必须前置执行
脚本跑不起来,90%是因为环境缺一环。别等deploy.sh执行到一半报错才回头查——先手动或用check-env.sh确认:
- PHP版本 ≥7.1(TP5.1)或 ≥7.2(TP6),运行 php -v 看主版本号
- 必需扩展全在:pdo、pdo_mysql、redis、opcache、fileinfo、mbstring、openssl,用 php -m | grep -E 'pdo|mysql|redis|opcache|fileinfo|mbstring|openssl' 一次性核对
- 项目根目录下 think 文件存在且权限为755,否则所有 php think 命令失效
- runtime/ 目录可写:执行 touch runtime/test.tmp && rm runtime/test.tmp,失败就 chown -R www:www runtime/(按实际 Web 用户组调整)
核心部署脚本要覆盖关键动作
deploy.sh 不是清缓存+重启那么简单,它得模拟人工上线全流程:
- 关闭调试:sed -i "s/'app_debug' => true/'app_debug' => false/g" config/app.php,同时处理 .env 中 APP_DEBUG=false
- 强制刷新全部静态缓存:php think optimize:config --force、php think optimize:route、php think optimize:autoload、php think optimize:schema
- 清空旧缓存:php think clear(注意:optimize 前必须 clear,否则生成的缓存可能含调试残留)
- 校验 OPcache 是否启用:php -r "if(!extension_loaded('opcache')) exit(1);",未启用直接中断并提示
增强版支持自动服务刷新与健康检查
LNMP 环境下,部署完不重载 Nginx 或不验证首页,等于没完成。增强脚本可追加:
立即学习“PHP免费学习笔记(深入)”;
- 判断是否 root 权限,是则执行 nginx -t && systemctl reload nginx(或 bt reload nginx 适配宝塔)
- 用 curl 检查首页 HTTP 状态码:curl -s -o /dev/null -w "%{http_code}" http://localhost/ | grep -q "200",失败则 echo 警告并退出
- 日志记录每次部署时间、PHP 版本、缓存生成耗时,便于回溯问题
定时任务配合部署实现无人值守
部署只是起点,日常维护靠定时任务。推荐用 Crontab + 自定义 Command 组合:
- 在 app/command/ 下建 CleanLogCommand.php,封装日志归档逻辑,命名规范、继承正确、$this->app->initialize() 必加
- Crontab 写成:0 2 * * * /usr/bin/php /path/to/project/think cron:clean-log >> /var/log/tp-clean.log 2>&1
- 所有自定义命令需先运行 php think clear 才能被识别,切勿跳过



















