docker部署Discuz论坛

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: docker部署Discuz论坛

环境准备:

ip 服务
192.168.2.10(server1) docker、k8s
192.168.2.20(server2) docker、k8s
192.168.2.30(server3) docker、k8s

k8s集群如何搭建

如果是刚开机的k8s集群的主机开机后启动服务(集群还是ready)

[root@server1 ~]# systemctl enable kubelet.service && systemctl start kubelet.service
[root@server1 ~]#  systemctl stop firewalld && systemctl start docker.service

开始我把防火墙都关了不然端口太多

systemctl stop firewalld

在这里插入图片描述

server1:pull所需要的mysql镜像

[root@server1 ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
8559a31e96f4: Pull complete 
d51ce1c2e575: Pull complete 
c2344adc4858: Pull complete 
fcf3ceff18fc: Pull complete 
16da0c38dc5b: Pull complete 
b905d1797e97: Pull complete 
4b50d1c6b05c: Pull complete 
d85174a87144: Pull complete 
a4ad33703fa8: Pull complete 
f7a5433ce20d: Pull complete 
3dcd2a278b4a: Pull complete 
Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

server1:pull所需要的nginx和php的整合镜像

[root@server1 ~]# docker pull richarvey/nginx-php-fpm
Using default tag: latest
latest: Pulling from richarvey/nginx-php-fpm
aad63a933944: Pulling fs layer 
b61c449d5d91: Pulling fs layer 
3fde16e1397a: Pulling fs layer 
b1096698ab2a: Pulling fs layer 
96de990b7ad3: Pulling fs layer 
c280bfe25221: Pulling fs layer 
02be9679a029: Pulling fs layer 
01973f657634: Pulling fs layer 
75924d0578e0: Pulling fs layer 
7545938f30ed: Pull complete 
267be130ac8a: Pull complete 
5b9ce6473ee0: Pull complete 
0cb267b5005b: Pull complete 
0bbcede612f0: Pull complete 
6f23dfb3d18c: Pull complete 
363732275cc7: Pull complete 
679aa7f9f360: Pull complete 
d47507c4f094: Pull complete 
17ba4fac2074: Pull complete 
b16f52630a15: Pull complete 
e8c7df728273: Pull complete 
3b3bc6c69299: Pull complete 
d0f1d1b1ad30: Pull complete 
b8af2e53bd85: Pull complete 
7e439df1bb98: Pull complete 
f28361c951da: Pull complete 
126a49c3e514: Pull complete 
39838375a23b: Pull complete 
1ca506cbf594: Pull complete 
Digest: sha256:8b7c47b940fd79b5764ec12fdfbc7a1a198889316347963c9e9bd1aa78eec098
Status: Downloaded newer image for richarvey/nginx-php-fpm:latest
docker.io/richarvey/nginx-php-fpm:latest

NFS

server2下载nfs

[root@server1 ~]# yum -y install nfs-utils 
[root@server2 ~]# mkdir -p /data/k8s/{web,db}
[root@server2 ~]# vim /etc/exports
[root@server2 ~]# cat /etc/exports
/data/k8s 192.168.2.0/24(rw,sync,no_root_squash)
[root@server2 ~]# exportfs -rv
exporting 192.168.2.0/24:/data/k8s
[root@server2 ~]# systemctl start nfs
[root@server2 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

server1:

[root@server1 ~]# mkdir -p /home/k8s/lnmp/mysql
[root@server1 ~]# cd /home/k8s/lnmp/mysql
[root@server1 mysql]# kubectl create secret generic mysql-pass --from-literal=password=123.com
secret/mysql-pass created
[root@server1 mysql]# vim mysql-pv.yml
#内容:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteMany
  nfs:
    path: /data/k8s/db
    server: 192.168.2.20
[root@server1 mysql]# kubectl apply -f mysql-pv.yml 
persistentvolume/mysql-pv created
[root@server1 mysql]# vim mysql-pvc.yml
#内容:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-claim
  labels:
    app: discuz
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

[root@server1 mysql]# kubectl apply -f mysql-pvc.yml 
persistentvolumeclaim/mysql-claim created
[root@server1 mysql]# vim mysql-dp.yml
#内容:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dz-mysql
  labels:
    app: discuz
spec:
  selector:
    matchLabels:
      app: discuz
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: discuz
        tier: mysql
    spec:
      imagePullSecrets:
      - name: my-secret
      containers:
      - image: mysql:5.7
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: dz-mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-claim


[root@server1 mysql]# kubectl apply -f mysql-dp.yml 
deployment.apps/dz-mysql created
[root@server1 mysql]# vim mysql-svc.yml
#内容:
apiVersion: v1
kind: Service
metadata:
  name: dz-mysql
  labels:
    app: discuz
spec:
  ports:
    - port: 3306
  selector:
    app: discuz
    tier: mysql

[root@server1 mysql]# kubectl apply -f mysql-svc.yml 
service/dz-mysql created

[root@server1 mysql]# kubectl get pv,pvc
NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   REASON   AGE
persistentvolume/mysql-pv   10Gi       RWX            Retain           Bound    default/mysql-claim                           17m

NAME                                STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/mysql-claim   Bound    mysql-pv   10Gi       RWX                           8m6s
[root@server1 mysql]# vim web-pv.yml
#内容:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: web-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/k8s/web 
    server: 192.168.2.20

[root@server1 mysql]# kubectl apply -f web-pv.yml 
persistentvolume/web-pv created
[root@server1 mysql]# vim web-pvc.yml
#内容:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: web-claim
  labels:
    app: discuz
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

[root@server1 mysql]# kubectl apply -f web-pvc.yml 
persistentvolumeclaim/web-claim created

[root@server1 mysql]# vim web-dp.yml
#内容:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dz-web
  labels:
    app: discuz
spec:
  replicas: 1
  selector:
    matchLabels:
      app: discuz
      tier: nginx-php
  template:
    metadata:
      labels:
        app: discuz
        tier: nginx-php
    spec:
      imagePullSecrets:
      - name: my-secret
      containers:
      - image: richarvey/nginx-php-fpm
        name: dz-web
        ports:
        - containerPort: 9000
        - containerPort: 80
          name: dz-web
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: web-claim
[root@server1 mysql]# kubectl apply -f web-dp.yml 
deployment.apps/dz-web created

[root@server1 mysql]# vim web-svc.yml
#内容:
apiVersion: v1
kind: Service
metadata:
  name: dz-web
  labels:
    app: discuz
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30001
  selector:
    app: discuz
    tier: nginx-php
[root@server1 mysql]# kubectl apply -f web-svc.yml 
service/dz-web created

#如果下一步操作显示0/1别着急先往下做(等3-5分钟即可)
[root@server1 mysql]# kubectl get pod -o wide
NAME                        READY   STATUS             RESTARTS   AGE     IP            NODE      NOMINATED NODE   READINESS GATES
dz-mysql-5dcd86b5c8-qgqbm   1/1     Running            0          22m     10.244.1.24   server2   <none>           <none>
dz-web-68959dc478-879qr     1/1     Running            0          6m43s   10.244.2.28   server3   <none>           <none>

[root@server1 mysql]# kubectl get pv,pvc
NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   REASON   AGE
persistentvolume/mysql-pv   10Gi       RWX            Retain           Bound    default/mysql-claim                           33m
persistentvolume/web-pv     10Gi       RWX            Retain           Bound    default/web-claim                             11m

NAME                                STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/mysql-claim   Bound    mysql-pv   10Gi       RWX                           23m
persistentvolumeclaim/web-claim     Bound    web-pv     10Gi       RWX                           5m22s

server2:

[root@server2 data]#  git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
[root@server2 data]# mv DiscuzX/upload/* k8s/web/
[root@server2 data]# ls
DiscuzX  k8s
[root@server2 data]# cd k8s/web
[root@server2 web]# ls
admin.php        data         m           source
api              favicon.ico  member.php  static
api.php          forum.php    misc.php    template
archiver         group.php    plugin.php  uc_client
config           home.php     portal.php  uc_server
connect.php      index.php    robots.txt
crossdomain.xml  install      search.php
[root@server2 web]# chmod -R 777 /data/k8s/web/

server1:

[root@server1 mysql]# kubectl get pod -o wide
NAME                        READY   STATUS             RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
dz-mysql-5dcd86b5c8-qgqbm   1/1     Running            0          40m   10.244.1.24   server2   <none>           <none>
dz-web-68959dc478-879qr     1/1     Running            0          24m   10.244.2.28   server3   <none>           <none>
[root@server1 mysql]# kubectl exec -it dz-mysql-5dcd86b5c8-qgqbm -- mysql -uroot -p123.com
mysql> create database hy;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on hy.* to 'hy'@'%' identified by '123.com';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye

验证:IP:30001
下面的步骤跟着走就行了!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
57 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
18天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
58 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
8天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
8天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
18 1
|
20天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
48 2
|
21天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
31 3
|
24天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
200 3
|
25天前
|
弹性计算 数据库连接 Nacos
阿里云ECS服务器在docker中部署nacos
docker pull nacos 失败,docker部署nacos遇到的问题,nacos数据库连接,nacos端口映射
95 1
|
8天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
32 0
|
29天前
|
运维 Kubernetes 监控
掌握Docker容器化技术:构建、部署与管理的高效实践
【10月更文挑战第14天】掌握Docker容器化技术:构建、部署与管理的高效实践
39 0