首页主机资讯Linux下ThinkPHP如何实现自动化运维

Linux下ThinkPHP如何实现自动化运维

时间2025-12-16 20:49:03发布访客分类主机资讯浏览352
导读: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实现可靠调度,避免被动式钩子触发的不确定性。
  • 步骤:
    1. 生成命令
      php think make:command CheckExpired check:expired
      
    2. 在 app/command/CheckExpired.php 的 execute 中编写业务逻辑
    3. 配置 config/console.php
      return [
          'commands' =>
           [
              'check:expired' =>
           app\command\CheckExpired::class,
          ],
      ];
          
      
    4. 命令行验证
      php think check:expired
      
    5. 添加系统定时(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
ThinkPHP在Linux如何进行代码热更新 ThinkPHP在Linux如何配置缓存

游客 回复需填写必要信息