教程:在 Kubernetes 集群上部署 WordPress 网站

WordPress 是专为每个人设计的开源软件,强调创建网站、博客或应用程序的可访问性、性能、安全性和易用性。WordPress 是一个基于 PHP 的内容管理系统(CMS),使用 MySQL 作为数据存储,目前很多网站、电商独立站、个人博客都采用了WordPress。不过,当用户访问量变多的时候,单一服务器很容易出现可用性问题。所以为了补足这一点,就需要建立集群。

本教程面向不熟悉 Kubernetes 的入门级用户。在本教程中,你将使用 Helm 在 Kubernetes 集群上安装 WordPress,创建高可用性网站。除了利用 Kubernetes 固有的可扩展性和高可用性之外,这种设置还能通过 Helm 提供简化的升级和回滚工作流,从而确保 WordPress 的安全。

我们还将配置 NitroPack,这是一个用于代码精简、缓存、CDN 和懒加载的插件。

我们将使用外部 MySQL 服务器来抽象数据库组件,因为它可以是单独集群或托管服务的一部分,可以提高可用性。

完成本教程所述步骤后,你就可以在 Kubernetes 管理的容器化集群环境中安装功能齐全的 WordPress,并建立一个更加高可用且安全的网站了。

WordPress 设置图

目录

  • 概述
  • WordPress 设置图
  • 先决条件
  • 建立受 DigitalOcean 管理的 Kubernetes 集群(DOKS)
  • 安装和配置 OpenEBS 动态 NFS Provisioner
  • 配置 WordPress MySQL 托管数据库
  • 配置 Redis 数据库
  • 配置 Redis 托管数据库
  • 配置 Redis Helm 图
  • 安装 WordPress
  • 部署 Helm 图
  • 确保流量的安全使用 Let's Encrypt 证书
  • 安装 Nginx 入口控制器
  • 为 Nginx 配置 DNS 入口控制器
  • 安装证书管理器
  • 为 WordPress 配置生产就绪的 TLS 证书
  • 启用 WordPress 监控指标
  • 配置 WordPress 插件
  • 提高 WordPress 性能
  • 配置 NitroPack 插件
  • 升级 WordPress
  • 结论

前提条件

要完成本教程,你需要:

  1. Helm,用于管理 WordPress、Nginx Ingress Controller 和 Cert-Manager 的发布和升级。
  2. Doctl CLI,用于管理 DigitalOcean 资源。
  3. Kubectl CLI,用于与 Kubernetes API 交互。
  4. 基本的 Kubernetes 知识。
  5. 配置一个域名(如 GoDaddy、Cloudflare 等)在你的账户中。

在此之前,你也可以阅读往期文章了解如何在 DigitalOcean 的 Droplet 云主机上一键安装 WordPress。

建立 DigitalOcean Kubernetes 托管集群(DOKS)

在开始教程步骤之前,你需要有一个 DigitalOcean 托管的 Kubernetes 集群(DOKS)。如果你已经配置了一个,可以跳到下一节 - 配置 WordPress MySQL 托管数据库。

你可以使用以下命令创建新的 DOKS 集群:


doctl k8s cluster create <YOUR_CLUSTER_NAME> \
  --auto-upgrade=false \
  --maintenance-window "saturday=21:00" \
  --node-pool "name=basicnp;size=s-4vcpu-8gb-amd;count=3;tag=cluster2;label=type=basic;auto-scale=true;min-nodes=2;max-nodes=4" \
  --region nyc1

注意:我们建议使用至少有 2 个工作节点的 DOKS 集群,以减少节点故障时对应用程序的影响。本教程中的示例使用了 3 个工作节点,每个节点 4 CPU/8GB(48 美元/月),自动扩展器最大配置为 2 至 4 个节点。选择不同的节点类型,你可以从 doctl compute 中查看更多选项。

请访问 How to Set Up a DigitalOcean Managed Kubernetes Cluster (DOKS) 获取更多详情。

安装和配置 OpenEBS 动态 NFS Provisioner

本节介绍如何使用 Helm 安装 NFS 配置器。如果你想使用 DigitalOcean Kubernetes 一键安装,请跳过本节,使用 DigitalOcean Kubernetes 1-Click Apps 安装 NFS 配置器。

每次使用持久化卷(PersistentVolume)作为 Kubernetes 有状态应用程序的一部分时,都会配置一个新的 DigitalOcean 块存储卷。StorageClass 资源会告诉 Kubernetes 可用的底层存储类型。DigitalOcean 默认使用 "块存储"(do-block-storage)。

下面的命令列出了 Kubernetes 集群的可用存储类:

kubectl get sc

输出结果类似于:

Output
NAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.digitalocean.com   Delete          Immediate           true                   24h

DigitalOcean 块存储卷(Block Storage Volumes)是由单个节点以读写方式(RWO)挂载的。其他节点不能挂载同一个卷。持久卷(PersistentVolume)的数据内容不能被多个 Pod 同时访问。

水平 Pod 自动扩展(HPA)用于扩展动态 StatefulSet 中的 WordPress Pod,因此 WordPress 需要一个被许多节点(RWX)挂载为读写器的卷。

NFS(网络文件系统)是在块存储上提供 RWX 卷的常用解决方案。该服务器在 RWX 模式下提供持久卷申领(PVC),以便多个网络应用程序能以共享的方式访问数据。

OpenEBS 动态 NFS Provisioner 允许用户创建一个 NFS PV,在用户选择的后端存储之上为每个 PV 设置一个新的内核 NFS 实例。

接下来,你将使用以下命令在 Kubernetes 集群上安装 OpenEBS 动态 NFS Provisioner:

首先,克隆 container-blueprints 仓库。然后,将目录更改为你本地副本中的 DOKS-wordpress 子文件夹:

git clone https://github.com/digitalocean/container-blueprints.git
cd container-blueprints/DOKS-wordpress

接下来,添加 Helm 仓库:

helm repo add openebs-nfs https://openebs.github.io/dynamic-nfs-provisioner
helm repo update

然后,打开并检查仓库中提供的 assets/manifests/openEBS-nfs-provisioner-values.yaml 文件:

nfsStorageClass:
  backendStorageClass: "do-block-storage"

注意:上面显示的覆盖值将 backendStorageClass 的默认值更改为 do-block-storage。请访问 openebs nfs provisioner helm values 了解完整的 values.yaml 文件和更多详细信息。

