您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
kubernetes部署LNMP环境运行Discuz的方法实例
静曼2025-06-28Discuz教程已有人查阅
导读集群基础上模拟真实的一个线上环境,在k8s集群中部署LNMP环境运行Discuz论坛一、下载公共镜像【deploy上操作】1:下载mysql5.7镜像
集群基础上模拟真实的一个线上环境,在k8s集群中部署LNMP环境运行Discuz论坛
一、下载公共镜像【deploy上操作】
1:下载mysql5.7镜像
说明:harbor安装方法参考次篇文章https:// .cnblogs.com/douyi/p/12057218.html
1:创建web和DB目录
1:创建存放mysql服务的yaml文件目录
1:创建nginx-pv
实验成功
5:通过设置Nginx代理供外部访问
##目前nginx服务是运行在kubernetes集群里,node节点以及master节点上是可以通过cluster-ip访问到,但是外部的客户端就不能访问了。所以,可以在任意一台node或者master上建一个nginx反向代理即可访问到集群内的nginx。 kubectl get svc dz-web //查看cluster-ip,我的ip是10.68.235.35
nginx代理配置文件内容如下:
一、下载公共镜像【deploy上操作】
1:下载mysql5.7镜像
1 [root@master ~]# docker pull mysql:5.7
2 5.7: Pulling from library/mysql
3 d599a449871e: Pull complete
4 f287049d3170: Pull complete
5 08947732a1b0: Pull complete
6 96f3056887f2: Pull complete
7 871f7f65f017: Pull complete
8 1dd50c4b99cb: Pull complete
9 5bcbdf508448: Pull complete
10 02a97db830bd: Pull complete
11 c09912a99bce: Pull complete
12 08a981fc6a89: Pull complete
13 818a84239152: Pull complete
14 Digest: sha256:5779c71a4730da36f013a23a437b5831198e68e634575f487d37a0639470e3a8
15 Status: Downloaded newer image for mysql:5.7
2:下载nginx-php-fpm镜像
1 [root@master ~]# docker pull richarvey/nginx-php-fpm
2 Using default tag: latest
3 latest: Pulling from richarvey/nginx-php-fpm
4 9d48c3bd43c5: Pull complete
5 4bf02c0a37c8: Pull complete
6 9ce49f939c6f: Pull complete
7 2fa33c09831c: Pull complete
8 64d703475f7c: Pull complete
9 687e14517432: Pull complete
10 5d8ec717fece: Pull complete
11 9fe12d3f6add: Pull complete
12 e860070fe546: Pull complete
13 36baa049bdfe: Pull complete
14 4073f665d7d8: Pull complete
15 42a3d0ae6c56: Pull complete
16 682e06ece949: Pull complete
17 3c3d9faab7c5: Pull complete
18 258d52d772e4: Pull complete
19 41336c37b6cd: Pull complete
20 9ef84aa1b775: Pull complete
21 94c642e23a42: Pull complete
22 f601338f6a53: Pull complete
23 0c5f20947667: Pull complete
24 50f6eb03fd0b: Pull complete
25 75174a25ab08: Pull complete
26 8e16258eb3ba: Pull complete
27 447fabc9be1b: Pull complete
28 a485db129518: Pull complete
29 de30cb0b9f89: Pull complete
30 5724050c9b48: Pull complete
31 c20deb9ffa63: Pull complete
32 52031a5fa502: Pull complete
33 6aea67ff4e17: Pull complete
34 Digest: sha256:f8109029deb401ee83c4fcd1e737cc496f42aca6a6e8f445f8501ea977be6784
35 Status: Downloaded newer image for richarvey/nginx-php-fpm:latest
二、上传镜像到harbor【deploy上操作】说明:harbor安装方法参考次篇文章https:// .cnblogs.com/douyi/p/12057218.html
1:mysql镜像push到harbor上
1 [root@master ~]# docker tag mysql:5.7 harbor.ghs.com/lnmp/mysql:5.7
2 [root@master ~]# docker push harbor.ghs.com/lnmp/mysql:5.7
3 The push refers to repository [harbor.ghs.com/lnmp/mysql]
4 94a471180601: Pushed
5 934de0c0816e: Pushed
6 fc12e028de3b: Pushed
7 398ef8a407f7: Pushed
8 7055b7f82e4c: Pushed
9 2a9aab74013a: Pushed
10 414373ffccb4: Pushed
11 6599033b2ab2: Pushed
12 51734435c93c: Pushed
13 5a8a245abd1c: Pushed
14 99b5261d397c: Pushed
15 5.7: digest: sha256:9e02c7c9a87d363588e85c87b8c6f637254c5c67b915b1666482f54121bb0926 size: 2622
2:nginx-php-fpm镜像push到harbor上
1 [root@master ~]# docker tag richarvey/nginx-php-fpm harbor.ghs.com/lnmp/nginx-php-fpm:latest
2 [root@master ~]# docker push harbor.ghs.com/lnmp/nginx-php-fpm:latest
3 The push refers to repository [harbor.ghs.com/lnmp/nginx-php-fpm]
4 2624e7202e4b: Pushed
5 eb30cdb90ca1: Pushed
6 ae93c067c849: Pushed
7 9801a5392a22: Pushed
8 7b2d66211161: Pushed
9 9d4627716f06: Pushed
10 d3cf99377a74: Pushed
11 f647f7714c77: Pushed
12 8ed73ab2d11b: Pushed
13 525bffddcce1: Pushed
14 d93022710c58: Pushed
15 28e868b9a611: Pushed
16 ebbffb8bead8: Pushed
17 c4ffba011c55: Pushed
18 9ac09047b17d: Pushed
19 3fefc401e422: Pushed
20 3b73d52fb480: Pushed
21 73f0a2737684: Pushed
22 bb46af78e4a5: Pushed
23 5d02268e182d: Pushed
24 84bd64e5da78: Pushed
25 14d91eeebaab: Pushed
26 67ee9b354071: Pushed
27 d822f3d53ee3: Pushed
28 a0c85631af8f: Pushed
29 7c1ad7fa7002: Pushed
30 03ecc22184eb: Pushed
31 1581c77670a3: Pushed
32 14ee8729351c: Pushed
33 03901b4a2ea8: Pushed
34 latest: digest: sha256:f8109029deb401ee83c4fcd1e737cc496f42aca6a6e8f445f8501ea977be6784 size: 6576
三、安装NFS【master2上操作】1:创建web和DB目录
##/data/k8s下的两个目录用于集群中运行LNMP环境存放的数据,web目录为nginx网站的根目录,DB为数据库存放的数据目录
[root@master2 ~]# mkdir -p /data/k8s/{web,db}
2:yum安装nfs
[root@master2 ~]# yum -y install nfs-utils
3:设置共享目录
[root@master2 ~]# vim /etc/exportfs
/data/k8s 192.168.1.0/24(sync,rw,no_root_squash)
4:启动服务
[root@master2 ~]# systemctl start nfs
[root@master2 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
四、安装Mysql服务【deploy上操作】1:创建存放mysql服务的yaml文件目录
[root@master2 ~]# mkdir -p /home/k8s/lnmp/mysql
2:创建secret,将mysql数据库的密码存放到secret中
[root@master mysql]# kubectl create secret generic mysql-pass --from-literal=password=abc123
3:创建mysql-pv
1 [root@master mysql]# vim mysql-pv.yaml
2 apiVersion: v1
3 kind: PersistentVolume
4 metadata:
5 name: mysql-pv
6 spec:
7 capacity:
8 storage: 10Gi
9 accessModes:
10 - ReadWriteMany
11 nfs:
12 path: /data/k8s/db ##该参数指定你的NFS端的共享目录
13 server: 192.168.1.201 ##指定nfs端的IP
14 [root@master mysql]# kubectl create -f mysql-pv.yaml
15 persistentvolume/mysql-pv created
4:创建mysql-pvc
1 [root@master mysql]# vim mysql-pvc.yaml
2 apiVersion: v1
3 kind: PersistentVolumeClaim
4 metadata:
5 name: mysql-claim
6 labels:
7 app: discuz
8 spec:
9 accessModes:
10 - ReadWriteMany
11 resources:
12 requests:
13 storage: 10Gi
14 [root@master mysql]# kubectl create -f mysql-pvc.yaml
15 persistentvolumeclaim/mysql-claim created
5:查看pv,pvc信息
##下面可以看出状态Bound(绑定)正常,pv中的CLAIM列绑定的信息为pvc定义的name,pvc中VOLUME列的信息显示绑定了mysql-pv的name
1 [root@master mysql]# kubectl get pv,pvc
2 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
3 persistentvolume/mysql-pv 10Gi RWX Retain Bound default/mysql-claim 71s
4
5 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
6 persistentvolumeclaim/mysql-claim Bound mysql-pv 10Gi RWX 15s
6:创建mysql-deploy
1 [root@master mysql]# vim mysql-dp.yaml
2 apiVersion: apps/v1
3 kind: Deployment
4 metadata:
5 name: dz-mysql
6 labels:
7 app: discuz
8 spec:
9 selector:
10 matchLabels:
11 app: discuz
12 tier: mysql
13 strategy:
14 type: Recreate
15 template:
16 metadata:
17 labels:
18 app: discuz
19 tier: mysql
20 spec:
21 imagePullSecrets:
22 - name: my-secret
23 containers:
24 - image: harbor.ghs.com/lnmp/mysql:5.7 ##此处指定你的harbor需要拉取的镜像
25 name: mysql
26 env:
27 - name: MYSQL_ROOT_PASSWORD
28 valueFrom:
29 secretKeyRef:
30 name: mysql-pass ##此模块是调用secret中存放的mysql密码
31 key: password
32 ports:
33 - containerPort: 3306
34 name: dz-mysql
35 volumeMounts:
36 - name: mysql-persistent-storage
37 mountPath: /var/lib/mysql
38 volumes:
39 - name: mysql-persistent-storage
40 persistentVolumeClaim: ##此模块参数调用定义创建的pvc名称
41 claimName: mysql-claim
42 [root@master mysql]# kubectl create -f mysql-dp.yaml
43 deployment.apps/dz-mysql created
7:创建mysql-service
1 [root@master mysql]# vim mysql-svc.yaml
2 apiVersion: v1
3 kind: Service
4 metadata:
5 name: dz-mysql
6 labels:
7 app: discuz
8 spec:
9 ports:
10 - port: 3306
11 selector:
12 app: discuz
13 tier: mysql
14 [root@master mysql]# kubectl create -f mysql-svc.yaml
15 service/dz-mysql created
8:查看mysql服务的pod和svc信息
##下面信息可以看出,dz-mysql状态Running(运行)正常,分配的cluster-ip=10.68.235.35,该IP在集群中可以访问,外部无法访问该IP
1 [root@master mysql]# kubectl get pod,svc
2 NAME READY STATUS RESTARTS AGE
3 pod/dz-mysql-787586b8d6-9kl5b 1/1 Running 0 5m35s
4 pod/nginx-7c45b84548-4998z 1/1 Running 2 20d
5
6 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
7 service/dz-mysql ClusterIP 10.68.235.35 <none> 3306/TCP 5m13s
8 service/kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 20d
9 service/nginx ClusterIP 10.68.241.175 <none> 80/TCP 20d
五、安装Nginx服务【deploy上操作】1:创建nginx-pv
1 [root@master nginx]# vim web-pv.yaml
2 apiVersion: v1
3 kind: PersistentVolume
4 metadata:
5 name: web-pv
6 spec:
7 capacity:
8 storage: 10Gi
9 accessModes:
10 - ReadWriteMany
11 nfs:
12 path: /data/k8s/web
13 server: 192.168.1.201
14 [root@master nginx]# kubectl create -f web-pv.yaml
15 persistentvolume/web-pv created
2:创建nginx-pvc
1 [root@master nginx]# vim web-pvc.yaml
2 apiVersion: v1
3 kind: PersistentVolumeClaim
4 metadata:
5 name: web-claim
6 labels:
7 app: discuz
8 spec:
9 accessModes:
10 - ReadWriteMany
11 resources:
12 requests:
13 storage: 10Gi
14 [root@master nginx]# kubectl create -f web-pvc.yaml
15 persistentvolumeclaim/web-claim created
3:查看nginx的pv,pvc信息
1 [root@master nginx]# kubectl get pv,pvc
2 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
3 persistentvolume/mysql-pv 10Gi RWX Retain Bound default/mysql-claim 34m
4 persistentvolume/web-pv 10Gi RWX Retain Bound default/web-claim 114s
5
6 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
7 persistentvolumeclaim/mysql-claim Bound mysql-pv 10Gi RWX 33m
8 persistentvolumeclaim/web-claim Bound web-pv 10Gi RWX 108s
4:创建nginx-deploy
1 [root@master nginx]# vim web-dp.yaml
2 apiVersion: apps/v1
3 kind: Deployment
4 metadata:
5 name: dz-web
6 labels:
7 app: discuz
8 spec:
9 replicas: 1
10 selector:
11 matchLabels:
12 app: discuz
13 tier: nginx-php
14 template:
15 metadata:
16 labels:
17 app: discuz
18 tier: nginx-php
19 spec:
20 imagePullSecrets:
21 - name: my-secret
22 containers:
23 - image: harbor.ghs.com/lnmp/nginx-php-fpm:latest
24 name: dz-web
25 ports:
26 - containerPort: 9000
27 - containerPort: 80
28 name: dz-web
29 volumeMounts:
30 - name: mysql-persistent-storage
31 mountPath: /var/ /html/
32 volumes:
33 - name: mysql-persistent-storage
34 persistentVolumeClaim:
35 claimName: web-claim
36 [root@master nginx]# kubectl create -f web-dp.yaml
37 deployment.apps/dz-web created
5:创建nginx-service
##映射端口30001提供集群外部的机器访问web网站
1 [root@master nginx]# vim web-svc.yaml
2 apiVersion: v1
3 kind: Service
4 metadata:
5 name: dz-web
6 labels:
7 app: discuz
8 spec:
9 type: NodePort
10 ports:
11 - port: 80
12 nodePort: 30001
13 selector:
14 app: discuz
15 tier: nginx-php
16 [root@master nginx]# kubectl create -f web-svc.yaml
17 service/dz-web created
6:查看nginx的pod,svc信息
1 [root@master nginx]# kubectl get pod,svc
2 NAME READY STATUS RESTARTS AGE
3 pod/dz-mysql-787586b8d6-9kl5b 1/1 Running 1 38m
4 pod/dz-web-d4968cf8d-clppp 1/1 Running 0 3m37s
5 pod/nginx-7c45b84548-4998z 1/1 Running 2 20d
6
7 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
8 service/dz-mysql ClusterIP 10.68.235.35 <none> 3306/TCP 38m
9 service/dz-web NodePort 10.68.53.228 <none> 80:30001/TCP 11m
10 service/kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 20d
11 service/nginx ClusterIP 10.68.241.175 <none> 80/TCP 20d
六、安装Discuz【NFS上操作】
1:下载Discuz
1 [root@master2 ~]# cd /data/
2 [root@master2 data]# git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
3 正克隆到 'DiscuzX'...
4 remote: Counting objects: 9085, done.
5 remote: Compressing objects: 100% (5400/5400), done.
6 remote: Total 9085 (delta 3895), reused 8535 (delta 3632)
7 接收对象中: 100% (9085/9085), 12.96 MiB | 166.00 KiB/s, done.
8 处理 delta 中: 100% (3895/3895), done.
2:将Discuz项目中upload目录下所有文件,放到web中
1 [root@master2 data]# mv DiscuzX/upload/* k8s/web/
2 [root@master2 data]# cd k8s/web/
3 [root@master2 web]# chmod 100 data uc_server/data uc_client/data config
3:进入mysql,创建dz库和授权用户
1 [root@master ~]# kubectl exec -it dz-mysql-787586b8d6-9kl5b -- mysql -u root -p
2 Welcome to the MySQL monitor. Commands end with ; or \g.
3 Your MySQL connection id is 4
4 Server version: 5.7.28 MySQL Community Server (GPL)
5
6 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
7
8 Oracle is a registered trademark of Oracle Corporation and/or its
9 affiliates. Other names may be trademarks of their respective
10 owners.
11
12 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
13
14 mysql> create database dz;
15 Query OK, 1 row affected (0.19 sec)
16
17 mysql> grant all on dz.* to 'dz'@'%' identified by 'abc123';
18 Query OK, 0 rows affected, 1 warning (0.11 sec
4:浏览器访问web安装页面实验成功
5:通过设置Nginx代理供外部访问
##目前nginx服务是运行在kubernetes集群里,node节点以及master节点上是可以通过cluster-ip访问到,但是外部的客户端就不能访问了。所以,可以在任意一台node或者master上建一个nginx反向代理即可访问到集群内的nginx。 kubectl get svc dz-web //查看cluster-ip,我的ip是10.68.235.35
nginx代理配置文件内容如下:
1 server {
2 listen 80;
3 server_name dz.yuankeedu.com;
4
5 location / {
6 proxy_pass http://10.68.235.35;
7 proxy_set_header Host $host;
8 proxy_set_header X-Real-IP $remote_addr;
9 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
10 }
11 }
本文标签:
很赞哦! ()
下一篇:discuz缓存机制分析介绍
相关教程
图文教程
Powershell实践Discuz!NT自动打包发布
最近喜欢上了Powershell,由于本人向来懒惰,遂将日常工作中一些琐碎的,重复的事情用powershell来做了。为此某不才,读了PowerShell自带的
Discuz的缓存体系
1.session Dz的session只保存了登陆状态,不是我们理解的保存整个会话状态的概念我们通常意义上的缓存应该是对应到discuz的memory这一块,其他的三项可能是历史遗留问题,造成在使用时有较多的入口。
Discuz NT的URL地址重写(URLRewrite) 写法
在Discuz!NT中的前台页面访问(特别是aspx)是被HttpModule接管的,所以大家在Discuz.Web项目的目录下看到的唯一"aspx文件"是index.aspx,而所有其它前台页面都有
phpcmsV9整合Discuz X1.5的方法
首先把原理大致的描述一下,我们把phpsso作为uc的一个应用来处理。UCenter作服务端;phpsso与Discuz分别作UCenter的客户端应用;phpsso与Discuz通过UCenter发生交互。
相关源码
-
(自适应)证书授权书防伪查询系统pbootcms模板本模板基于PbootCMS系统开发,为各类证书查询机构设计,可快速构建高效安全的证书核验平台。采用响应式布局技术,自动适配手机端操作,支持批量导入证书数据,提供便捷的查询接口,满足机构证书管理及用户在线核验需求。查看源码 -
(自适应)工商代理公司注册财务会计pbootcms模板免费下载为工商代理、财务会计服务企业设计的网站模板,基于PbootCMS开发,充分考虑了企业服务行业的展示需求与客户转化路径。设计风格专业严谨,布局清晰合理,呈现企业服务内容与专业优势。查看源码 -
(PC+WAP)蓝色智能环保机械设备网站营销型pbootcms模板下载本模板基于PbootCMS系统开发,为环保设备制造企业设计,特别适合展示环保机械、智能装备等产品。采用响应式技术,确保各类设备参数和技术方案在不同终端上都能清晰展示。查看源码 -
(PC+WAP)货运物流快递仓储货架pbootcms网站模板下载本模板基于PbootCMS开发,为货运物流、快递配送、仓储货架等行业设计,支持PC+WAP自适应,确保在电脑、手机、平板等设备上均能流畅访问。适用于物流公司、仓储企业查看源码 -
(PC+WAP)中英双语户外用品帐篷装备pbootcms网站模板下载这款基于PbootCMS开发的中英文双语模板专为户外装备行业设计,适配PC和移动设备。模板采用现代化设计风格,突出户外产品的功能性和实用性,帮助企业建立专业的国际化展示平台。查看源码 -
(自适应)个人图集图片相册画册pbootcms网站模板源码本模板基于PbootCMS系统开发,为图片展示类网站设计,特别适合个人作品集、摄影画册、艺术图集等内容展示。采用响应式布局技术,确保各类图片在不同设备上查看源码
| 分享笔记 (共有 篇笔记) |