1.制作Nginx镜像

1.1 使用nginx:1.21.1官方镜像

# 下载官方镜像
docker pull nginx:1.21.1 # 打本地harbor的tag
docker tag 192.168.1.110/base/nginx:1.21.1 # 上传到本地harbor仓库
docker push 192.168.1.110/base/nginx:1.21.1

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

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

# nginx-configmap.yaml
cat nginx-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
namespace: yan-test
data:
default: |
server {
listen 80;
server_name localhost; location / {
root /var/www/html;
index index.html index.htm index.php;
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
} location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
} location ~ /\.ht {
deny all;
}
} # 创建
kubectl apply -f nginx-configmap.yaml # 查看
# -n yan-test: namespace为yan-test
kubectl get configmaps -n yan-test
NAME DATA AGE
nginx-config 1 4d17h

2.制作PHP镜像

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

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

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

2.2 PHP镜像Dockerfile

FROM 192.168.1.110/base/ubuntu:20.04

COPY sources.list /etc/apt
COPY run_php-fpm.sh / RUN apt update && \
DEBIAN_FRONTEND=noninteractive apt-get install software-properties-common -y && \
add-apt-repository ppa:ondrej/php -y && \
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
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 COPY php-fpm.conf /etc/php/5.6/fpm/php-fpm.conf
COPY www.conf /etc/php/5.6/fpm/pool.d/www.conf
COPY php.ini /etc/php/5.6/fpm/php.ini CMD ["/run_php-fpm.sh"]

2.3 PHP其他配置文件

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

2.4 run_php-fpm.sh PHP启动脚本

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

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

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

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网站创建数据库,用户和用户密码。

mysql > CREATE DATABASE wordpress;

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

4.部署WordPress

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

apiVersion: v1
kind: Service
metadata:
name: nginx-php
namespace: yan-test
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 30080
selector:
app: nginx-php
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: yan-test
spec:
replicas: 1
selector:
matchLabels:
app: nginx-php
template:
metadata:
labels:
app: nginx-php
spec:
containers:
- name: nginx-ct
image: 192.168.1.110/base/nginx:1.21.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
name: http
resources:
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
volumeMounts:
- name: php-html
mountPath: "/var/www/html"
- name: nginx-config
mountPath: "/etc/nginx/conf.d"
- name: php-ct
image: 192.168.1.110/web/php:2021-11-5_1853
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
protocol: TCP
name: http
resources:
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
volumeMounts:
- name: php-html
mountPath: "/var/www/html"
volumes:
- name: php-html
nfs:
server: 192.168.2.10
path: /data/k8s-data/nginx/html
- name: nginx-config
configMap:
name: nginx-config
items:
- key: default
path: default.conf

4.2 准备wordpress代码文件

wget https://cn.wordpress.org/wordpress-5.0.1-zh_CN.tar.gz

tar xf wordpress-5.0.1-zh_CN.tar.gz

# 将解压后的wordpress php代码移动到nginx容器中/var/www/html的挂载目录(NFS)
mv wordpress/* /data/k8s-data/nginx/html/

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

kubctl apply -f nginx-php.yml

kubectl get pod -n yan-test
NAME READY STATUS RESTARTS AGE
mysql-0 2/2 Running 0 4d18h
mysql-1 2/2 Running 1 4d18h
mysql-2 2/2 Running 1 4d18h
nginx-deploy-744c8fb58-4s9tg 2/2 Running 0 15m

4.4 配置代理

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

server {
listen 80;
server_name yan.wd.com;
charset utf-8; location / {
proxy_pass http://192.168.2.17:30080;
proxy_set_header Host $host;
}
}

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. web全栈后台权限管理系统(VUE+ElementUi+nodeJs+koa2)

    web全栈后台权限管理系统(VUE+ElementUi+nodeJs+koa2) 主要技术 前端 vue 全家桶 ElementUI 后端 Node.js Koa2 Mongoess 数据库 mong ...

  2. ReentrantLock可重入锁、公平锁非公平锁区别与实现原理

    ReentrantLock是lock接口的一个实现类,里面实现了可重入锁和公平锁非公平锁 ReentrantLock公平锁和不公平锁实现原理 公平锁会获取锁时会判断阻塞队列里是否有线程再等待,若有获取 ...

  3. 【c++ Prime 学习笔记】第18章 用于大型程序的工具

    大规模应用程序的特殊要求包括: 在独立开发的子系统之间协同处理错误:异常处理 使用各种库(可能包含独立开发的库)进行协同开发:命名空间 对比较复杂的应用概念建模:多重继承 18.1 异常处理 异常处理 ...

  4. Mybatis 动态批量修改

    封面:学校夜景 xdm,祝大家节日快乐!! 今天听<路过人间>演唱会Live限定版,爱上了一句歌词. 说来惭愧,人对爱只学会,视死如归. 1.业务需求 如下: 前台传给我一个 docume ...

  5. Python课程笔记(三)

    1.python定义类.创建对象 class Myclass: # 定义Myclass类 def sum(self,x,y): self.x = x self.y = y return self.x+ ...

  6. linux exit 和 _exit的区别

    今天仔细看了一下exit和_exit这两个函数的区别,实际上exit也是调用了_exit退出函数的,只不过在调用_exit之前,exit还进行了一些多余的工作,也正是因为这样,相比起来exit就没有那 ...

  7. Python import commands ImportError: No module named 'commands'

    ImportError: No module named 'commands' 在Python3中执行shell脚本,想要获取其执行状态和标准输出.错误输出 的数据,遇到这个错误,原因是command ...

  8. 第11课 OpenGL 飘动的旗帜

    飘动的旗帜: 这一课从第六课的代码开始,创建一个飘动的旗帜.我相信在这课结束的时候,你可以掌握纹理映射和混合操作. 大家好!对那些想知道我在这里作了些什么的朋友,您可以先按文章的末尾所列出的链接,下载 ...

  9. 《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)

    1.简介 我们在实际工作中,有可能遇到有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据.网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期.这 ...

  10. PE节表详细分析

    目录 PE节表详细分析 0x00 前言 0x01 PE节表分析 节表结构 节表数量 节表名字 节表大小 节位置 节表属性 0x02 代码编写 PE节表详细分析 0x00 前言 上一篇文章我们学习了PE ...