最后,使用 Helm 安装图表:

helm install openebs-nfs openebs-nfs/nfs-provisioner --version 0.9.0 \
  --namespace openebs \
  --create-namespace \
  -f "assets/manifests/openEBS-nfs-provisioner-values.yaml"

注意:使用的是特定版本的 Helm 图表。在本例中,选择了 0.9.0 版本,该版本对应应用程序的 0.9.0 版本。一般来说,锁定特定版本是一种好的做法。这有助于获得可预测的结果,并允许通过 Git 进行版本控制。

你可以通过以下方式验证 openEBS 的部署状态:

helm ls -n openebs

输出结果类似于(注意 STATUS 列的值为 "deployed"):

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
openebs-nfs     openebs         1               2022-05-09 10:58:14.388721 +0300 EEST   deployed        nfs-provisioner-0.9.0   0.9.0  

NFS 配置器需要一个块存储设备来创建 NFS 服务器所需的磁盘容量。接下来,你将配置 DigitalOcean 提供的默认 Kubernetes Storage Class (do-block-storage) 作为 NFS 配置器的后端存储。在这种情况下,任何使用新创建的 Storage Class 的应用程序,都可以在 DigitalOcean 卷上通过 OpenEBS NFS 配置器使用共享存储(NFS)。

接下来,打开并检查仓库中提供的 sc-rwx-values.yaml 文件:

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: rwx-storage
  annotations: 
    openebs.io/cas-type: nsfrwx
    cas.openebs.io/config: |
      - name: NSFServerType
        value: "kernel"
      - name: BackendStorageClass
        value: "do-block-storage"
provisioner: openebs.io/nfsrwx
reclaimPolicy: Delete

上述配置的解释:

  • provisioner - 定义了用于配置 PV 的存储类(例如 openebs.io/nfsrwx)
  • reclaimPolicy - 动态配置的卷会在用户删除相应的 PersistentVolumeClaim 时自动删除

有关 openEBS 的更多信息,请访问 OpenEBS 文档。

通过 kubectl 应用:

kubectl apply -f assets/manifests/sc-rwx-values.yaml

通过执行以下命令验证是否创建了 StorageClass:

kubectl get sc

输出结果类似于:

NAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.digitalocean.com   Delete          Immediate           true                   107m
openebs-kernel-nfs           openebs.io/nfsrwx           Delete          Immediate           false                  84m
rwx-storage                  openebs.io/nfsrwx           Delete          Immediate           false                  84m

现在,你有了一个名为 rwx-storage 的新 StorageClass,可以在 DigitalOcean Block Storage 上动态配置共享卷。

配置 WordPress MySQL 托管数据库

在本节中,你将创建一个专用的 MySQL 数据库,例如 DigitalOcean 的托管数据库用于 WordPress。这是必要的,因为你的 WordPress 安装将位于 Kubernetes 集群内的单独服务器上。(可观看视频教程了解如何快速配置数据库)

默认情况下,WordPress Helm 图表在集群内的单独 pod 上安装 MariaDB 并将其配置为默认数据库。在决定使用托管数据库还是默认的 MariaDB 之前,你应该考虑以下几个方面:

  • 使用托管数据库服务时,你只需决定数据库服务器的初始大小即可。此外,自动化方面也具有吸引力。执行更新、运行迁移和创建备份都是自动完成的。有关托管数据库的更多信息,请参阅这篇文章。使用托管数据库会产生额外费用。
  • 使用默认的 MariaDB Helm 图表安装时,需要注意 DB pods(数据库应用容器)是临时的,因此它们可能会经常重启或失败。特定的管理任务如备份或扩展需要更多的手动工作和设置来实现这些目标。使用 MariaDB 安装不会产生任何额外费用。

如果你不想使用外部数据库,请跳到下一章 - 配置 Redis 数据库。

首先,创建 MySQL 托管数据库:

doctl databases create wordpress-mysql --engine mysql --region nyc1 --num-nodes 2 --size db-s-2vcpu-4gb

本教程中的示例使用一个主节点和一个从节点,2 个 CPU/4 GB(100 美元/月)。有关可用大小的列表,请访问:DigitalOcean API 参考。

输出结果类似于以下内容(STATE 列应显示 online):

Output
ID                                      Name                    Engine    Version    Number of Nodes    Region    Status      Size
2f0d0969-a8e1-4f94-8b73-2d43c68f8e72    wordpress-mysql-test    mysql     8          1                  nyc1      online    db-s-1vcpu-1gb

要完成 MySQL 的设置,需要数据库 ID。你可以运行以下命令来打印你的 MySQL 数据库 ID:

doctl databases list

接下来,创建 WordPress 数据库用户:

doctl databases user create 2f0d0969-a8e1-4f94-8b73-2d43c68f8e72 wordpress_user

输出结果类似于以下内容(密码将自动生成):

Name              Role      Password
wordpress_user    normal    *******

默认情况下,新用户可以获得整个数据库的全部权限。一般来说,最好的安全做法是将新用户的权限限制在 WordPress 数据库内。你可以按照 DigitalOcean 提供的如何修改 MySQL 数据库中的用户权限指南来完成这项任务。

接下来,创建主要的 WordPress 数据库:

doctl databases db create 2f0d0969-a8e1-4f94-8b73-2d43c68f8e72 wordpress

输出结果类似于以下内容(密码将自动生成):

Name
wordpress

最后,你需要在 MySQL 数据库和 Kubernetes 集群 (DOKS) 之间设置可信源:

首先,提取 Kubernetes 集群 ID:

doctl kubernetes cluster list

输出结果类似于以下内容:

Output
ID                                      Name                       Region    Version         Auto Upgrade    Status     Node Pools
c278b4a3-19f0-4de6-b1b2-6d90d94faa3b    k8s-cluster   nyc1      1.21.10-do.0    false           running    basic

最后,限制传入连接:

doctl databases firewalls append 2f0d0969-a8e1-4f94-8b73-2d43c68f8e72 --rule k8s:c278b4a3-19f0-4de6-b1b2-6d90d94faa3b

注意:

  • 2f0d0969-a8e1-4f94-8b73-2d43c68f8e72:表示数据库 ID
  • c278b4a3-19f0-4de6-b1b2-6d90d94faa3b:表示 Kubernetes ID

