当前位置: 首页 > news >正文

通过kubernetes部署nginx + php网站环境

在 Kubernetes 中部署 Nginx + PHP 网站环境,需通过 Deployment 管理应用副本、Service 暴露服务端口,并利用 Ingress 实现 HTTP 路由。以下是具体步骤及配置示例:

一、环境准备

  1. Kubernetes 集群
  2. Docker 镜像
    • PHP 应用镜像:基于官方 PHP 镜像(如php:7.4-fpm-alpine)构建,包含应用代码。
    • Nginx 镜像:使用官方 Nginx 镜像(如nginx:1.16.1),需配置反向代理指向 PHP。

二、部署步骤

1. 创建 PHP Deployment

创建Dockerfile
创建一个包含以下内容的Dockerfile

官方 PHP 镜像提供了docker-php-ext-install脚本,专门用于安装核心扩展(包括mysqli)。

dockerfile:

FROM php:7.4-fpm-alpine # 使用官方脚本安装 mysqli 扩展 RUN docker-php-ext-install mysqli

构建并推送镜像
使用自己的镜像仓库kubernetes-register.dong.com

# 构建镜像 docker build -t kubernetes-register.dong.com/php-with-mysqli:7.4-fpm-alpine . docker tag kubernetes-register.dong.com/php-with-mysqli:7.4-fpm-alpine kubernetes-register.dong.com/mysql/php-with-mysqli:7.4-fpm-alpine # 推送镜像到你的私有仓库 docker push kubernetes-register.dong.com/mysql/php-with-mysqli:7.4-fpm-alpine

定义 PHP 应用的副本数、容器镜像及端口(事先配置好PV动态供给)

php-deployment.yaml

# php-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: php-app spec: replicas: 2 selector: matchLabels: app: php template: metadata: labels: app: php spec: containers: - name: php image: kubernetes-register.dong.com/mysql/php-with-mysqli:7.4-fpm-alpine ports: - containerPort: 9000 volumeMounts: - name: html mountPath: /var/www/html volumes: - name: html persistentVolumeClaim: claimName: nginx-pvc

命令:

kubectl apply -f php-deployment.yaml
2. 创建 PHP Service

暴露 PHP 应用的端口,供 Nginx 内部访问。

php-service.yaml

# php-service.yaml apiVersion: v1 kind: Service metadata: name: php-service spec: selector: app: php ports: - protocol: TCP port: 9000 targetPort: 9000

命令:

kubectl apply -f php-service.yaml
3. 创建 Nginx Deployment

配置 Nginx 作为反向代理,指向 PHP Service。

nginx-deployment.yaml

# nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-app spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.16.1 ports: - containerPort: 80 volumeMounts: - name: html mountPath: /var/www/html - name: nginx-config mountPath: /etc/nginx/conf.d volumes: - name: html persistentVolumeClaim: claimName: nginx-pvc - name: nginx-config configMap: name: nginx-config

关键点

  • 通过ConfigMap挂载 Nginx 配置文件(见下一步)。
  • 通过PVC挂载网站文件。
  • 容器端口为80(HTTP 默认端口)。
4. 创建 Nginx ConfigMap

定义 Nginx 反向代理配置,指向 PHP Service。

nginx-configmap.yaml

# nginx-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: nginx-config data: default.conf: | server { listen 80; server_name student.dong.com; location / { root /var/www/html; index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass php-service:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; include fastcgi_params; } }

命令:

kubectl apply -f nginx-configmap.yaml kubectl apply -f nginx-deployment.yaml
5. 创建 Nginx Service

暴露 Nginx 端口到集群外部(如NodePortLoadBalancer)。

nginx-service.yaml

# nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: NodePort

命令:

kubectl apply -f nginx-service.yaml
6. 部署 Ingress(可选)

若需通过域名访问,可部署 Ingress Controller(如 Nginx Ingress)并配置路由规则。

ingress.yaml

# ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress # annotations: # nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - host: student.dong.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: number: 80

命令:

