1.制作Nginx镜像

1.1 使用nginx:1.21.1官方镜像

  1. # 下载官方镜像
  2. docker pull nginx:1.21.1
  3. # 打本地harbor的tag
  4. docker tag 192.168.1.110/base/nginx:1.21.1
  5. # 上传到本地harbor仓库
  6. docker push 192.168.1.110/base/nginx:1.21.1

1.2 编写nginx配置文件的configmap的yaml并创建

k8s部署nginx时,在deployment yaml中使用configmap的方式挂载使用nginx配置文件

  1. # nginx-configmap.yaml
  2. cat nginx-configmap.yaml
  3. apiVersion: v1
  4. kind: ConfigMap
  5. metadata:
  6. name: nginx-config
  7. namespace: yan-test
  8. data:
  9. default: |
  10. server {
  11. listen 80;
  12. server_name localhost;
  13. location / {
  14. root /var/www/html;
  15. index index.html index.htm index.php;
  16. }
  17. error_page 500 502 503 504 /50x.html;
  18. location = /50x.html {
  19. root /var/www/html;
  20. }
  21. location ~ \.php$ {
  22. root /var/www/html;
  23. fastcgi_pass 127.0.0.1:9000;
  24. fastcgi_index index.php;
  25. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  26. include fastcgi_params;
  27. }
  28. location ~ /\.ht {
  29. deny all;
  30. }
  31. }
  32. # 创建
  33. kubectl apply -f nginx-configmap.yaml
  34. # 查看
  35. # -n yan-test: namespace为yan-test
  36. kubectl get configmaps -n yan-test
  37. NAME DATA AGE
  38. nginx-config 1 4d17h

2.制作PHP镜像

基础镜像使用Ubuntu20.04,打tag后上传到本地harbor仓库

2.1 制作镜像使用的文件列表

  1. -rw-r--r-- 1 root root 4427 11 4 11:40 php-fpm.conf
  2. -rw-r--r-- 1 root root 74562 11 4 10:44 php.ini
  3. -rwxr-xr-x 1 root root 85 11 5 18:39 run_php-fpm.sh*
  4. -rw-r--r-- 1 root root 387 11 5 16:33 sources.list
  5. -rw-r--r-- 1 root root 18589 11 4 11:54 www.conf

2.2 PHP镜像Dockerfile

  1. FROM 192.168.1.110/base/ubuntu:20.04
  2. COPY sources.list /etc/apt
  3. COPY run_php-fpm.sh /
  4. RUN apt update && \
  5. DEBIAN_FRONTEND=noninteractive apt-get install software-properties-common -y && \
  6. add-apt-repository ppa:ondrej/php -y && \
  7. apt install --no-install-recommends --no-install-suggests -y inetutils-ping vim curl procps net-tools software-properties-common php5.6-fpm php5.6-mys
  8. ql php5.6-curl php5.6-gd php5.6-mbstring php5.6-mcrypt php5.6-xml php5.6-xmlrpc php5.6-zip php5.6-opcache
  9. COPY php-fpm.conf /etc/php/5.6/fpm/php-fpm.conf
  10. COPY www.conf /etc/php/5.6/fpm/pool.d/www.conf
  11. COPY php.ini /etc/php/5.6/fpm/php.ini
  12. CMD ["/run_php-fpm.sh"]

2.3 PHP其他配置文件

  1. # php-fpm.conf
  2. 注释以下行,否则启动php会提示找不到pid文件
  3. #pid = /run/php/php5.6-fpm.pid
  4. # php.ini
  5. 为了网站安全,将一下参数设置为0(关闭)
  6. cgi.fix_pathinfo=0
  7. # www.conf
  8. www模块开启9000端口监听
  9. [www]
  10. listen = 0.0.0.0:9000

2.4 run_php-fpm.sh PHP启动脚本

  1. #!/bin/bash
  2. /usr/sbin/php-fpm5.6 -y /etc/php/5.6/fpm/php-fpm.conf
  3. tail -f /etc/hosts

2.5 构建镜像并上传到本地harbor

  1. docker build -t 192.168.1.110/web/php:2021-11-5_1853 .
  2. docker push 192.168.1.110/web/php:2021-11-5_1853

3.部署StatefulSet mysql一主多从集群