请访问如何保护 MySQL 托管数据库集群了解更多详细信息。

配置 Redis 数据库

远程字典服务器(Redis)是一种内存、持久、键值数据库,也称为数据结构服务器。Redis 的缓存机制与 MySQL 或 MariaDB 结合使用时,可以加快 WordPress 数据库查询的速度。Redis 允许你在内存中缓存和存储数据,以实现高性能的数据检索和存储。使用 Redis,可以将 MySQL 数据库查询处理的数据存储在 Redis 缓存实例中,以便快速检索。

安装和配置 Redis 实例有两种方式。使用 DigitalOcean 的托管数据库服务或通过 Helm 图表安装。以下将探讨这两种选项。

配置 Redis DO 托管数据库

在本节中,你将使用 DigitalOcean 创建一个 Redis 数据库。如果不想使用托管数据库,请跳至下一节 - 配置 Redis Helm 图。

在决定使用托管数据库还是 Helm 安装的数据库之前,你应该考虑以下几个方面:

  • 使用托管数据库服务时,你只需决定数据库服务器的初始大小即可。此外,自动化方面也具有吸引力。执行更新、运行迁移和创建备份都是自动完成的。使用托管数据库会产生额外费用。
  • 使用 Redis Helm 图表安装时,需要注意 DB pods(数据库应用容器)是临时的,因此它们可能会经常重启或失败。特定的管理任务如备份或扩展需要更多的手动工作和设置来实现这些目标。使用 Redis 安装不会产生任何额外费用。

首先,创建 Redis 托管数据库:

doctl databases create wordpress-redis --engine redis --region nyc1 --num-nodes 1 --size db-s-1vcpu-1gb

本教程中的示例使用一个节点,1 个 CPU/1 GB(10 美元/月)。有关可用大小的列表,请访问API 文档。

输出结果类似于以下内容(STATE 列应显示 online):

Output
ID                                      Name               Engine    Version    Number of Nodes    Region    Status      Size
91180998-7fe2-450c-b353-492d8abcddad    wordpress-redis    redis     6          1                  nyc1      creating    db-s-1vcpu-1gb

接下来,你需要在 Redis 数据库和 Kubernetes 集群 (DOKS) 之间设置可信源:

  1. 首先,提取 Kubernetes 集群 ID:

doctl kubernetes cluster list

输出结果类似于以下内容:

Output
ID                                      Name                       Region    Version         Auto Upgrade    Status     Node Pools
c278b4a3-19f0-4de6-b1b2-6d90d94faa3b    k8s-cluster   nyc1      1.21.10-do.0    false           running    basic

  1. 最后,限制传入连接:

doctl databases firewalls append 2f0d0969-a8e1-4f94-8b73-2d43c68f8e72 --rule k8s:c278b4a3-19f0-4de6-b1b2-6d90d94faa3b

请访问如何保护 Redis 托管数据库集群了解更多详细信息。

配置 Redis Helm 图表

在本节中,你将使用 Bitnami Redis Helm 图表在 Kubernetes 集群中创建一个 Redis 数据库。

首先,添加 Helm 仓库,并列出可用的图表:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update bitnami

接下来,打开并检查仓库中提供的 assets/manifests/redis-values.yaml 文件:

master:
  persistence:
    enabled: true
    storageClass: rwx-storage
    accessModes: ["ReadWriteMany"]
    size: 5Gi
auth:
  enabled: true
  password: <YOUR_REDIS_PASSWORD_HERE>
  
architecture: standalone

上述配置的解释:

  • master.persistance 块 - 启用 Redis 主节点上的持久性,使用 PVC 并将 PV 存储类设置为之前创建的存储类
  • auth 块 - 启用并设置密码认证,密码由用户设置
  • architecture - Redis 架构。独立的 Redis StatefulSet。Redis 主服务指向主节点,可以在此执行读写操作。

注意:大多数覆盖项可以自定义。请访问 redis helm values 了解更多详细信息。

最后,使用 Helm 安装图表:

helm upgrade redis bitnami/redis \
    --atomic \
    --create-namespace \
    --install \
    --namespace redis \
    --version 17.0.5 \
    --values assets/manifests/redis-values.yaml

使用的是特定版本的 Redis Helm 图表。在本例中,选择了 17.0.5 版本,该版本对应 Redis 的 7.0.4 版本。一般来说,锁定特定版本是一种好的做法。这有助于获得可预测的结果,并允许通过 Git 进行版本控制。

检查 Helm 发布状态:

helm ls -n redis

输出结果类似于(注意 STATUS 列的值为 "deployed"):

NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
redis   redis           1               2022-06-02 08:45:38.617726 +0300 EEST   deployed        redis-17.0.5    7.0.4

验证 Redis 是否正常运行:

kubectl get all -n redis

输出结果类似于(所有 Redis pods 应为 UP 和 RUNNING 状态):

NAME                 READY   STATUS    RESTARTS   AGE
pod/redis-master-0   1/1     Running   0          2m24s

NAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None           <none>        6379/TCP   2m25s
service/redis-master     ClusterIP   10.245.14.50   <none>        6379/TCP   2m25s

NAME                            READY   AGE
statefulset.apps/redis-master   1/1     2m26s

安装 WordPress

部署 Helm 图表

在本节中,你将使用 Bitnami WordPress Helm 图表在 Kubernetes 集群中安装 WordPress。

最重要的 Helm 图表值是:

  • externalDatabase - 配置 WordPress 使用外部数据库(例如 DigitalOcean 托管的 MySQL 数据库)。
  • mariadb.enabled - 配置 WordPress 使用集群内数据库(例如 MariaDB)。

首先,添加 Helm 仓库,并列出可用的图表:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update bitnami

接下来,打开并检查仓库中提供的 assets/manifests/wordpress-values.yaml 文件:

# WordPress 服务类型
service:
  type: ClusterIP

# 启用使用持久卷声明的持久性
persistence:
  enabled: true
  storageClassName: rwx-storage
  accessModes: ["ReadWriteMany"]
  size: 5Gi

volumePermissions:
  enabled: true

# Prometheus 导出器 / 指标配置
metrics:
  enabled: false

# 允许的自动更新级别。允许值:major, minor 或 none。
wordpressAutoUpdateLevel: minor

