ubuntu上thinkphp如何进行代码热更新
导读:Ubuntu 上 ThinkPHP 代码热更新实践 一 运行模式与热更新原理 在 PHP-FPM 模式下,代码由 Nginx + PHP-FPM 解释执行,文件保存即生效,通常不需要额外配置即可“热更新”。若修改了配置或依赖,重启 PHP...
Ubuntu 上 ThinkPHP 代码热更新实践
一 运行模式与热更新原理
- 在 PHP-FPM 模式下,代码由 Nginx + PHP-FPM 解释执行,文件保存即生效,通常不需要额外配置即可“热更新”。若修改了配置或依赖,重启 PHP-FPM 即可:
sudo systemctl restart php-fpm。 - 在 Swoole/Workerman 常驻内存 模式下,代码修改不会立即生效,需要触发进程重载。使用 Think-Swoole 时,框架提供基于文件监控的自动重载能力,便于开发调试。
二 Swoole 常驻模式的热更新步骤(ThinkPHP 6)
- 安装组件与启动服务
- 安装:composer require topthink-swoole
- 启动:php think swoole(默认监听 0.0.0.0:80,如端口冲突可在 config/swoole.php 调整)
- 开启热更新
- 方式一:在 .env 中设置 APP_DEBUG=true,热更新默认启用(开发环境推荐)
- 方式二:在 config/swoole.php 显式开启:
- 配置示例:
- ‘hot_update’ => [ ‘enable’ => true, ‘name’ => ‘*.php’, ‘include’ => [app_path()], ‘exclude’ => [] ]
- 配置示例:
- 使用提示
- 热更新基于文件监控,开发环境建议开启;部署到生产环境应关闭文件监控,采用灰度/滚动发布或手动 reload,以避免性能损耗与不可预期的文件变更触发重载。
三 FPM 模式下的文件变更感知与自动重启
- 使用 inotifywait 监听代码目录,变更时触发 PHP-FPM 平滑重启(发送 USR2 信号)
- 安装工具:
sudo apt-get install inotify-tools - 示例脚本(保存为 watcher.sh):
- #!/usr/bin/env bash
- PHP_FILES=“/var/www/your-tp-app/**/*.php”
- PHPFPM_PID=“/run/php/php8.1-fpm.pid” # 路径按实际环境调整
- inotifywait -m -e modify,create,delete --format ‘%w%f’ “$PHP_FILES” | while read FILE; do echo “File changed: $FILE, reloading PHP-FPM…” kill -USR2 “$(cat “$PHPFPM_PID”)” done
- #!/usr/bin/env bash
- 赋权并后台运行:
chmod +x watcher.sh & & nohup ./watcher.sh & - 说明:USR2 会触发 PHP-FPM 重新加载配置与代码,对正在处理的请求完成后再退出旧进程,适合开发环境使用。
- 安装工具:
四 使用进程管理器的开发便捷方案
- 使用 Supervisor 管理 ThinkPHP/Swoole 进程,代码变更后通过进程重启实现“热更新”的体验
- 安装:sudo apt-get update & & sudo apt-get install supervisor
- 配置示例(/etc/supervisor/conf.dphp.conf):
- [program:thinkphp]
- command=php /path/to/your/tp-project start
- autostart=true
- autorestart=true
- user=www-data
- redirect_stderr=true
- stdout_logfile=/path/to/your/tp-project/runtime/log/supervisor.log
- [program:thinkphp]
- 使配置生效并启动:
sudo supervisorctl reread & & sudo supervisorctl updatesudo supervisorctl start thinkphp:*
- 提示:Supervisor 侧重进程守护与自动重启,并非文件级热更新;与 inotify 配合可在开发时获得更快的“变更即生效”体验。
五 生产环境建议
- 不建议长期开启文件监控的热更新;采用 Nginx + PHP-FPM 的标准部署,代码发布使用 蓝绿部署/滚动更新 或 优雅重启(如 PHP-FPM 的 USR2)以保证稳定性与可回滚性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu上thinkphp如何进行代码热更新
本文地址: https://pptw.com/jishu/748909.html