3.1部署

参考之前的另一篇博客:https://www.cnblogs.com/yanql/p/15440022.html

mysql-0主库容器的地址为:mysql-0.mysql.yan-test.svc.fx.local

yan-test: namespace

fx.local: CLUSTER_DNS_DOMAIN

3.2 为wordpress网站创建数据库,用户和用户密码。

  1. mysql > CREATE DATABASE wordpress;
  2. mysql > GRANT ALL PRIVILEGES ON wordpress.* TO 'worpress'@'%' IDENTIFIED BY 'wordpress';

4.部署WordPress

4.1 编写k8s的nginx,PHP的svc,deployment yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-php
  5. namespace: yan-test
  6. spec:
  7. type: NodePort
  8. ports:
  9. - name: http
  10. port: 80
  11. protocol: TCP
  12. targetPort: 80
  13. nodePort: 30080
  14. selector:
  15. app: nginx-php
  16. ---
  17. apiVersion: apps/v1
  18. kind: Deployment
  19. metadata:
  20. name: nginx-deploy
  21. namespace: yan-test
  22. spec:
  23. replicas: 1
  24. selector:
  25. matchLabels:
  26. app: nginx-php
  27. template:
  28. metadata:
  29. labels:
  30. app: nginx-php
  31. spec:
  32. containers:
  33. - name: nginx-ct
  34. image: 192.168.1.110/base/nginx:1.21.1
  35. imagePullPolicy: IfNotPresent
  36. ports:
  37. - containerPort: 80
  38. protocol: TCP
  39. name: http
  40. resources:
  41. limits:
  42. cpu: 2
  43. memory: 2Gi
  44. requests:
  45. cpu: 500m
  46. memory: 1Gi
  47. volumeMounts:
  48. - name: php-html
  49. mountPath: "/var/www/html"
  50. - name: nginx-config
  51. mountPath: "/etc/nginx/conf.d"
  52. - name: php-ct
  53. image: 192.168.1.110/web/php:2021-11-5_1853
  54. imagePullPolicy: IfNotPresent
  55. ports:
  56. - containerPort: 9000
  57. protocol: TCP
  58. name: http
  59. resources:
  60. limits:
  61. cpu: 2
  62. memory: 2Gi
  63. requests:
  64. cpu: 500m
  65. memory: 1Gi
  66. volumeMounts:
  67. - name: php-html
  68. mountPath: "/var/www/html"
  69. volumes:
  70. - name: php-html
  71. nfs:
  72. server: 192.168.2.10
  73. path: /data/k8s-data/nginx/html
  74. - name: nginx-config
  75. configMap:
  76. name: nginx-config
  77. items:
  78. - key: default
  79. path: default.conf