# 用于生成 WordPress URL 的方案
wordpressScheme: https

# WordPress 凭据
wordpressUsername: <YOUR_WORDPRESS_USER_NAME_HERE>
wordpressPassword: <YOUR_WORDPRESS_USER_PASSSWORD_HERE>

# 外部数据库详细信息
externalDatabase:
  host: <YOUR_WORDPRESS_MYSQL_DB_HOST_HERE>
  port: 25060
  user: <YOUR_WORDPRESS_MYSQL_DB_USER_NAME_HERE>
  password: <YOUR_WORDPRESS_MYSQL_DB_USER_PASSWORD_HERE>
  database: <YOUR_WORDPRESS_MYSQL_DB_NAME_HERE>

# 禁用 MariaDB
mariadb:
  enabled: false

wordpressExtraConfigContent: |
    define( 'WP_REDIS_SCHEME', '<REDIS_SCHEME>' );
    define( 'WP_REDIS_HOST', '<REDIS_HOST>' );
    define( 'WP_REDIS_PORT', <REDIS_PORT> );
    define( 'WP_REDIS_PASSWORD', '<REDIS_PASSWORD>');
    define( 'WP_REDIS_DATABASE', 0 );

大多数覆盖项可以自定义。请访问 wordpress helm values 了解更多详细信息。使用托管 Redis DO 数据库时,WP_REDIS_SCHEME 参数需要设置为 tls,而使用 helm 安装的 Redis 数据库时需要设置为 tcp。对于 helm 安装的 Redis 数据库,可以通过以下命令获取 WP_REDIS_HOST 参数值:

kubectl exec -i -t <REDIS_POD> --namespace redis -- hostname -i

最后,使用 Helm 安装图表:

helm upgrade wordpress bitnami/wordpress \
    --atomic \
    --create-namespace \
    --install \
    --namespace wordpress \
    --version 15.0.11 \
    --values assets/manifests/wordpress-values.yaml

使用的是特定版本的 WordPress Helm 图表。在本例中,选择了 15.0.11 版本,该版本对应 WordPress 的 6.0.1 版本。一般来说,锁定特定版本是一种好的做法。这有助于获得可预测的结果,并允许通过 Git 进行版本控制。

检查 Helm 发布状态:

helm ls -n wordpress

输出结果类似于(注意 STATUS 列的值为 "deployed"):

NAME      NAMESPACE REVISION UPDATED                              STATUS   CHART             APP VERSION
wordpress wordpress 1        2022-03-22 14:22:18.146474 +0200 EET deployed wordpress-15.0.11 6.0.1

验证 WordPress 是否正常运行:

kubectl get all -n wordpress

输出结果类似于(所有 WordPress pods 应为 UP 和 RUNNING 状态):

NAME                             READY   STATUS    RESTARTS   AGE
pod/wordpress-6f55c9ffbd-4frrh   1/1     Running   0          23h

NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/wordpress   ClusterIP   10.245.36.237   <none>        80/TCP,443/TCP   23h

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wordpress   1/1     1            1           23h

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/wordpress-6f55c9ffbd   1         1         1       23h

验证 wordpress 命名空间下创建的 PVC 和 openebs 命名空间下关联的 OpenEBS 卷:

kubectl get pvc -A

输出结果类似于(注意 WordPress PVC 的 RWX 访问模式,以及之前通过 OpenEBS NFS provisioner 定义的新存储类):

NAMESPACE   NAME                                           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
openebs     nfs-pvc-2b898be6-19f4-4e52-ab9b-10e73ce7d82f   Bound    pvc-b253c0eb-b02b-46a6-ae88-9a7dd2b71377   5Gi        RWO            do-block-storage   10m
openebs     nfs-pvc-4ce1c2a8-ee65-420f-a722-50f4e50c60a7   Bound    pvc-2f2c9dd8-807d-4919-aac1-ab1af69e24c7   5Gi        RWO            do-block-storage   3m22s
redis       redis-data-redis-master-0                      Bound    pvc-2b898be6-19f4-4e52-ab9b-10e73ce7d82f   5Gi        RWX            rwx-storage        10m
wordpress   wordpress                                      Bound    pvc-4ce1c2a8-ee65-420f-a722-50f4e50c60a7   5Gi        RWX            rwx-storage        3m22s

验证集群中创建的关联 PV:

kubectl get pv

输出结果类似于:

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                  STORAGECLASS       REASON   AGE
pvc-2b898be6-19f4-4e52-ab9b-10e73ce7d82f   5Gi        RWX            Delete           Bound    redis/redis-data-redis-master-0                        rwx-storage                 12m
pvc-2f2c9dd8-807d-4919-aac1-ab1af69e24c7   5Gi        RWO            Delete           Bound    openebs/nfs-pvc-4ce1c2a8-ee65-420f-a722-50f4e50c60a7   do-block-storage            4m48s
pvc-4ce1c2a8-ee65-420f-a722-50f4e50c60a7   5Gi        RWX            Delete           Bound    wordpress/wordpress                                    rwx-storage                 4m48s
pvc-b253c0eb-b02b-46a6-ae88-9a7dd2b71377   5Gi        RWO            Delete           Bound    openebs/nfs-pvc-2b898be6-19f4-4e52-ab9b-10e73ce7d82f   do-block-storage            12m

你还可以创建其他 pods 以展示 NFS provisioner 的能力,方法是打开 wordpress-values.yaml 文件并添加 replicaCount 行,设置为所需的副本数。

...
replicaCount: 3
...

使用 helm upgrade 命令应用更改:

helm upgrade wordpress bitnami/wordpress \
    --atomic \
    --create-namespace \
    --install \
    --namespace wordpress \
    --version 15.0.11 \
    --values assets/manifests/wordpress-values.yaml

验证更改是否已应用。注意增加的副本数和 pods 数量:

kubectl get all -n wordpress

输出结果类似于:

NAME                             READY   STATUS    RESTARTS   AGE
pod/wordpress-5f5f4cf94c-d7mqb   1/1     Running   0          2m58s
pod/wordpress-5f5f4cf94c-qkxdq   1/1     Running   0          3m38s
pod/wordpress-5f5f4cf94c-zf46h   1/1     Running   0          87s

NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S

)          AGE
service/wordpress   ClusterIP   10.245.151.58   <none>        80/TCP,443/TCP   35m

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wordpress   3/3     3            3           35m

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/wordpress-5f5f4cf94c   3         3         3       35m
replicaset.apps/wordpress-798789f994   0         0         0       19m

我们还可以检查 pods 部署的位置:

kubectl get all -n wordpress -o wide

输出结果类似于(注意 pods 部署在不同的节点上):

NAME                             READY   STATUS    RESTARTS   AGE     IP             NODE            NOMINATED NODE   READINESS GATES
pod/wordpress-5f5f4cf94c-d7mqb   1/1     Running   0          4m7s    10.244.0.206   basicnp-cwxop   <none>           <none>
pod/wordpress-5f5f4cf94c-qkxdq   1/1     Running   0          4m47s   10.244.1.84    basicnp-cwxol   <none>           <none>
pod/wordpress-5f5f4cf94c-zf46h   1/1     Running   0          2m36s   10.244.0.194   basicnp-cwxop   <none>           <none>

使用 Let's Encrypt 证书确保流量安全

Bitnami WordPress Helm 图表通过 cert-manager 内置了对 Ingress 路由和证书管理的支持。这使得使用包括 Let's Encrypt 在内的各种证书提供商的证书来配置 TLS 支持变得容易。

安装 Nginx Ingress Controller

首先,添加 Helm 仓库,并列出可用的图表:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update ingress-nginx

接下来,使用 Helm 安装 Nginx Ingress Controller:

helm install ingress-nginx ingress-nginx/ingress-nginx --version 4.1.3 \
  --namespace ingress-nginx \
  --create-namespace

接下来,通过运行以下命令检查 Helm 安装是否成功:

helm ls -n ingress-nginx

输出结果类似于(注意 STATUS 列的值为 "deployed"):

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                  APP VERSION
ingress-nginx   ingress-nginx   1               2022-02-14 12:04:06.670028 +0200 EET    deployed        ingress-nginx-4.1.3    1.2.1

最后,列出 DigitalOcean 账户中的所有负载均衡器资源,并打印 IP、ID、名称和状态:

doctl compute load-balancer list --format IP,ID,Name,Status

输出结果类似于(应该包含为 Nginx Ingress Controller 创建的新负载均衡器资源,状态应为健康):

IP                 ID                                      Name                                Status
45.55.107.209    0471a318-a98d-49e3-aaa1-ccd855831447    acdc25c5cfd404fd68cd103be95af8ae    active

为 Nginx Ingress Controller 配置 DNS

在此步骤中,你将使用你拥有的域名在 DigitalOcean 账户中配置 DNS。然后,你将为 WordPress 创建域名 A 记录。

首先,请发出以下命令以创建新域(例如 bond-0.co):

doctl compute domain create bond-0.co

注意:你需要确保你的域名注册商已配置为指向 DigitalOcean 名称服务器。请访问 如何设置 DigitalOcean 名称服务器 获取更多信息。

接下来,你将为 WordPress 应用程序添加所需的 A 记录。首先,需要确定由 Nginx 部署创建的负载均衡器外部 IP:

kubectl get svc -n ingress-nginx

输出结果类似于(注意 ingress-nginx-controller 服务的 EXTERNAL-IP 列值):

NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.245.109.87   45.55.107.209   80:32667/TCP,443:31663/TCP   25h
ingress-nginx-controller-admission   ClusterIP      10.245.90.207   <none>          443/TCP                      25h

然后,添加记录(请相应替换 <> 占位符)。你可以根据需要更改 TTL 值:

doctl compute domain records create bond-0.co --record-type "A" --record-name "wordpress" --record-data "<YOUR_LB_IP_ADDRESS>" --record-ttl "30"

提示:如果你的账户中只有一个负载均衡器,请使用以下代码片段:

LOAD_BALANCER_IP=$(doctl compute load-balancer list --format IP --no-header)
doctl compute domain records create bond-0.co --record-type "A" --record-name "wordpress" --record-data "$LOAD_BALANCER_IP" --record-ttl "30"

观察和结果:

列出 bond-0.co 域的可用记录:

doctl compute domain records list bond-0.co

输出结果类似于:

Output
ID           Type    Name         Data                    Priority    Port    TTL     Weight
311452740    SOA     @            1800                    0           0       1800    0
311452742    NS      @            ns1.digitalocean.com    0           0       1800    0
311452743    NS      @            ns2.digitalocean.com    0           0       1800    0
311452744    NS      @            ns3.digitalocean.com    0           0       1800    0
311453305    A       wordpress    45.55.107.209           0           0       30      0

安装 Cert-Manager

首先,添加 Jetstack Helm 仓库并列出可用的图表:

helm repo add jetstack https://charts.jetstack.io
helm repo update jetstack

接下来,使用 Helm 安装 Cert-Manager:

helm install cert-manager jetstack/cert-manager --version 1.8.0 \
  --namespace cert-manager \
  --create-namespace \
  --set installCRDs=true

最后,通过运行以下命令检查 Cert-Manager 安装是否成功:

helm ls -n cert-manager

输出结果类似于(STATUS 列应显示 "deployed"):

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
cert-manager    cert-manager    1               2021-10-20 12:13:05.124264 +0300 EEST   deployed        cert-manager-v1.8.0     v1.8.0

为 WordPress 配置生产就绪的 TLS 证书

首先,需要一个集群颁发者来获取最终的 TLS 证书。打开并检查仓库中提供的 assets/manifests/letsencrypt-issuer-values-values.yaml 文件:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
  namespace: wordpress
spec:
  acme:
    # 你必须将此电子邮件地址替换为你自己的。
    # Let's Encrypt 将使用此地址与您联系有关证书到期和账户相关的问题。
    email:  <YOUR-EMAIL-HERE>
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      # 用于存储账户私钥的 Secret 资源。
      name: prod-issuer-account-key
    # 添加一个单一的挑战解决器,使用 nginx 进行 HTTP01 验证
    solvers:
    - http01:
        ingress:
          class: nginx

通过 kubectl 应用:

kubectl apply -f assets/manifests/letsencrypt-issuer-values.yaml

为了确保 WordPress 流量安全,打开之前创建的 wordpress-values.yaml 文件,并在末尾添加以下设置:

# 启用 WordPress 的 Ingress 记录生成
ingress:
  enabled: true
  certManager: true
  tls: false
  hostname: <YOUR_WORDPRESS_DOMAIN_HERE>
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "let

