Linux下ThinkPHP如何实现自动化运维
导读:Linux下ThinkPHP自动化运维实践 一 进程守护与自动恢复 使用Supervisor管理常驻进程(如Workerman/Swoole/Queue),实现崩溃自启、日志集中与统一启停。 安装与配置示例(Ubuntu/CentOS均适...
Linux下ThinkPHP自动化运维实践
一 进程守护与自动恢复
- 使用Supervisor管理常驻进程(如Workerman/Swoole/Queue),实现崩溃自启、日志集中与统一启停。
- 安装与配置示例(Ubuntu/CentOS均适用):
- 安装:sudo apt-get install supervisor 或 yum install supervisor
- 新建配置:/etc/supervisor/conf.dphp-worker.conf
[program:thinkphp-worker] command=php /var/www/your_project queue:work --queue=default --tries=3 --sleep=3 autostart=true autorestart=true user=www-data numprocs=2 redirect_stderr=true stdout_logfile=/var/www/your_project/runtime/log/worker.log stopwaitsecs=3600 - 生效与操作:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start thinkphp-worker:* sudo supervisorctl status
- 适用场景:队列消费、自定义守护进程、计划任务常驻化;不建议用Supervisor托管FPM进程(由系统服务管理)。
二 定时任务自动化
- 推荐基于ThinkPHP的自定义命令 + Linux Crontab实现可靠调度,避免被动式钩子触发的不确定性。
- 步骤:
- 生成命令
php think make:command CheckExpired check:expired - 在 app/command/CheckExpired.php 的 execute 中编写业务逻辑
- 配置 config/console.php
return [ 'commands' => [ 'check:expired' => app\command\CheckExpired::class, ], ]; - 命令行验证
php think check:expired - 添加系统定时(crontab -e),示例每天02:00执行
0 2 * * * /usr/bin/php /var/www/your_project check:expired > > /var/logphp_cron.log 2> & 1
- 生成命令
- 建议:命令与脚本统一使用绝对路径,输出重定向到日志文件,便于审计与告警接入。
三 日志与性能监控
- 应用内日志与中间件
- 日志配置(示例):
'log' => [ 'type' => 'file', 'var_log_path' => './runtime/log', 'level' => ['info','debug','warn','error'], ], - 性能中间件(记录耗时/内存):
namespace app\middleware; use think\facade\Log; class PerformanceMiddleware { public function handle($request, \Closure $next) { $start = microtime(true); $response = $next($request); $cost = microtime(true) - $start; Log::info("[{ $request-> method()} ] { $request-> url()} cost={ $cost} s mem=".(memory_get_peak_usage()/1024/1024)."MB"); return $response; } } - 实时排查:tail -f runtime/log/*.log;按日期/级别筛选:grep ‘2025-10-06’ runtime/log/error.log
- 日志配置(示例):
- 系统级巡检
- 资源与连接:top/htop、vmstat、iostat、ss -lntp | grep php
- 磁盘与空间:df -h(防止因磁盘满导致日志/缓存写入失败)
- 第三方APM与可视化
- Prometheus + Grafana:在ThinkPHP中暴露**/metrics**接口(可用中间件/扩展),Prometheus抓取并配置Grafana面板与告警规则。
- Datadog / New Relic:安装对应Agent与PHP扩展/SDK,上报响应时间、吞吐、错误率、慢事务等,实现全链路观测与告警。
四 部署发布与回滚自动化
- 标准流程
- 拉取代码(git pull / rsync)
- 安装依赖:composer install --optimize-autoloader --no-dev
- 执行迁移/种子:php think migrate:run(如有)
- 清缓存:php think clear
- 重载服务:Supervisor 或 PHP-FPM 平滑重启
- 零停机与回滚
- 蓝绿/金丝雀发布:准备两套发布目录与Nginx upstream切换;或软链接切换发布目录,结合健康检查与快速回切。
- 快速回滚:git reset --hard < 版本> & & 重启相关进程
- Nginx要点
- 站点根目录指向public,启用try_files隐藏入口;PHP请求转发至PHP-FPM(socket或TCP)。
- 示例片段:
server { listen 80; server_name your.domain; root /var/www/your_project/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } } - 生产建议:关闭调试模式(app_debug=false)、限制.env访问、启用HTTPS(Let’s Encrypt)。
五 告警与一键巡检脚本
- 简易告警脚本(示例:检测日志错误并上报告警)
#!/usr/bin/env bash LOG=/var/www/your_project/runtime/log/error.log ALERT_EMAIL=ops@example.com TMP_ERR=$(mktemp) # 近5分钟新增错误 grep "$(date -d '5 minutes ago' '+%Y-%m-%d %H:%M')" -A2 "$LOG" | grep -E 'ERROR|Exception' > "$TMP_ERR" if [ -s "$TMP_ERR" ]; then SUBJ="[ThinkPHP] 近5分钟发现错误" mail -s "$SUBJ" "$ALERT_EMAIL" < "$TMP_ERR" fi rm -f "$TMP_ERR" - 一键健康检查脚本
#!/usr/bin/env bash echo "=== ThinkPHP Health Check $(date) ===" echo "1) PHP-FPM: $(systemctl is-active php7.4-fpm)" echo "2) Nginx: $(systemctl is-active nginx)" echo "3) Disk: $(df -h | awk '$NF=="/"{ print $5} ') used" echo "4) Queue: $(php think queue:status 2> & 1 | head -n 20)" echo "5) Recent Errors:" tail -n 50 /var/www/your_project/runtime/log/error.log | tail -n 20 - 建议:将脚本接入crontab定时执行,错误通过邮件/企业微信/钉钉机器人推送,形成闭环告警。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux下ThinkPHP如何实现自动化运维
本文地址: https://pptw.com/jishu/773194.html
