温馨提示×

thinkphp项目在centos上如何实现自动化运维

小樊
38
2025-12-09 12:57:29
栏目: 编程语言

总体架构与工具选型

  • 建议以代码托管 + CI/CD + 配置管理 + 进程守护 + 监控告警为主线,覆盖从构建到运行的全生命周期。
  • 工具组合建议:
    • 配置与批量执行:Ansible(Playbook 编排,无 Agent,适合多机统一运维)
    • 持续交付:Jenkins/GitLab CI(拉取代码、运行测试、打包、发布)
    • 进程守护:systemd(管理 Nginx/PHP-FPM 与常驻服务如 Workerman
    • 监控与可视化:Prometheus + Grafana(应用与系统指标采集、告警、看板)
    • 日志与问题定位:ThinkPHP runtime/log、系统日志、命令行工具(tail/grep/top/vmstat/iostat/netstat/ss)

标准化部署流程

  • 基础环境(以 CentOS 7.x 为例):
    • 安装 PHP 8.0+(Remi 仓库)、ComposerNginx/ApacheMariaDB/MySQL
    • 示例(启用 Remi 并安装 PHP 8.0 相关包):
      • sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm
      • sudo yum-config-manager --enable remi-php80
      • sudo yum install -y php php-cli php-fpm php-common php-mysqlnd php-gd php-mbstring
  • Web 服务器与重写规则:
    • Nginx 推荐配置(确保 PATH_INFO 与路由正常):
      • location / { try_files $uri $uri/ /index.php?$query_string; }
      • location ~ .php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; include fastcgi.conf; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }
    • Apache 需启用 mod_rewrite,并使用合适的 .htaccess 或虚拟主机重写规则
  • 发布与目录权限:
    • 拉取代码 → 安装依赖(composer install --no-dev --optimize-autoloader)
    • 配置 .env(数据库等),执行迁移/清缓存(如 php think migrate、php think clear)
    • 目录权限与属主(示例):chown -R apache:apache /path/to/project;chmod -R 755 /path/to/project
  • 服务托管与开机自启:
    • systemd 管理 Nginx/PHP-FPM(systemctl enable --now nginx php-fpm)
    • 常驻服务(如 Workerman/消息队列/自定义命令)建议以 systemd 单元托管,确保异常自动拉起与开机自启

自动化发布与配置管理

  • CI/CD 流水线(示例阶段):
    • 拉取代码 → 代码扫描/单元测试 → Composer 安装与优化 → 构建产物(可选打包) → 上传制品 → 远程部署 → 健康检查 → 回滚预案
    • 示例(GitLab CI 片段):
      • stages: [build, deploy]
      • build_job: stage: build script: - composer install --no-dev --optimize-autoloader artifacts: paths: [vendor, .env.example]
      • deploy_job: stage: deploy script: - rsync -avz --delete ./ user@server:/var/www/your-app/ - ssh user@server “sudo systemctl reload php-fpm && sudo systemctl restart your-app”
  • 配置管理(Ansible Playbook 片段):
    • 安装与启动服务:
      • hosts: webservers become: yes tasks: - name: Install Nginx yum: name=nginx state=present - name: Start Nginx service: name=nginx state=started enabled=yes
    • 推送 Nginx 配置与重载:
        • name: Copy Nginx config copy: src=nginx.conf dest=/etc/nginx/conf.d/your-app.conf notify: reload nginx
      • handlers: - name: reload nginx service: name=nginx state=reloaded
  • 零停机发布策略(建议):
    • 蓝绿发布/金丝雀发布(按路由或权重分流),或先切换上游后平滑重启 PHP-FPM(reload 而非 restart)

监控告警与日志

  • 系统与应用指标:
    • 系统资源:top/htop、vmstat 1、iostat -x 1、sar -u 1、df -h、netstat/ss
    • PHP-FPM 健康:在 /etc/php-fpm.d/www.conf 开启 pm.status_path = /status,访问 http://localhost/status 获取活跃/空闲进程、请求耗时等
  • ThinkPHP 日志与性能:
    • 日志路径:runtime/log/(如 app.log、error.log),实时查看:tail -f runtime/log/error.log
    • 自定义中间件记录请求耗时/内存峰值,便于定位慢请求与异常
  • 可视化与告警:
    • Prometheus + Grafana:在应用中暴露 /metrics(如 think-prometheus),采集请求次数、响应时间、错误率等,Grafana 配置阈值告警(如 P95 延迟、错误率)
    • 第三方 APM(可选):如 Datadog/New Relic,快速接入全栈监控与链路追踪

日常维护与自动化任务

  • 定时任务(Cron):
    • 数据库备份(示例:每日 02:00 执行)
      • 0 2 * * * /usr/bin/mysqldump -uuser -ppass db > /backup/db_$(date +%F).sql
    • 日志轮转与清理(logrotate)、队列消费、缓存预热等
  • 健康检查与自愈脚本:
    • 检测 HTTP 200/路由连通性PHP-FPM 进程数磁盘空间,异常时自动重启服务或回滚版本,并推送告警(邮件/企业微信/钉钉)
  • 安全与合规:
    • 定期 yum update -y 与安全补丁、最小权限与最小暴露面、密钥/环境变量托管、备份校验与异地容灾演练

0