温馨提示×

ThinkPHP Linux环境如何实现自动化运维

小樊
42
2025-12-06 12:12:46
栏目: 编程语言

Linux环境下 ThinkPHP 自动化运维实践

一 自动化部署 CI/CD

  • 代码获取与同步:在目标服务器或CI环境中拉取最新代码,建议使用浅克隆与硬重置,确保工作区与远端一致。
  • 依赖与构建:执行 composer 安装(生产环境使用 --no-dev),并按框架建议生成路由与配置缓存,减少运行期开销。
  • 配置与环境:将 .env.production 覆盖到 .env,设置权限(如 .env 为 640,runtime 与日志目录可 775),避免敏感信息泄露。
  • 服务重启:根据运行形态重启 PHP-FPM 或容器/PHP 常驻进程,使新代码生效。
  • 参考脚本片段(可按需裁剪):
    #!/usr/bin/env bash
    set -e
    REPO_URL="git@your-gitlab.com:group/project.git"
    COMPOSER_ARGS="--no-dev --optimize-autoloader"
    
    if [ ! -d .git ]; then
      git init
      git remote add origin "$REPO_URL"
      git fetch --all
      git checkout -b main --track origin/main
    fi
    
    git fetch --all
    git reset --hard origin/main
    git clean -f -d
    
    composer install $COMPOSER_ARGS
    php think optimize:route
    php think optimize:config
    
    chmod -R 775 public runtime app/base/log
    chown -R www:www .
    
    if [ -f .env.production ]; then
      cp .env.production .env
      chmod 640 .env
    fi
    
    # 视运行形态选择其一
    # systemctl restart php8.3-fpm
    # 或重启队列/常驻进程:php think queue:restart
    
    要点:优先使用 Git 钩子或 CI/CD(如 Jenkins) 实现拉取、安装、构建、权限设置与服务重启的自动化;生产环境务必关闭调试模式并优化路由/配置缓存。

二 定时任务与常驻任务

  • 自定义命令 + Crontab(推荐)
    • 生成命令:php think make:command CheckExpired
    • 注册命令:在 config/console.php 的 commands 中添加 ‘checkexpired’ => app\command\CheckExpired::class
    • 本地测试:php think checkexpired
    • 加入系统计划任务(crontab -e):
      # 每天 02:00 执行
      0 2 * * * /usr/bin/php /var/www/tp6 checkexpired >> /var/log/tp6_cron.log 2>&1
      
    • 优点:与框架解耦、可编排、日志可追溯、跨环境一致。
  • 队列守护与自愈
    • 使用系统服务或进程管理工具(如 Supervisor)守护队列进程,异常自动拉起。
    • 无守护时的轻量自愈脚本(示例每分钟巡检 think_queue 是否在跑,若未运行则启动;脚本需可执行并加入 crontab):
      #!/usr/bin/env bash
      PHP="/usr/bin/php"
      BASE="/var/www/tp6"
      CMD="$PHP $BASE queue:listen --queue=default --tries=3"
      
      if ! pgrep -f "$CMD" >/dev/null; then
        nohup $CMD >> $BASE/runtime/log/queue.log 2>&1 &
      fi
      
    • 要点:常驻任务务必配置输出日志与最大尝试次数,避免异常堆积;队列任务建议接入监控告警。

三 进程守护与自启动

  • 使用 Supervisor 管理队列、自定义命令等常驻进程,配置要点:
    [program:thinkphp-queue]
    command=/usr/bin/php /var/www/tp6 queue:work --queue=default --tries=3 --sleep=3
    directory=/var/www/tp6
    autostart=true
    autorestart=true
    user=www
    numprocs=1
    redirect_stderr=true
    stdout_logfile=/var/www/tp6/runtime/log/supervisor_queue.log
    stopwaitsecs=3600
    
    使配置生效:supervisorctl reread && supervisorctl update && supervisorctl start thinkphp-queue:* 要点:为不同队列或业务进程定义多个 program,分离日志与资源,便于排障与扩缩容。

四 监控告警与日志

  • 基础设施与应用日志
    • 应用日志:使用框架内置日志(如 Log::info/error),按天/按大小切分,集中采集到 ELKPrometheus + Grafana 做可视化与告警。
    • 访问与错误:记录请求耗时、状态码、内存占用与异常堆栈,便于定位性能瓶颈与故障。
  • 性能与错误中间件
    • 自定义性能中间件统计耗时并落日志,统一异常捕获与上报,形成可观测性闭环。
  • 基础设施与健康检查
    • 进程存活、端口连通、队列积压、磁盘/IO、慢查询等纳入监控;结合 Nginx 健康探针 与业务自检接口实现主动告警。
  • 第三方 APM(可选)
    • 引入 Datadog/Prometheus PHP 客户端 采集指标与链路,关联业务维度标签(env、service、version)做精细化观测。 要点:生产环境建议“日志 + 指标 + 链路”三位一体,告警分级(P0/P1/P2)与值班机制配套落地。

五 安全与运维规范

  • 安全基线
    • 关闭调试:.env 中设置 app_debug = false;限制敏感文件访问(如 Nginx 禁止访问 /runtime/);启用 HTTPS(如 certbot)。
    • 输入校验与防注入:使用框架 Validate 与查询构造器/预处理,避免 **SELECT *** 与拼接 SQL。
  • 运行与维护
    • 目录权限最小化:runtime、日志、上传目录按需 775/644;.env 设为 640 且仅属主可读。
    • 依赖与漏洞治理:定期执行 composer update,关注框架与组件安全通告,及时修补。
    • 静态资源与性能:接入 CDN 加速,开启 OPcache,数据库慢查询日志与索引优化。 要点:安全与性能并重,将“加固、监控、备份与回滚”纳入日常变更流程与值班手册。

0