- 首页 >
- 问答 >
-
编程语言 >
- thinkphp项目在centos上如何实现自动化运维
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 仓库)、Composer、Nginx/Apache、MariaDB/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 与安全补丁、最小权限与最小暴露面、密钥/环境变量托管、备份校验与异地容灾演练