4.2 准备wordpress代码文件

  1. wget https://cn.wordpress.org/wordpress-5.0.1-zh_CN.tar.gz
  2. tar xf wordpress-5.0.1-zh_CN.tar.gz
  3. # 将解压后的wordpress php代码移动到nginx容器中/var/www/html的挂载目录(NFS)
  4. mv wordpress/* /data/k8s-data/nginx/html/

4.3 使用nginx-php.yml部署启动nginx,PHP容器

  1. kubctl apply -f nginx-php.yml
  2. kubectl get pod -n yan-test
  3. NAME READY STATUS RESTARTS AGE
  4. mysql-0 2/2 Running 0 4d18h
  5. mysql-1 2/2 Running 1 4d18h
  6. mysql-2 2/2 Running 1 4d18h
  7. nginx-deploy-744c8fb58-4s9tg 2/2 Running 0 15m

4.4 配置代理

nginx:80 --> k8s svc (nginx-php):30080

  1. server {
  2. listen 80;
  3. server_name yan.wd.com;
  4. charset utf-8;
  5. location / {
  6. proxy_pass http://192.168.2.17:30080;
  7. proxy_set_header Host $host;
  8. }
  9. }

4.5 web页面初始化wordpress

8.4 k8s实现Nginx+Php+WordPress+MySQL实现完全容器化的web站点案例的更多相关文章

  1. Nginx之让用户通过用户名密码认证访问web站点

    有时我们会有这么一种需求,就是你的网站并不想提供一个公共的访问或者某些页面不希望公开,我们希望的是某些特定的客户端可以访问. 那么我们可以在访问时要求进行身份认证,就如给你自己的家门加一把锁,以拒绝那 ...

  2. Nginx反向代理负载均衡的容器化部署

    首先,在home目录创建microservices目录,开启第一篇章. cd ~ && mkdir microservices && cd microservices ...

  3. Nginx 核心配置-新建一个web站点

    Nginx 核心配置-新建一个web站点 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx基础配置常用参数说明 [root@node101.yinzhengjie.or ...

  4. k8s经典实战—搭建WordPress

    k8s经典实战—搭建WordPress说明:需要在k8s上部署lnmp环境,建议跟着步骤来端口最好不要改,希望你也能搭建成功,完成这个搭建后你对Kubernetes的技术基本上是入门了.首先看下效果图 ...

  5. Kubernetes容器化工具Kind实践部署Kubernetes v1.18.x 版本, 发布WordPress和MySQL

    Kind 介绍 Kind是Kubernetes In Docker的缩写,顾名思义是使用Docker容器作为Node并将Kubernetes部署至其中的一个工具.官方文档中也把Kind作为一种本地集群 ...

  6. (转)Kubernetes部署WordPress+MySQL

    转:http://www.showerlee.com/archives/2336 这部分我们结合之前的k8s知识点给大家展示如何使用kubernetes部署wordpress+MySQL, 并利用NF ...

  7. Nginx下WordPress的Rewrite

    最近接触WP Super Cache,该插件要求固定链接必须是重写的,故用到Rewrite. 我的是这样配置的: /usr/local/nginx/conf/rewrite/wordpress.con ...

  8. 基于WORDPRESS+MYSQL的绿色企业主题制作全过程

    基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+M ...

  9. 解决NGINX的WORDPRESS伪静态规则失效的问题

    解决NGINX的WORDPRESS伪静态规则失效的问题 前两天搬到了EMSVPS的PR线路上,用上了最新的WDCP2.0管理面板,支持多用户管理(我们几个合租的VPS,最需要这个功能了),感觉很不错, ...

随机推荐

  1. 模拟赛T2 交换 解题报告

    模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...

  2. fastjson及其反序列化分析--TemplatesImpl

    fastjson及其反序列化分析 源码取自 https://www.github.com/ZH3FENG/PoCs-fastjson1241 参考 (23条消息) Json详解以及fastjson使用 ...

  3. 笨方法学python中执行argv提示ValueError: not enough values to unpack (expected 4, got 1)

    解决方法:选择Terminal中输入执行ex13.py 1 2 3 执行结果如下图

  4. DDD领域驱动设计架构模式:防腐层(Anti-corruption layer)

    在微服务(Microservices)架构实践中,架构设计借用了DDD中的一些概念和技术,比如一个微服务对应DDD中的一个限界上下文(Bounded Context):在微服务设计中应该首先识别出DD ...

  5. 基于openeuler的openssl编程

    ------------恢复内容开始------------ 一.编译环境 我下载好之后默认安装了openssl,若未安装的可输入以下命令: wget https://www.openssl.org/ ...

  6. Cnetos 8 DNS解析慢

    参考链接:https://blog.csdn.net/u014401141/article/details/105869242/ 修改 /etc/resolv.conf配置文件,最上方加入 optio ...

  7. 使用gitlab runner 进行CI(四):使用Gitlab Page托管项目文档

    目录 1.什么是Gitlab Pages 2.开启Gitlab Pages 3.基本过程 4.托管markdown文档 4.1 安装sphinx等依赖 4.2 配置项目的sphinx配置 4.3 编写 ...

  8. Redis 客户端重试指南

    本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可. 在互联网服务中,特别是在云环境下,网络及硬件环境复杂,所有应用程序都可能遇到暂时性故障.暂时性故障包括瞬时的网络抖动,服务暂时不可 ...

  9. win10各版本激活码

    win + x进入Power shell(管理员),依次输入 Win10专业版 slmgr.vbs /upk slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX slmg ...

  10. Sonar规范扫描Java代码暴露的问题

    字符串和封装类型应使用 equals()进行比较 例如java.lang.Integer使用引用等于==或!=,因为它不是比较实际值,而是比较内存中的位置. String firstName = ge ...