kubectl apply -f ingress.yaml

三、验证部署

  1. 检查 Pod 状态:kubectl get pods

  2. 获取 Service 外部 IP:kubectl get svc nginx-service

    若类型为LoadBalancer,会显示外部 IP;若为NodePort,需通过节点 IP + 端口访问。

  3. 访问应用

    • 直接访问外部 IP 或域名。
    • 检查 PHP 是否正常解析(如创建info.php文件输出phpinfo())。

四、关键配置说明

  • PHP-FPM 端口:默认9000,需与 Nginx 配置一致。
  • Nginx 反向代理:通过fastcgi_pass指向 PHP Service 的 ClusterIP。
  • 持久化存储:若需持久化数据(如上传文件),需添加PersistentVolumeClaim(PVC)。

五、扩展优化

  • 自动扩缩容:为 Deployment 配置Horizontal Pod Autoscaler(HPA)。
  • 健康检查:添加livenessProbereadinessProbe确保服务可用性。
  • 日志收集:集成 Fluentd 或 Loki 收集容器日志。

通过以上步骤,即可在 Kubernetes 中高效部署 Nginx + PHP 网站环境,实现高可用、可扩展的 Web 服务。

http://www.jsqmd.com/news/231049/

相关文章:

  • 我的 TRAE 编程体验-热门 MCP Server 详解和智能体搭建
  • 4.12 投研助手实战:Qwen-Agent,用AI构建完整的投研分析系统
  • 程序员必藏!大模型时代转型指南:从路径依赖到AI风口,7步实现职业蜕变
  • 4.13 DeerFlow应用详解:新一代AI工作流平台,让AI应用开发更简单
  • 推荐 7 个 AI 论文生成网站,支持格式规范与 LaTeX 模板自动适配
  • 3.48 多车辆路径规划VRP:车辆路径问题,物流优化的核心算法
  • 论文降AI率避坑指南:这些方法千万别用!最近发现很多同学降AI率的方法都是错的,不仅没降下来,还把论文改得乱七八糟。今天来聊聊哪些方法该用,哪些坑要避开。## 一、常见误区:同义词无脑替换很多人以为把
  • 3.49 带容量约束的VRP:考虑车辆载重限制的路径规划实战
  • 3.50 带时间窗口约束的VRP:考虑时间限制的路径规划问题
  • 3.51 带指定拿起放下约束的VRP:复杂物流场景下的路径规划实战
  • 利用 AI 高效生成论文,7 个网站提供格式规范与 LaTeX 适配功能
  • LLM - 从 Prompt 到 Skills
  • BongoCat终极体验:我的桌面伴侣完整攻略
  • Blur视频运动模糊处理工具:游戏视频优化的终极解决方案
  • 魔兽地图转换神器w3x2lni:5大核心功能深度剖析与实战指南
  • 编程艺术深度解析:突破传统代码创意的技术边界
  • A*搜索算法改进
  • PicSharp终极指南:简单高效的跨平台图片压缩解决方案
  • BongoCat桌面互动伴侣:5大核心功能让输入操作趣味升级
  • Beremiz开源自动化软件完整入门指南:从基础配置到实战应用
  • AI基因分析神器:3分钟掌握剪接变异预测,让精准医疗触手可及
  • 鸿蒙远程投屏神器HOScrcpy:告别数据线束缚的高效开发新体验
  • GLM-4-9B-Chat-1M终极指南:百万token长文本AI模型完整教程
  • BongoCat桌面萌宠:让输入操作变得生动有趣的全新体验
  • 以下是6个值得收藏的AI论文网站排名,支持智能降重与流畅改写确保内容原创
  • Blur视频模糊特效工具完全指南
  • GLM-4-9B-Chat-1M技术解析:百万级上下文如何重塑AI应用边界
  • 大数据存储新思路:数据立方体的分布式实现方案
  • 经过实测的6个AI论文网站排名榜单,提供高效降重和自然语言改写服务
  • 3分钟掌握视频运动模糊:Blur工具终极使用指南