教程:在 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-storageannotations: openebs.io/cas-type: nsfrwxcas.openebs.io/config: |- name: NSFServerTypevalue: "kernel"- name: BackendStorageClassvalue: "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: truestorageClass: rwx-storageaccessModes: ["ReadWriteMany"]size: 5Gi
auth:enabled: truepassword: <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          2m24sNAME                     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   2m25sNAME                            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: truestorageClassName: rwx-storageaccessModes: ["ReadWriteMany"]size: 5GivolumePermissions: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: 25060user: <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: falsewordpressExtraConfigContent: |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          23hNAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/wordpress   ClusterIP   10.245.36.237   <none>        80/TCP,443/TCP   23hNAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wordpress   1/1     1            1           23hNAME                                   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          87sNAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/wordpress   ClusterIP   10.245.151.58   <none>        80/TCP,443/TCP   35mNAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wordpress   3/3     3            3           35mNAME                                   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-prodnamespace: wordpress
spec:acme:# 你必須將此電子郵件地址替換為你自己的。# Let's Encrypt 將使用此地址與您聯系有關證書到期和賬戶相關的問題。email:  <YOUR-EMAIL-HERE>server: https://acme-v02.api.letsencrypt.org/directoryprivateKeySecretRef:# 用于存儲賬戶私鑰的 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: truecertManager: truetls: falsehostname: <YOUR_WORDPRESS_DOMAIN_HERE>annotations:kubernetes.io/ingress.class: "nginx"cert-manager.io/cluster-issuer: "letsencrypt-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.pswp.cn/diannao/36593.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36593.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36593.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI新紀元-GPT-5

GPT-5&#xff1a;引領AI新紀元 隨著OpenAI首席技術官米拉穆拉蒂的確認&#xff0c;GPT-5的發布正在逐漸接近我們。從GPT-4到GPT-5的躍遷&#xff0c;不僅標志著技術層面的巨大進步&#xff0c;更是AI智能水平的一次質的飛躍。穆拉蒂將這一進步比喻為從高中生到博士生的成長&am…

深入比較:Symfony與Laravel框架的異同

引言 在現代Web開發領域&#xff0c;PHP框架扮演著至關重要的角色。Symfony和Laravel是兩個非常流行的PHP框架&#xff0c;它們各自有著獨特的設計理念、功能特性和社區支持。本文將深入探討這兩個框架的不同之處&#xff0c;包括設計理念、架構、性能、學習曲線、社區支持等方…

推薦系統三十六式學習筆記:原理篇.模型融合14|一網打盡協同過濾、矩陣分解和線性模型

目錄 從特征組合說起FM模型1.原理2.模型訓練3.預測階段4.一網打盡其他模型5.FFM 總結 在上一篇文章中&#xff0c;我們講到了使用邏輯回歸和梯度提升決策樹組合的模型融合辦法&#xff0c;用于CTR預估&#xff0c;給這個組合起了個名字&#xff0c;叫“輯度組合”。這對組合中&…

Yokogawa AQ6370E 10與AQ6370E 20 光譜儀的區別?

Yokogawa AQ6370E 20相比AQ6370E 10在波長準確度上有哪些改進&#xff1f; AQ6370E 20在波長準確度上相對于AQ6370E 10有明顯的提升&#xff0c;這對于需要高精度波長測量的應用來說是非常有益的。 波長精度提升&#xff1a;AQ6370E 20的波長精度相比AQ6370E 10有所提升&#…

SQL面試題練習 —— 查詢每個用戶的第一條和最后一條記錄

目錄 1 題目2 建表語句3 題解 題目來源&#xff1a;小紅書。 1 題目 現有一張訂單表 t_order 有訂單ID、用戶ID、商品ID、購買商品數量、購買時間&#xff0c;請查詢出每個用戶的第一條記錄和最后一條記錄。樣例數據如下&#xff1a; ---------------------------------------…

個人支付系統實現

基礎首頁&#xff1a; 訂單&#xff1a; 智能售卡系統 基于webmanworkerman開發 禁用函數檢查 使用這個腳本檢查是否有禁用函數。命令行運行curl -Ss https://www.workerman.net/check | php 如果有提示Function 函數名 may be disabled. Please check disable_functions in …

外星生命在地球的潛在存在:科學、哲學與社會的交織

外星生命在地球的潛在存在&#xff1a;科學、哲學與社會的交織 摘要&#xff1a;近年來&#xff0c;關于外星生命是否存在的討論日益激烈。有研究表明&#xff0c;外星人可能已經在地球漫步&#xff0c;這一觀點引發了廣泛的科學、哲學和社會學思考。本文將從科學角度探討外星…