sencrypt-prod"
  extraTls:
  - hosts:
      - <YOUR_WORDPRESS_DOMAIN_HERE>
    secretName: wordpress.local-tls

通过 helm 升级:

helm upgrade wordpress bitnami/wordpress \
    --create-namespace \
    --namespace wordpress \
    --version 15.0.11 \
    --timeout 10m0s \
    --values assets/manifests/wordpress-values.yaml

这会自动通过 cert-manager 创建一个证书。然后,你可以通过运行以下命令验证你是否已成功获取证书:

kubectl get certificate -n wordpress wordpress.local-tls

如果成功,输出的 READY 列应显示 True:

NAME                  READY   SECRET                AGE
wordpress.local-tls   True    wordpress.local-tls   24h

现在,你可以使用之前配置的域名访问 WordPress。你将通过安装过程的引导。

启用 WordPress 监控指标

在本节中,你将学习如何启用指标来监控 WordPress 实例。

首先,打开之前在本教程中创建的 wordpress-values.yaml 文件,并将 metrics.enabled 字段设置为 true:

# Prometheus 导出器 / 指标配置
metrics:
  enabled: true

使用 Helm 应用更改:

helm upgrade wordpress bitnami/wordpress \
    --create-namespace \
    --namespace wordpress \
    --version 15.0.11 \
    --timeout 10m0s \
    --values assets/manifests/wordpress-values.yaml

接下来,端口转发 wordpress 服务以检查可用的指标:

kubectl port-forward --namespace wordpress svc/wordpress-metrics 9150:9150

现在,打开 Web 浏览器并导航到 localhost:9150/metrics,查看所有 WordPress 指标。

最后,你需要配置 Grafana 和 Prometheus 来可视化你的新 WordPress 实例暴露的指标。请访问 如何安装 Prometheus 监控堆栈 了解如何安装和配置 Grafana 和 Prometheus。

配置 WordPress 插件

插件是 WordPress 网站的构建模块。无论你是需要添加联系表单、改善 SEO、提高网站速度、创建在线商店,还是提供电子邮件订阅等功能,插件都能为你的网站带来重要功能。

以下是一些推荐的插件:

  • Contact Form by WPForms:允许你为你的网站创建精美的联系表单、反馈表单、订阅表单、付款表单以及其他类型的表单。
  • MonsterInsights:是 WordPress 上最好的 Google Analytics 插件。它可以“正确”地将你的网站与 Google Analytics 连接起来,这样你就可以清楚地看到人们如何发现和使用你的网站。
  • All in One SEO:帮助你从搜索引擎获得更多的访问量。虽然 WordPress 本身是 SEO 友好的,但使用 SEO 最佳实践可以大幅增加你的网站流量。
  • SeedProd:是 WordPress 上最好的拖放式页面生成器。它允许你轻松定制网站设计,并创建自定义页面布局,而无需编写任何代码。
  • LiteSpeed Cache:是一款多功能网站加速插件,具有独有的服务器级缓存和优化功能集合。
  • UpdraftPlus:简化了备份和恢复。将文件和数据库备份到云端,并一键恢复。
  • Query Monitor:WordPress 的开发者工具面板。它可以调试数据库查询、PHP 错误、钩子和操作。

更多插件请访问 WordPress 插件。

提高 WordPress 性能

CDN(内容分发网络)是加快 WordPress 网站速度的一种简单方法。CDN 是一种服务器设置,通过优化媒体文件的传输请求来提高网页的加载速度。当访问者远离服务器位置时,大多数网站会面临延迟问题。使用 CDN 可以通过在提供静态内容(如图像、CSS、JavaScript 和视频流)时卸载 Web 服务器来加快内容交付速度。缓存静态内容的另一个好处是最小化延迟。CDN 是优化网站并改善全球用户体验的可靠解决方案。

配置 NitroPack 插件

NitroPack 是一款用于优化网站速度和性能的插件。

接下来,你将为你的 WordPress 实例配置 NitroPack 插件。

注意:通过 WordPress Helm 图表值文件(wordpress-values.yaml)配置的管理员密码在尝试登录 WordPress 管理员控制台时会失败。要更改密码,你需要连接到数据库并重置它。首先,如果你不熟悉 DigitalOcean 管理的数据库,请阅读 如何连接到 MySQL 数据库集群。然后,按照 WordPress 支持网站上的 重置 WordPress 用户密码 文章进行操作。

请按照以下步骤为你的 WordPress 实例配置 NitroPack 插件:

  1. 通过以下链接在你的 Web 浏览器中打开 WordPress 安装的管理员控制台(确保相应替换 <YOUR_WORDPRESS_DOMAIN_HERE> 占位符):

https://<YOUR_WORDPRESS_DOMAIN_HERE>/wp-admin 

  1. 当被要求时,请使用 WordPress 管理员凭据登录。

  1. 点击插件菜单项,然后打开“添加新”子菜单。
  2. 搜索 NitroPack 插件,然后在结果页面中点击“立即安装”按钮。安装完成后,点击“激活”按钮。你应该能看到插件添加到你的插件列表中。
  3. 点击插件名称下的设置链接。在接下来的页面中,点击“连接到 NitroPack”按钮。接下来,你将被重定向到登录或创建一个新的 NitroPack 账户。
  4. NitroPack.io 仪表板页面应打开,显示与计划、优化页面等相关的信息。

接下来,请按照以下步骤将你的网站与 NitroPack 连接:

  1. 导航至 NitroPack,使用配置插件时创建的账户登录。
  2. 点击“添加新网站”菜单项,然后填写网站 URL 和网站名称。现在,点击“免费订阅”选项,然后点击“继续”按钮。
  3. 如果你的域名托管在 Cloudflare 上,你将被提示将你的 Cloudflare 账户与 NitroPack 账户连接。
  4. 你应该可以看到仪表板上的缓存信息。

注意:安装 NitroPack 后你可能会看到以下信息:Could not turn on the WP_CACHE constant in wp-config.php. 这是由于 wp-config.php 文件的权限限制。要解决此问题,你需要使用 kubectl SSH 进入 WordPress 容器:

kubectl exec --stdin --tty <your_wordpress_pod> -n wordpress -- /bin/bash

导航到容器内的 /bitnami/wordpress 目录并运行以下命令更改权限:

