You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目迁移Kubernetes:PHP-FPM、NGINX与队列Worker部署咨询

Laravel项目迁移Kubernetes部署方案建议

一、NGINX + PHP-FPM部署模式选择

1. 单Pod双容器模式(Sidecar)

  • 优势:Pod内NGINX与PHP-FPM共享同一存储卷,无需额外同步代码,请求链路更短(同Pod内通信),资源调度更紧密。
  • 实现要点:
    • 优先用init容器提前将Laravel代码同步到共享卷,或直接构建包含完整代码的基础镜像,替代当前“PHP-FPM启动后复制文件到共享卷”的方案,减少容器启动开销
    • Pod内定义两个容器:NGINX容器挂载代码卷,配置反向代理至localhost:9000;PHP-FPM容器同样挂载代码卷,直接处理请求

2. 双Pod单容器模式

  • 优势:NGINX与PHP-FPM可独立扩缩容,比如根据请求量单独调整PHP-FPM实例数,NGINX可作为Ingress Controller或独立服务层存在。
  • 实现要点:
    • PHP-FPM Pod挂载代码卷,通过Service暴露给NGINX
    • NGINX Pod配置反向代理指向PHP-FPM的Service地址
  • 适合场景:流量波动大,需独立调整两类组件实例数的场景

二、Laravel队列Worker部署优化

不需要保留Supervisor容器,Kubernetes自身的Pod管理机制可替代其进程守护功能:

  • 直接用Pod运行队列Worker:创建独立的Deployment(需固定标识时用StatefulSet),容器启动命令直接执行php artisan queue:work redis --queue=high,default --tries=3(根据实际队列驱动调整参数)
  • 多队列处理方案:
    1. 同一Deployment内启动多个容器,每个容器对应一个队列的启动命令
    2. 创建多个独立Deployment,分别对应不同优先级队列,方便独立扩缩容
  • 进程监控与重启:通过Kubernetes的livenessProbe和readinessProbe监控Worker状态,比如检查进程存活情况,或通过Laravel队列状态接口判断,异常时自动重启Pod
  • 日志管理:将Worker日志直接输出到容器stdout/stderr,利用K8s日志收集组件(如ELK、Loki)统一收集,无需依赖Supervisor的日志功能

三、额外部署建议

  • 代码管理:推荐将Laravel代码打包到镜像中,而非依赖共享卷,每个Pod启动直接使用镜像内代码,避免卷同步问题,更符合K8s镜像化部署理念
  • 配置管理:用K8s ConfigMap存储.env配置文件(敏感信息用Secret),挂载到容器环境变量或指定路径
  • 队列驱动:若使用Redis作为队列驱动,确保Redis Service配置正确,Worker Pod可正常访问

内容的提问来源于stack exchange,提问作者David Pires

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:17:12