線程池FutureTask淺談

一,概述 FuturnTask實現了Future與Runnable接口,筆者知道,ThreadPoolExecutor#submit可以傳入Callable接口而非Runnable,區別點在于Callable可以返回值,而整個FuturnTask可以理解為Callable設計,用來優雅地異步獲取執行結果,無需手動Condition去實現。 圍繞此,需知道…

鴻蒙開發系統基礎能力:【@ohos.wallpaper (壁紙)】

壁紙 說明&#xff1a; 本模塊首批接口從API version 7開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import wallpaper from ohos.wallpaper;WallpaperType 定義壁紙類型。 系統能力: 以下各項對應的系統能力均為SystemCapability…

python接口自動化的腳本

使用Requests庫進行GET請求 Requests是Python中最常用的HTTP庫,用于發送HTTP請求。下面是一個簡單的GET請求示例,用于從API獲取數據。 import requests url = "https://api.example.com/data" response = requests.get(url) if response.status_code == 200:prin…

【項目實訓】falsk后端連接數據庫以及與前端vue進行通信

falsk連接數據庫 我們整個項目采用vueflaskmysql的框架&#xff0c;之前已經搭建好了mysql數據庫&#xff0c;現在要做的是使用flask連接到數據庫并測試 安裝flask 首先安裝flask pip install flask 進行數據庫連接 數據庫連接需要使用到pymysql庫以及flask庫 連接數據庫…

通過注釋語句,簡化實體類的定義(省略get/set/toString的方法)

引用Java的lombok庫&#xff0c;減少模板代碼&#xff0c;如getters、setters、構造函數、toString、equals和hashCode方法等 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructorData&#xf…

使用【docker】簡單部署打包構建好的鏡像并運行python項目

使用【docker】簡單部署運行python項目 方案一&#xff1a;使用打包好的鏡像直接運行 一&#xff0e;項目配置 項目壓縮包&#xff1a;project.tar.gz 項目目錄存放在服務器路徑&#xff1a;/var/opt/app (1)解壓項目文件到該目錄下&#xff1a;/var/opt/app 命令&#xff1…

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 目…

SherlockChain:基于高級AI實現的智能合約安全分析框架

關于SherlockChain SherlockChain是一款功能強大的智能合約安全分析框架&#xff0c;該工具整合了Slither工具&#xff08;一款針對智能合約的安全工具&#xff09;的功能&#xff0c;并引入了高級人工智能模型&#xff0c;旨在輔助廣大研究人員針對Solidity、Vyper和Plutus智…

前端 Array.sort() 源碼學習

源碼地址 V8源碼Array 710行開始為sort()相關 Array.sort()方法是那種排序呢&#xff1f; 去看源碼主要是源于這個問題 // In-place QuickSort algorithm. // For short (length < 22) arrays, insertion sort is used for efficiency.源碼中的第一句話就回答了我的問題…

Potato(土豆)一款輕量級的開源文本標注工具(二)

示例項目&#xff08;模版&#xff09; Potato 旨在提高數據標注的可復制性&#xff0c;并降低研究人員設置新標注任務的成本。因此&#xff0c;Potato 提供了一系列預定義的示例項目&#xff0c;并歡迎公眾向項目中心貢獻。如果您使用 Potato 進行了自己的標注工作&#xff0…

海思平臺使用ITTP_Stream調試sensor

目錄 相關資料1.ISP相關資料2.MIPI RX相關資料3.sensor資料4.MIPI標準 準備工作1.準備sensor驅動2.準備sample vio3.準備上位機和下位機程序 運行1.只運行HiPQTool1.1.板端運行1.2.PC端運行HiPQTool 2.使用ITTP_Stream2.1.板端運行2.2.打開上位機軟件 相關資料 1.ISP相關資料 …

uniapp開發手機APP、H5網頁、微信小程序、長列表插件

ml-list 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id18928 ml-list介紹 1、ml-list 列表組件&#xff0c;包含基本列表樣式、可擴展插槽機制、長列表性能優化、多端兼容。 2、ml-list 低代碼列表&#xff0c;幫助使用者快速構建列表&#xff0c;簡單配置&…

秋招突擊——6/26~6/27——復習{二維背包問題——寵物小精靈之收服}——新作{串聯所有單詞的字串}

文章目錄 引言復習二維背包問題——寵物小精靈之收服個人實現重大問題 滾動數組優化實現 新作串聯所有單詞的字串個人實現參考實現 總結 引言 今天應該是舟車勞頓的一天&#xff0c;頭一次在機場刷題&#xff0c;不學習新的東西了&#xff0c;就復習一些之前學習的算法了。 復…