chmod 0644 wp-config.php

重启插件主页应解决该错误。

你还可以查看这篇文章了解 NitroPack 是否正在为访问者提供优化页面。

配置 Cloudflare

Cloudflare 是一家提供内容分发网络(CDN)、DNS、DDoS 保护和安全服务的公司。Cloudflare 是加快和增强 WordPress 网站安全性的好解决方案。

注意:配置此项需要一个 Cloudflare 账户。如果你没有,请访问 Cloudflare 网站 并注册一个免费账户。如果 WordPress 安装是使用其他注册商(如 GoDaddy)购买的域名配置的,你需要将其自定义名称服务器更改为指向 Cloudflare 名称服务器。

请按照以下步骤配置 Cloudflare 以配合你的 WordPress 网站:

  1. 使用你的账户登录 Cloudflare 仪表板,并点击“+添加站点”。
  2. 输入 WordPress 网站的域名,然后点击“添加站点”按钮。
  3. 在计划选择页面中,点击“免费计划”下的“开始使用”按钮。
  4. 在“查看 DNS 记录”页面,点击“添加记录”按钮并添加 A 记录。
  5. 为记录选择一个名称,并确保输入的 IPv4 地址是 DigitalOcean 负载均衡器的地址,然后点击“继续”按钮。
  6. 在下一页,你将被要求删除域名注册商中的任何自定义名称服务器,并添加 Cloudflare 的名称服务器。使用你的管理员账户登录域名注册商并更改自定义名称服务器。
  7. 点击“完成,检查名称服务器”按钮。
  8. 在下一页,Cloudflare 提供了一些配置建议,可以跳过,稍后处理。点击“跳过建议”链接。

当站点在 Cloudflare 上激活时,将发送电子邮件通知你。在 Cloudflare 账户中,你可以查看分析页面,获取有关 WordPress 网站的 Web 流量信息。

处理名称服务器更新可能需要最多 24 小时完成。

配置 Redis 对象缓存

WordPress 会进行多次 MySQL 查询,而 Redis 对象缓存可以优化 WordPress 数据库的使用。Redis 对象可用于存储发送到 MySQL 服务器的特定查询的请求输出缓存。

接下来,你将为你的 WordPress 实例配置 Redis 对象缓存插件。

请按照以下步骤配置 Redis 对象缓存,使其与你的 WordPress 网站配合使用:

  1. 在浏览器中通过以下链接打开 WordPress 安装的管理员控制面板(确保相应替换 <YOUR_WORDPRESS_DOMAIN_HERE> 占位符):

plaintext https://<YOUR_WORDPRESS_DOMAIN_HERE>/wp-admin

  1. 当被要求时,请使用 WordPress 管理员凭据登录。
  2. 点击插件菜单项,然后打开“添加新”子菜单。
  3. 搜索 Redis 对象缓存插件,然后在结果页面中点击“立即安装”按钮。安装完成后,点击“激活”按钮。你应该能看到插件概述页面。
  4. 点击“启用对象缓存”按钮。插件应连接到 Redis 集群,并显示“已连接”状态。

升级 WordPress

由于 WordPress 如此受欢迎,它经常成为恶意利用的目标,因此,保持它的最新版本是非常重要的。你可以通过 helm 升级命令升级 WordPress。

首先,更新 helm 仓库:

helm repo update

接下来,将 WordPress 升级到新版本:

helm upgrade wordpress bitnami/wordpress \
    --atomic \
    --create-namespace \
    --install \
    --namespace wordpress \
    --version <WORDPRESS_NEW_VERSION> \
    --timeout 10m0s \
    --values assets/manifests/wordpress-values.yaml

<WORDPRESS_NEW_VERSION> 替换为新版本号。

结论

在本指南中,你学习了如何使用 Helm 和外部 MySQL 数据库,以 Kubernetes 方式安装 WordPress。你还学习了如何将 WordPress 升级到新版本,以及在出错时如何回滚到之前的版本。

如果你想了解有关 Kubernetes 和 Helm 的更多信息,请查看我们社区页面的 DO Kubernetes 部分。

感谢你与 DigitalOcean 社区一起学习。查看我们的 计算、存储、负载均衡、DDoS 和 托管数据库 产品,了解更多产品信息。中国区用户需要技术支持,或需要咨询更多产品方案或场景,比如程序化广告、跨境电商,可联系 DigitalOcean 中国区独家战略合作伙伴卓普云。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/749420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建基于LLM的高效知识库问答系统:MaxKB一站式开源解决方案探析

随着人工智能技术的飞速发展,尤其是大型语言模型(LLMs)的广泛应用,知识管理与交互进入了新的纪元。今天,我们将深入探讨一个创新的开源项目——MaxKB,这是一个集成了最新技术、旨在提供一站式解决方案的知识库问答系统。MaxKB以其开箱即用、高度可定制性以及对多种主流大…

Linux-引导过程与服务控制

目录 一、Linux操作系统引导过程 1、引导过程总览 2、引导过程详解 2.1、开机自检&#xff08;BIOS&#xff09; 2.2、 MBR引导 2.3、GRUB菜单 2.4、加载内核(kernel) 2.5、init进程初始化 3、系统初始化进程 3.1、Systemd单元类型 3.2、运行级别所对应的 Systemd 目…

参加六西格玛绿带培训是投资未来,还是花冤枉钱?

是否值得花费资金参加六西格玛绿带培训&#xff0c;取决于多个因素。 从积极的方面来看&#xff0c;参加六西格玛绿带培训具有以下潜在价值&#xff1a; 1. 提升专业技能&#xff1a;使您掌握一套系统的问题解决方法和流程改进工具&#xff0c;有助于在工作中更高效地解决复杂…

学会python——在excel中写入数据(python实例十三)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3 .想Excel中写入数据 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的…

超越规模的冒险之旅:引导人工智能价值对齐

在茫茫技术之林中&#xff0c;人工智能凭借大模型占据了重要地位。人们已经不再局限于人机对弈和AI识图&#xff0c;开始探索那些能够模仿人类思考的机器。无论是日常聊天、文本写作&#xff0c;还是[在完美的提示词引导下创作出惊艳的诗歌]&#xff0c;我们不得不承认AI工具已…

Linux基础 - 使用 ssh 服务管理远程主机(window linux vscode)

目录 零. 简介 一. 打开linux shh 二. window连接linux 三. linux连接linux 四. VSCode远程 零. 简介 SSH&#xff08;Secure Shell&#xff09;服务是一种网络协议&#xff0c;主要用于在不安全的网络环境中为计算机之间的通信提供安全的加密连接。 SSH 服务具有以下重要…

Linux系统查询磁盘空间大小(df、du)

df命令是linux系统以磁盘分区为单位查看文件系统&#xff0c;可以加上参数查看磁盘剩余空间信息&#xff0c; 命令格式&#xff1a;df -hl 显示格式为&#xff1a; Filesystem(文件系统) Size(容量) Used(已用) Avail(可用) Use%(已用%) Mounted on(挂载点) 命令使用详细介绍 …

《数据勒索防范手册(1.0版)》

当前&#xff0c;数据勒索攻击已成为全球最严重的数据安全威胁之一攻击方式呈现 APT 化、平台化、多重化、AI驱动化等发展趋势:据统计&#xff0c;近年来针对制造业、公共事业、卫生保健、电力、交通、能源等领域的勒索攻击显著增加。随着云计算、边缘计算等技术的不断发展&…

文华财经盘立方博易大师主图指标公式大全源码均线

文华财经盘立方博易大师主图指标公式大全源码均线&#xff1a; N:3; EMA25:EMA(C,25),COLORRED,LINETHICK2; EMA70:EMA(C,70),COLORGREEN,LINETHICK2; EMA450:EMA(C,450),COLORYELLOW,LINETHICK2; CONDA1:EMA25>EMA70&&C>HV(H,6)&&C>EMA450&…

LSH算法:高效相似性搜索的原理与Python实现II

局部敏感哈希&#xff08;LSH&#xff09;是一种高效的近似相似性搜索技术&#xff0c;广泛应用于需要处理大规模数据集的场景。在当今数据驱动的世界中&#xff0c;高效的相似性搜索算法对于维持业务运营至关重要&#xff0c;它们是许多顶尖公司技术堆栈的核心。 相似性搜索面…

2024平价蓝牙耳机推荐哪款?百元左右平价蓝牙耳机推荐

在2024的无线耳机市场中&#xff0c;蓝牙耳机已经成为了主流。无论是对于音乐爱好者还是普通消费者&#xff0c;选择一款音质出色、舒适度高且功能齐全的蓝牙耳机还是很重要的。一款好的蓝牙耳机不仅戴在耳朵上很舒服&#xff0c;而且音质还没有任何的杂音&#xff0c;但现在的…

FPGA学习笔记(6)——硬件调试与网表添加探针

对信号进行分析&#xff0c;除了使用内置的ILA IP核&#xff0c;还可以在网表中添加探针。 本节采用之前配置的LED灯闪烁代码&#xff0c;对原始工程进行修改。 如果是新建工程&#xff0c;需要现将代码进行综合Synthesis&#xff0c;然后再进行接下来的操作。 1、点击Open S…

Android 根证书管理与证书验证

大部分的安卓应用都免不了与后端服务器进行通信。在通信过程中&#xff0c;主要面临两方面的风险&#xff1a;1、中间人攻击。当通信使用 HTTP 等明文协议&#xff0c;通信内容可被嗅探甚至篡改。2、通信内容被攻击者分析。使用加密的协议&#xff0c;虽然避免了中间人攻击&…

PFA铲子聚四氟乙烯物料特氟龙铲粉料铲耐酸碱无污染塑料

PFA铲子:又称四氟铲子、聚四氟乙烯物料铲、特氟龙铲子; 常用尺寸型号 全长x宽x高(mm)165x57x31mm&#xff0c;一体成型&#xff0c;产品坚固&#xff0c;可以直接与食品接触。常用于制药厂&#xff0c;实验室等转移物料&#xff0c;铲取药品化学物品等&#xff0c;可以直接接触…

LangChain4j之HelloWorld

什么是LangChain4j 它是Java版本的LangChain&#xff0c;随着大模型的不断发展&#xff0c;如何在程序中更好的利用大模型的能力来提高编程效率是一种趋势&#xff0c;LangChain是这么自己介绍自己的&#xff1a; LangChain gives developers a framework to construct LLM‑p…

【Redis一】Redis配置与优化

目录 一.关系型数据库与非关系型数据库 1.关系型数据库 2.非关系型数据库 3.二者区别 4.非关系型数据库产生背景 5.NoSQL与SQL数据记录对比 关系型数据库 非关系型数据库 二.Redis相关概述 1.简介 2.五大数据类型 3.优缺点 3.1.优点 3.2.缺点 4.使用场景 5.采用…

阿里巴巴向国际用户开放人工智能模型平台ModelScope(魔搭社区)

阿里巴巴对 Hugging Face 和 Amazon Bedrock 的回应包含 5,000 多个中国专业模型&#xff0c;以及 1,500 个工具包和数据集 阿里云已将其人工智能模型存储库ModelScope&#xff08;魔搭社区&#xff09;的访问权限扩展至全球英语用户&#xff0c;意在吸引更多国际企业和开发者…

床旁交互,全视通打造以患者为中心的智慧病房

随着我国医疗建设的发展&#xff0c;医疗服务体系的不断建立健全&#xff0c;新形势下人们的医疗需求发生变化&#xff0c;医疗服务理念正逐步从传统的“以疾病为中心”向“以患者为中心”转变。 基于医院临床实际应用场景&#xff0c;在兼具实用性的前提下&#xff0c;建设了床…

yolov5驾驶员不规范行为检测

1 项目介绍 1.1 摘要 随着汽车工业的迅速发展和交通拥堵的加剧&#xff0c;驾驶员在行车过程中的不规范行为成为了导致交通事故频发的重要因素之一。为了减少交通事故的发生&#xff0c;保障道路安全&#xff0c;提高驾驶员的行车安全意识&#xff0c;本研究致力于实现驾驶员…

德国威步的技术演进之路(上):从软件保护到用户体验提升

德国威步自1989年成立以来一直专注于数字安全技术的研究和发展&#xff0c;在软件保护和数字授权领域树立了行业标杆&#xff0c;并在云端许可管理和物联网安全技术方面不断创新。德国威步的成就彰显了其对安全、创新和可持续发展的坚定追求。 德国威步将“完美保护、完美授权…