色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

K8S學(xué)習(xí)教程三:在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索

jf_57681485 ? 來(lái)源:jf_57681485 ? 作者:jf_57681485 ? 2024-07-08 17:03 ? 次閱讀

背景

wiki.js 是非常優(yōu)秀的開(kāi)源 Wiki 系統(tǒng),盡管在與 xwiki 功能相比 ,還不算完善,但也在不斷進(jìn)步。 常用的功能還是比較實(shí)用的,如:Wiki 寫(xiě) 作、分享、權(quán)限管理功能還是非常實(shí)用的,UI 設(shè)計(jì)非常的漂亮,精美的界面和直觀的操作體驗(yàn),能夠滿(mǎn)足小團(tuán)隊(duì)的基本知識(shí)管理需求。

認(rèn)真閱讀全文,教你怎么領(lǐng)取禮品

我們需要在 PetaExpress KubeSphere 容器平臺(tái)中部署 Kubernetes集群

在 Peta Express 中部署 Kubernetes 非常的簡(jiǎn)單方便,直接使用 PetaExpress 中內(nèi)置的 QKE 就可以了,首先我們需要登錄到 PetaExpress 控制臺(tái)(登錄地址:https://cn.petaexpress.com ),在產(chǎn)品與服務(wù)中找到 AppCenter 控制臺(tái) → 應(yīng)用中心

wKgZomaE_LWAIzZtAACo5pTAtaY093.png

找到 QKE 立即部署即可。

wKgaomaE_LyAEfSSAAJiyIgwpvs755.png

按照提示輸入名稱(chēng),選擇集群規(guī)模等關(guān)鍵信息,然后提交就可以了。但需要注意集群的配置,如果是開(kāi)發(fā)測(cè)試可以選擇 “基礎(chǔ)型開(kāi)發(fā)環(huán)境” 或 “企業(yè)型測(cè)試環(huán)境”,如果是生產(chǎn)的話(huà)則可以選擇 “基礎(chǔ)型生產(chǎn)環(huán)境” 或 “企業(yè)型生產(chǎn)環(huán)境”,也可以自定義集群規(guī)模和HA。

wKgZomaE_MOAKqGfAAEvz12OjTg619.png

根據(jù)集群的規(guī)模,部署時(shí)間大致2分鐘到10分鐘不等,速度還是非常的快的,能在極短的時(shí)間內(nèi)完成。部署完 Kubernetes(K8S),需要安裝 OpenEBS,完成這一環(huán)節(jié)后就可以安裝 Redis 了。

準(zhǔn)備 storageclass

我們使用 OpenEBS 作為存儲(chǔ),OpenEBS 默認(rèn)安裝的 Local StorageClass 在 Pod 銷(xiāo)毀后自動(dòng)刪除,不適合用于我的數(shù)據(jù)存儲(chǔ),我們?cè)?/p>

Local StorageClass 基礎(chǔ)上稍作修改,創(chuàng)建新的 StorageClass,允許 Pod 銷(xiāo)毀后,PV 內(nèi)容繼續(xù)保留,手動(dòng)決定怎么處理。

在項(xiàng)目空間的 存儲(chǔ) → 存儲(chǔ)類(lèi)型 → 創(chuàng)建 進(jìn)行storageClass的創(chuàng)建

名稱(chēng):localretain

存儲(chǔ)系統(tǒng):自定義

存儲(chǔ)卷擴(kuò)容:否

回收機(jī)制:Retain

訪問(wèn)模式:ReadWriteOnce

存儲(chǔ)系統(tǒng):openebs.io/local

存儲(chǔ)卷延遲綁定:延遲綁定編輯完成后點(diǎn)擊創(chuàng)建,或直接點(diǎn)擊 編輯YAML ,將以下yaml內(nèi)容粘貼后點(diǎn)擊創(chuàng)建

部署 PostgreSQL 數(shù)據(jù)庫(kù)

鑒于我們團(tuán)隊(duì)在多個(gè)項(xiàng)目中也需要使用 PostgreSQL, 為了提高 PostgreSQL 數(shù)據(jù)庫(kù)的利用率和統(tǒng)一管理,我們獨(dú)立部署 PostgreSQL,并在

安裝 wiki.js 時(shí),配置為使用外部數(shù)據(jù)庫(kù)。

準(zhǔn)備用戶(hù)名密碼配置

我們使用 Secret 保存 PostgreSQL 用戶(hù)密碼等敏感信息。

在項(xiàng)目空間的 配置 → 保密字典 → 創(chuàng)建 進(jìn)行保密字典的創(chuàng)建。

1 apiVersion: storage.k8s.io/v1

2 kind: StorageClass

3 metadata:

4annotations:

5cas.openebs.io/config: |

6- name: StorageType

7value: "hostpath"

8- name: BasePath

9value: "/var/openebs/localretain/"

10openebs.io/cas-type: local

11storageclass.beta.kubernetes.io/is-default-class: "false"

12storageclass.kubesphere.io/supported-access-modes: '["ReadWriteOnce"]'

13name: localretain

14 provisioner: openebs.io/local

15 reclaimPolicy: Retain

16 volumeBindingMode: WaitForFirstConsumer

wKgZomaLpaCAY6_wAAKCDkj1dHo565.png

部署 PostgreSQL 數(shù)據(jù)庫(kù)

鑒于我們團(tuán)隊(duì)在多個(gè)項(xiàng)目中也需要使用 PostgreSQL, 為了提高 PostgreSQL 數(shù)據(jù)庫(kù)的利用率和統(tǒng)一管理,我們獨(dú)立部署 PostgreSQL,并在

安裝 wiki.js 時(shí),配置為使用外部數(shù)據(jù)庫(kù)。

準(zhǔn)備用戶(hù)名密碼配置

我們使用 Secret 保存 PostgreSQL 用戶(hù)密碼等敏感信息。

在項(xiàng)目空間的 配置 → 保密字典 → 創(chuàng)建 進(jìn)行保密字典的創(chuàng)建。

wKgZomaLpb6APp5qAAJxBOX5lI4625.png

首先我們定義一個(gè)名稱(chēng)就叫 postgres-prod 點(diǎn)擊下一步,類(lèi)型保持默認(rèn)設(shè)置即可, 添加鍵值對(duì)數(shù)據(jù)。

wKgaomaLpcWAP7mEAAJU_DJ6Je8728.png

鍵為 POSTGRES_PASSWORD ,值為 password ( 密碼自行準(zhǔn)備修改 )

wKgaomaLpfyAAjlRAAI3eMxUvoQ835.png

準(zhǔn)備數(shù)據(jù)庫(kù)初始化腳本

使用 ConfigMap 保存數(shù)據(jù)庫(kù)初始化腳本,在 數(shù)據(jù)庫(kù)創(chuàng)建時(shí),將 ConfigMap 中的數(shù)據(jù)庫(kù)初始化腳本掛載到 /docker-entrypoint-initdb.d, 容器初 始化時(shí)會(huì)自動(dòng)執(zhí)行該腳本。

在項(xiàng)目空間的 配置 → 配置字典 → 創(chuàng)建 進(jìn)行配置字典的創(chuàng)建。

wKgaomaLphSAYOezAAJOKSEr9ns027.png

名稱(chēng)就叫 wikijs-postgres-init 然后下一步,添加鍵值對(duì)數(shù)據(jù)。

wKgZomaLpkqAImUCAAJqYShkOAM305.png

鍵為 init.sql ,值為

1CREATE DATABASE wikijs;

2CREATE USER wikijs with password 'password';

3GRANT CONNECT ON DATABASE wikijs to wikijs;

4GRANT USAGE ON SCHEMA public TO wikijs;

5GRANT SELECT,update,INSERT,delete ON ALL TABLES IN SCHEMA public TO wikijs;

6ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO wikijs;

以上 wikijs 用戶(hù)的密碼自行準(zhǔn)備,明文保存。

準(zhǔn)備存儲(chǔ)

我們使用 OpenEBS 來(lái)提供存儲(chǔ)服務(wù)。可以通過(guò)創(chuàng)建 PVC 來(lái)提供持久化存儲(chǔ)。

這里聲明一個(gè) 10G 的 PVC。

需按照以下步驟操作

在項(xiàng)目空間的 存儲(chǔ) → 存儲(chǔ)卷 → 創(chuàng)建 進(jìn)行PVC的創(chuàng)建。

wKgaomaLpq6AOsu_AAKGndLlpD8765.png

名稱(chēng)就叫 postgres-prod-data ,然后下一步,進(jìn)行存儲(chǔ)設(shè)置。

存儲(chǔ)類(lèi)型: localretain

訪問(wèn)模式: ReadWriteOnce

存儲(chǔ)卷容量: 10G

wKgaomaLpu6AUiZuAAKZuveq3Sc107.png

高級(jí)設(shè)置無(wú)需修改,點(diǎn)擊創(chuàng)建按鈕即可。

部署 PostgreSQL 數(shù)據(jù)庫(kù)

在前面的步驟準(zhǔn)備好各種配置信息和存儲(chǔ)后,就可以開(kāi)始部署 PostgreSQL 服務(wù)了。

我們的 Kubernetes 沒(méi)有配置存儲(chǔ)陣列,使用的是 OpenEBS 作為存儲(chǔ),采用 Deployment 方式部署 PostgreSQL。

需按照以下步驟操作

在項(xiàng)目空間的 應(yīng)用負(fù)載 → 工作負(fù)載 → 部署 → 創(chuàng)建 進(jìn)行 PostgreSQL 服務(wù)的創(chuàng)建。

wKgaomaLpyqAPy7dAAHfo5ktBc8096.png

基本信息里名稱(chēng)就叫做 postgres-prod ,然后進(jìn)行下一步容器組設(shè)置

容器組配置

這一步的核心就是配置 postgres 的容器。

wKgZomaLp0SAU1ygAAIvd4MVPRg608.png

容器組副本數(shù)量選擇1,點(diǎn)擊添加容器鏡像選擇 dockerhub 中的 abcfy2/zhparser:12-alpine ,并選擇使用默認(rèn)端口,容器名稱(chēng)改為 postgres-prod

wKgZomaLp1SAQrScAALmMZXNgso032.png

勾選 環(huán)境變量 ,點(diǎn)擊 引用配置字典或保密字典 ,資源選擇 postgres-prod 保密字典,資源中的鍵選擇 POSTGRES_PASSWORD ,之后點(diǎn)擊對(duì)勾完成容器配置,點(diǎn)擊下一步配置 存儲(chǔ)卷設(shè)置

wKgaomaLp2uAclZAAAN_4mdIxn8028.png

存儲(chǔ)設(shè)置

在這一步有兩個(gè)操作

掛載存儲(chǔ)卷

掛載配置字典

掛載存儲(chǔ)卷

選擇現(xiàn)有存儲(chǔ)卷 postgres-prod-data ,權(quán)限為讀寫(xiě),掛載地址為 /var/lib/postgresql/data ,配置好后點(diǎn)擊對(duì)勾完成配置

wKgaomaLp56AI98YAAKmEcNtVUg125.png

掛載配置字典

選擇配置字典 wikijs-postgres-init ,權(quán)限為只讀,掛載地址為 /docker-entrypoint-initdb.d ,配置好后點(diǎn)擊對(duì)勾完成配置

wKgZomaLp9iAJIxrAAKlvGEMjs0925.png

配置好后如下圖

wKgZomaLp-eAHQSUAALaWMYuCB8999.png

點(diǎn)擊下一步進(jìn)入最后的高級(jí)設(shè)置

高級(jí)設(shè)置 里是一些額外配置,可以根據(jù)自己場(chǎng)景選擇調(diào)整配置,調(diào)整完成后點(diǎn)擊 創(chuàng)建 。創(chuàng)建供其他 Pod 訪問(wèn)的 Service

在項(xiàng)目空間的 應(yīng)用負(fù)載 → 服務(wù) → 創(chuàng)建 進(jìn)行服務(wù)的創(chuàng)建

wKgaomaLqAWAWIgSAAHeY3_JHRY738.png

名稱(chēng)就叫 postgres-prod 然后下一步,進(jìn)入服務(wù)設(shè)置

內(nèi)部訪問(wèn)模式選擇 虛擬IP地址 ,指定工作負(fù)載選擇 postgres-prod

端口協(xié)議:TCP

端口名稱(chēng):tcp-5432

容器端口:5432

服務(wù)端口:5432

wKgZomaLqBaAffUBAAIZFaIJ6Ms375.png

點(diǎn)擊下一步進(jìn)入高級(jí)設(shè)置

高級(jí)設(shè)置 里是一些額外配置,可以根據(jù)自己場(chǎng)景選擇調(diào)整配置,調(diào)整完成后點(diǎn)擊 創(chuàng)建 。

部署 wiki.js

準(zhǔn)備用戶(hù)名密碼配置

我們使用 Secret 保存 wiki.js 用于連接數(shù)據(jù)庫(kù)的用戶(hù)名密碼等敏感信息。

在項(xiàng)目空間的 配置 → 保密字典 → 創(chuàng)建 進(jìn)行保密字典的創(chuàng)建。

wKgZomaLqFSAHctTAAHOW8l6VPA279.png

名稱(chēng)就叫 wikijs 然后下一步,類(lèi)型選擇默認(rèn), 添加鍵值對(duì)數(shù)據(jù)。

wKgZomaLqF6AWz-sAAHQpYGIPhg874.png

鍵為 DB_USER ,值為 wikijs ( 和上方初始化腳本中的用戶(hù)名保持一致 )

鍵為 DB_PASS ,值為 password ( 和上方初始化腳本中的密碼保持一致 )

準(zhǔn)備數(shù)據(jù)庫(kù)連接配置

我們使用 ConfigMap 保存 wiki.js 的數(shù)據(jù)庫(kù)連接信息。

在項(xiàng)目空間的 配置 → 配置字典 → 創(chuàng)建 進(jìn)行配置字典的創(chuàng)建。

wKgaomaLqHqAJFJfAAHYHMvUycs847.png

名稱(chēng)就叫 wikijs 然后下一步,添加鍵值對(duì)數(shù)據(jù)。

wKgaomaLqIaANolpAAHk_l2V9UQ482.png

鍵值對(duì)數(shù)據(jù)如下

1DB_TYPE: postgres

2 DB_HOST: postgres-prod

3DB_PORT: 5432

4 DB_NAME: wikijs創(chuàng)建數(shù)據(jù)庫(kù)用戶(hù)和數(shù)據(jù)庫(kù)

如果 PostgreSQL 數(shù)據(jù)庫(kù)里沒(méi)有創(chuàng)建 wikijs 用戶(hù)和數(shù)據(jù) ,需要手工完成一下工作:

通過(guò)『數(shù)據(jù)庫(kù)工具』連接 PostgreSQL 數(shù)據(jù)庫(kù),執(zhí)行一下 SQL 語(yǔ)句,完成數(shù)據(jù)庫(kù)和用戶(hù)的創(chuàng)建、授權(quán)。

以上 wikijs 的密碼自行修改。

部署 wiki.js

這里我們采用 Deployment 方式部署 wiki.js。

在項(xiàng)目空間的 應(yīng)用負(fù)載 → 工作負(fù)載 → 部署 → 創(chuàng)建 進(jìn)行 wiki.js 服務(wù)的創(chuàng)建。

wKgZomaLqKuASQcaAAHscRU-CRk518.png

基本信息里名稱(chēng)就叫做 wikijs ,然后進(jìn)行下一步容器組設(shè)置

容器組配置

這一步的核心就是配置 wikijs 的容器。

容器組副本數(shù)量選擇1,點(diǎn)擊添加容器

wKgZomaLqMCAXwRgAAI9jlW1qmc546.png

5 HA_ACTIVE: true

1 CREATE DATABASE wikijs;

2 CREATE USER wikijs with password 'password';

3 GRANT CONNECT ON DATABASE wikijs to wikijs;

4 GRANT USAGE ON SCHEMA public TO wikijs;

5 GRANT SELECT,update,INSERT,delete ON ALL TABLES IN SCHEMA public TO wikijs;

6 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO wikijs;鏡像選擇 dockerhub 中的 requarks/wiki:2 ,并選擇使用默認(rèn)端口,容器名稱(chēng)改為 wikijs

wKgaomaLqOWAfuwJAAL4Yz29Zhg054.png

勾選 環(huán)境變量 ,點(diǎn)擊 引用配置字典或保密字典 ,先添加剛才創(chuàng)建的保密字典 wikijs ,然后添加配置字典 wikijs ,之后點(diǎn)擊對(duì)勾完成容器配置,點(diǎn)擊下一步配置

wKgZomaLqSOAMNhAAALxNqY12QI540.png

存儲(chǔ)卷設(shè)置存儲(chǔ)卷此處無(wú)需設(shè)置,點(diǎn)擊下一步進(jìn)入高級(jí)配置

wKgZomaLqTKAbl1tAAHgmhZKrSc805.png

高級(jí)設(shè)置 里是一些額外配置,可以根據(jù)自己場(chǎng)景選擇調(diào)整配置,調(diào)整完成后點(diǎn)擊 創(chuàng)建 。

wKgaomaLqU-AdMeGAAHqbDYSrBQ121.png

創(chuàng)建訪問(wèn) wiki.js 的 Service

在項(xiàng)目空間的 應(yīng)用負(fù)載 → 服務(wù) → 創(chuàng)建 進(jìn)行服務(wù)的創(chuàng)建名稱(chēng)就叫 wikijs 然后下一步,進(jìn)入服務(wù)設(shè)置

內(nèi)部訪問(wèn)模式選擇 虛擬IP地址 ,指定工作負(fù)載選擇 wikijs

端口協(xié)議:TCP

端口名稱(chēng):tcp-3000

容器端口:3000

wKgZomaLqV6AF4eNAAIq73G2xJY216.png

服務(wù)端口:3000點(diǎn)擊下一步進(jìn)入高級(jí)設(shè)置,勾選外部訪問(wèn),訪問(wèn)模式選擇NodePort,完成后點(diǎn)擊 創(chuàng)建 。

wKgZomaLqWyAZhhTAAHo1IIHLu8661.png

然后可以使用NodePort的IP + Port進(jìn)行訪問(wèn)wikijs。

配置 wiki.js 支持中文全文檢索

wiki.js 的全文檢索支持基于 PostgreSQL 的檢索,也支持 Elasticsearch 等,相對(duì)來(lái)說(shuō), PostgreSQL 比較輕量級(jí),本項(xiàng)目中,我們使用

PostgreSQL 的全文檢索。

但是,因?yàn)?PostgreSQL 不支持中文分詞,需要額外安裝插件并配置啟用中文分詞,下面描述了為 wiki.js 啟動(dòng)基于 PostgreSQL 數(shù)據(jù)庫(kù)中文

分詞的全文檢索。

授予 wikijs 用戶(hù)臨時(shí)超管權(quán)限

通過(guò)數(shù)據(jù)庫(kù)管理工具登錄有超管權(quán)限的 PostgreSQL 用戶(hù),臨時(shí)授予 wiki.js 用戶(hù)臨時(shí)超管權(quán)限,便于啟動(dòng)中文分詞功能。

啟用數(shù)據(jù)庫(kù)的中文分詞能力

使用數(shù)據(jù)庫(kù)管理工具登錄 PostgreSQL 數(shù)據(jù)庫(kù)的 wikijs 用戶(hù),執(zhí)行以下命令,啟動(dòng)數(shù)據(jù)庫(kù)的中文分詞功能。

1 ALTER USER wikijs WITH SUPERUSER;

1 CREATE EXTENSION pg_trgm;

2

3 CREATE EXTENSION zhparser;

4 CREATE TEXT SEARCH CONFIGURATION pg_catalog.chinese_zh (PARSER = zhparser);

5 ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR n,v,a,i,e,l WITH simple;

6

7 -- 忽略標(biāo)點(diǎn)影響

8 ALTER ROLE wikijs SET zhparser.punctuation_ignore = ON;

9

-- 短詞復(fù)合取消 wikijs 用戶(hù)的臨時(shí)超管權(quán)限

登錄 PostgreSQL 數(shù)據(jù)庫(kù) wikijs 用戶(hù),取消 wikijs 用戶(hù)的超管權(quán)限。

創(chuàng)建支持中文分詞的配置 ConfigMap

在項(xiàng)目空間的 配置 → 配置字典 → 創(chuàng)建 進(jìn)行配置字典的創(chuàng)建。

名稱(chēng)就叫 wikijs-zhparser 然后下一步,添加兩個(gè)鍵值對(duì)數(shù)據(jù)。

10 ALTER ROLE wikijs SET zhparser.multi_short = ON;

11

12-- 測(cè)試一下

13select ts_debug('chinese_zh', '青春是最美好的年歲,青春是最燦爛的日子。每一個(gè)人的青春都無(wú)比寶貴,寶貴的青春只有與奮斗為伴才最閃光

取消 wikijs 用戶(hù)的臨時(shí)超管權(quán)限

登錄 PostgreSQL 數(shù)據(jù)庫(kù) wikijs 用戶(hù),取消 wikijs 用戶(hù)的超管權(quán)限。

1 ALTER USER wikijs WITH NOSUPERUSER;

創(chuàng)建支持中文分詞的配置 ConfigMap

在項(xiàng)目空間的 配置 → 配置字典 → 創(chuàng)建 進(jìn)行配置字典的創(chuàng)建。

wKgZomaLqgGACbWhAAHo07K2djE898.png

名稱(chēng)就叫 wikijs-zhparser 然后下一步,添加兩個(gè)鍵值對(duì)數(shù)據(jù)。

wKgZomaLqiaALLqXAAIfdWThRio574.pngwKgZomaLqiaAV3Z0AAJZpaej9tg819.png

1. 鍵為 definition.yml ,值為

1 key: postgres

2 title: Database - PostgreSQL

3 description: Advanced PostgreSQL-based search engine.

4 author: requarks.io

5 logo: https://static.requarks.io/logo/postgresql.svg

6 website: https://www.requarks.io/

7 isAvailable: true

8 props:

9dictLanguage:

10type: String

11title: Dictionary Language

12hint: Language to use when creating and querying text search vectors.2. 鍵為 engine.js ,值為

13default: english

14enum:

15- simple

16- danish

17- dutch

18- english

19- finnish

20- french

21- german

22- hungarian

23- italian

24- norwegian

25- portuguese

26- romanian

27- russian

28- spanish

29- swedish

30- turkish

31- chinese_zh

32order: 1

2. 鍵為 engine.js ,值為

1 const tsquery = require('pg-tsquery')()

2 const stream = require('stream')

3 const Promise = require('bluebird')

4 const pipeline = Promise.promisify(stream.pipeline)

5

6 /* global WIKI */

7

8 module.exports = {

9async activate() {

10if (WIKI.config.db.type !== 'postgres') {

11throw new WIKI.Error.SearchActivationFailed('Must use PostgreSQL database to activate this engine!')

12}

13},

14async deactivate() {

15WIKI.logger.info(`(SEARCH/POSTGRES) Dropping index tables...`)

16await WIKI.models.knex.schema.dropTable('pagesWords')

17await WIKI.models.knex.schema.dropTable('pagesVector')

18WIKI.logger.info(`(SEARCH/POSTGRES) Index tables have been dropped.`)

19},

20/**

21* INIT

22*/

23async init() {

24WIKI.logger.info(`(SEARCH/POSTGRES) Initializing...`)

25

26// -> Create Search Index

27const indexExists = await WIKI.models.knex.schema.hasTable('pagesVector')

28if (!indexExists) {

29WIKI.logger.info(`(SEARCH/POSTGRES) Creating Pages Vector table...`)

30await WIKI.models.knex.schema.createTable('pagesVector', table => {

31table.increments()

32table.string('path')

33table.string('locale')

34table.string('title')

35table.string('description')

36table.specificType('tokens', 'TSVECTOR')

37table.text('content')

38})

39}

40// -> Create Words Index

41const wordsExists = await WIKI.models.knex.schema.hasTable('pagesWords')

42if (!wordsExists) {

43WIKI.logger.info(`(SEARCH/POSTGRES) Creating Words Suggestion Index...`)

44await WIKI.models.knex.raw(`

45CREATE TABLE "pagesWords" AS SELECT word FROM ts_stat(

46'SELECT to_tsvector(''simple'', "title") || to_tsvector(''simple'', "description") || to_tsvector(''s

47)`)

48await WIKI.models.knex.raw('CREATE EXTENSION IF NOT EXISTS pg_trgm')

49await WIKI.models.knex.raw(`CREATE INDEX "pageWords_idx" ON "pagesWords" USING GIN (word gin_trgm_ops)`)

50}

51

52WIKI.logger.info(`(SEARCH/POSTGRES) Initialization completed.`)

53},

54/**

55* QUERY

56*

57* @param {String} q Query

58* @param {Object} opts Additional options

59*/

60async query(q, opts) {

61try {

62let suggestions = []

63let qry = `

64SELECT id, path, locale, title, description

65FROM "pagesVector", to_tsquery(?,?) query

66WHERE (query @@ "tokens" OR path ILIKE ?)

67`

68let qryEnd = `ORDER BY ts_rank(tokens, query) DESC`

69let qryParams = [this.config.dictLanguage, tsquery(q), `%${q.toLowerCase()}%`]

70

71if (opts.locale) {

72qry = `${qry} AND locale = ?`

73qryParams.push(opts.locale)

74}

75if (opts.path) {

76qry = `${qry} AND path ILIKE ?`

77qryParams.push(`%${opts.path}`)

78}

79const results = await WIKI.models.knex.raw(`

80${qry}

81${qryEnd}

82`, qryParams)

83if (results.rows.length < 5) {

84const suggestResults = await WIKI.models.knex.raw(`SELECT word, word <-> ? AS rank FROM "pagesWords" WH

85suggestions = suggestResults.rows.map(r => r.word)

86}

87return {

88results: results.rows,

89suggestions,

90totalHits: results.rows.length

91}

92} catch (err) {

93WIKI.logger.warn('Search Engine Error:')

94WIKI.logger.warn(err)

95}

96},

97/**

98* CREATE

99*

100* @param {Object} page Page to create

101*/

102async created(page) {

103await WIKI.models.knex.raw(`

104INSERT INTO "pagesVector" (path, locale, title, description, "tokens") VALUES (

105?, ?, ?, ?, (setweight(to_tsvector('${this.config.dictLanguage}', ?), 'A') || setweight(to_tsvector('${

106)

107`, [page.path, page.localeCode, page.title, page.description, page.title, page.description, page.safeConten

108},

109/**

110* UPDATE

111*

112* @param {Object} page Page to update

113*/

114async updated(page) {

115await WIKI.models.knex.raw(`

116UPDATE "pagesVector" SET

117title = ?,

118description = ?,

119tokens = (setweight(to_tsvector('${this.config.dictLanguage}', ?), 'A') ||

120setweight(to_tsvector('${this.config.dictLanguage}', ?), 'B') ||

121setweight(to_tsvector('${this.config.dictLanguage}', ?), 'C'))

122WHERE path = ? AND locale = ?

123`, [page.title, page.description, page.title, page.description, page.safeContent, page.path, page.localeCod

124},

125/**

126* DELETE

127*

128* @param {Object} page Page to delete

129*/

130async deleted(page) {

131await WIKI.models.knex('pagesVector').where({

132locale: page.localeCode,

133path: page.path

134}).del().limit(1)

135},

136/**

137* RENAME

138*

139* @param {Object} page Page to rename

140*/

141async renamed(page) {

142await WIKI.models.knex('pagesVector').where({

143locale: page.localeCode,

144path: page.path

145}).update({

146locale: page.destinationLocaleCode,

147path: page.destinationPath

148})

149},

150/**

151* REBUILD INDEX

152

*/更新 wikijs 的 Deployment

wiki.js 的基于 PostgreSQL 的全文檢索引擎配置位于 /wiki/server/modules/search/postgres ,我們將前面配置的 ConfigMap 加載到這個(gè)目錄。

在項(xiàng)目空間的 應(yīng)用負(fù)載 → 工作負(fù)載 → wikijs 進(jìn)入 wikijs 工作負(fù)載的詳情頁(yè)

wKgaomaLqoKAfVsKAAGjOC0zjno293.png

點(diǎn)擊左側(cè)更多操作,選擇編輯設(shè)置

wKgZomaLqqGARbfCAAHzQjfJCBs540.png

點(diǎn)擊 存儲(chǔ)卷 → 掛載配置字典或保密字典

wKgaomaLqryARrtzAAH67K4RR0E181.png

選擇配置字典 wikijs-zhparser ,權(quán)限為只讀,掛載地址為 /wiki/server/modules/search/postgres ,配置好后點(diǎn)擊對(duì)勾完成配置

wKgaomaLquGAOAqDAAIPtOzpesQ969.png

點(diǎn)擊確定完成存儲(chǔ)卷的修改

配置 wiki.js ,啟用基于 PostgreSQL 的全文檢索

1. 新的 Deployment 創(chuàng)建完成后

2. 打開(kāi) wiki.js 管理3. 點(diǎn)擊搜索引擎

4. 選擇 Database - PostgreSQL

5. 在 Dictionary Language 的下拉菜單里選擇 chinese_zh。

6. 點(diǎn)擊應(yīng)用,并重建索引。

7. 完成配置。

wKgaomaLqvyAKPYFAAM_LLs87TU513.png

總結(jié)

“K8S學(xué)習(xí)教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索”重點(diǎn)講解了wiki.js的部署方式,特別強(qiáng)調(diào)了其

對(duì)中文全文檢索功能的支持。集成了 PostgreSQL 和 zhparser 中文分詞插件。

相對(duì)于標(biāo)準(zhǔn)的 wiki.js 安裝部署過(guò)程,主要做了以下配置:

1、wiki.js 鏡像外掛了 ConfigMap ,用于修改原 Docker 鏡像里關(guān)于 PostgreSQL 搜索引擎配置的信息,以支持 chinese_zh 選項(xiàng)。

2、PostgreSQL 鏡像采用了 abcfy2/zhparser:12-alpine ,這個(gè)鏡像自帶 zhparser 中文分詞插件。

憑此文章可以去petaexpress官網(wǎng)發(fā)工單 充值≥1美元送10美元,獎(jiǎng)勵(lì)數(shù)量有限先到先得。申領(lǐng)步驟:注冊(cè)→登錄→充值→發(fā)工單 回復(fù)“文章 網(wǎng)址+文章標(biāo)題+申請(qǐng)獎(jiǎng)勵(lì)”,

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    3309

    瀏覽量

    42471
  • Wiki
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    8795
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    k8s和docker區(qū)別對(duì)比,哪個(gè)更強(qiáng)?

    部署、擴(kuò)展、管理和應(yīng)用生命周期管理能力,可實(shí)現(xiàn)高可用性和自動(dòng)伸縮,兩者常結(jié)合使用以?xún)?yōu)化容器化和應(yīng)用管理。UU云小編將對(duì)k8s和docker區(qū)別進(jìn)行詳細(xì)對(duì)比:
    的頭像 發(fā)表于 12-11 13:55 ?74次閱讀

    k8s微服務(wù)架構(gòu)就是云原生嗎??jī)烧呤鞘裁搓P(guān)系

    k8s微服務(wù)架構(gòu)就是云原生嗎?K8s微服務(wù)架構(gòu)并不等同于云原生,但兩者之間存在密切的聯(lián)系。Kubernetes云原生架構(gòu)中扮演著核心組件的角色,它簡(jiǎn)化了容器化應(yīng)用程序的管理,提供了彈
    的頭像 發(fā)表于 11-25 09:39 ?136次閱讀

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需本地與公有云分別建立K8s集群,確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,
    的頭像 發(fā)表于 11-07 09:37 ?140次閱讀

    k8s可以部署私有云嗎?私有云部署全攻略

    Kubernetes(簡(jiǎn)稱(chēng)K8S)可以部署私有云。Kubernetes是一個(gè)開(kāi)源的容器編排引擎,能夠自動(dòng)化容器部署、擴(kuò)展和管理,使得應(yīng)用可
    的頭像 發(fā)表于 10-25 09:32 ?158次閱讀

    k8s云原生開(kāi)發(fā)要求

    IO性能。網(wǎng)絡(luò)要求穩(wěn)定,建議使用私有網(wǎng)絡(luò)VPC,配置與Kubernetes兼容的網(wǎng)絡(luò)插件。操作系統(tǒng)需與K8s版本匹配,虛擬化平臺(tái)支持Docker等。此外,還需關(guān)注安全配置,如禁用Swap、調(diào)整Sysctl等,以及etcd數(shù)據(jù)存
    的頭像 發(fā)表于 10-24 10:03 ?210次閱讀
    <b class='flag-5'>k8s</b>云原生開(kāi)發(fā)要求

    k8s容器啟動(dòng)失敗的常見(jiàn)原因及解決辦法

    k8s容器啟動(dòng)失敗的問(wèn)題通常出現(xiàn)在開(kāi)發(fā)者使用Kubernetes進(jìn)行容器編排時(shí),可能的原因有多種,例如:配置錯(cuò)誤、鏡像問(wèn)題、資源限制、依賴(lài)問(wèn)題、網(wǎng)絡(luò)問(wèn)題、節(jié)點(diǎn)狀態(tài)異常、其他因素等,以下是對(duì)這些常見(jiàn)原因的詳細(xì)分析:
    的頭像 發(fā)表于 10-11 10:12 ?236次閱讀

    云服務(wù)器部署k8s需要什么配置?

    云服務(wù)器部署K8s需要至少2核CPU、4GB內(nèi)存、50GBSSD存儲(chǔ)的主節(jié)點(diǎn)用于管理集群,工作節(jié)點(diǎn)建議至少2核CPU、2GB內(nèi)存、20GBSSD。還需安裝Docker,選擇兼容的Kubernetes版本,配置網(wǎng)絡(luò)插件,以及確保系統(tǒng)
    的頭像 發(fā)表于 10-09 15:31 ?204次閱讀

    納尼?自建K8s集群日志收集還能通過(guò)JMQ保存到JES

    推薦采用單獨(dú)部署的方案。 二、新方案實(shí)踐 1.新方案簡(jiǎn)介 在京東內(nèi)網(wǎng)環(huán)境部署 K8S 收集日志 , kafk
    的頭像 發(fā)表于 09-30 14:45 ?209次閱讀

    常用的k8s容器網(wǎng)絡(luò)模式有哪些?

    常用的k8s容器網(wǎng)絡(luò)模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s容器網(wǎng)絡(luò)模
    的頭像 發(fā)表于 09-19 11:29 ?235次閱讀

    K8S集群中使用JDOS KMS服務(wù)對(duì)敏感數(shù)據(jù)安全加密

    基本概念 KMS,Key Management Service,即密鑰管理服務(wù),K8S集群中,以驅(qū)動(dòng)和插件的形式啟用對(duì)Secret,Configmap進(jìn)行加密。以保護(hù)敏感數(shù)據(jù), 驅(qū)動(dòng)和插件需要
    的頭像 發(fā)表于 08-09 16:00 ?226次閱讀
    <b class='flag-5'>K8S</b>集群中使用JDOS KMS服務(wù)對(duì)敏感數(shù)據(jù)安全加密

    如何使用Kubeadm命令PetaExpress Ubuntu系統(tǒng)上安裝Kubernetes集群

    Kubernetes,通常縮寫(xiě)為K8s,是一個(gè)開(kāi)源的容器編排平臺(tái),旨在自動(dòng)化容器化應(yīng)用的部署、擴(kuò)展和管理。有了Kubernetes,您可以輕松地部署
    的頭像 發(fā)表于 07-15 13:31 ?858次閱讀
    如何使用Kubeadm命令<b class='flag-5'>在</b><b class='flag-5'>PetaExpress</b> Ubuntu<b class='flag-5'>系統(tǒng)</b>上安裝Kubernetes集群

    K8S學(xué)習(xí)教程(二): PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis 集群

    并且需要手動(dòng)重啟節(jié)點(diǎn),相較之下,使用 PetaExpress 提供的 Kubernetes(k8s) 服務(wù) 進(jìn)行 Redis 集群的部署,則展現(xiàn)出了顯著的優(yōu)勢(shì): 1、安裝便捷:使用鏡像或者 yaml 配置文件即可一件安裝,極大地
    的頭像 發(fā)表于 07-03 15:30 ?736次閱讀
    <b class='flag-5'>K8S</b><b class='flag-5'>學(xué)習(xí)</b>教程(二):<b class='flag-5'>在</b> <b class='flag-5'>PetaExpress</b> <b class='flag-5'>KubeSphere</b><b class='flag-5'>容器</b>平臺(tái)<b class='flag-5'>部署</b>高可用 Redis 集群

     K8S學(xué)習(xí)教程一:使用PetaExpress云服務(wù)器安裝Minikube 集群

    ? 什么是Minikube Minikube是一款工具,主要用于本地運(yùn)行 Kubernetes 集群。Kubernetes 開(kāi)源的平臺(tái),用于自動(dòng)化容器化應(yīng)用的部署、擴(kuò)展和管理,而Minikube
    的頭像 發(fā)表于 07-01 15:41 ?367次閱讀
     <b class='flag-5'>K8S</b><b class='flag-5'>學(xué)習(xí)</b>教程一:使用<b class='flag-5'>PetaExpress</b>云服務(wù)器安裝Minikube 集群

    K8s容器debug高級(jí)技巧

    如果您在 Kubernetes 上運(yùn)行軟件,您會(huì)想要在某些時(shí)候去調(diào)試您所部署的軟件的一些方面。對(duì)于習(xí)慣于使用虛擬機(jī) (VMs) 的人來(lái)說(shuō)能自然使用的一種簡(jiǎn)單的調(diào)試方法,就是連接到一個(gè)正在運(yùn)行的 pod。
    的頭像 發(fā)表于 01-12 11:31 ?575次閱讀

    K8S落地實(shí)踐經(jīng)驗(yàn)分享

    k8s 即 Kubernetes,是一個(gè)開(kāi)源的容器編排引擎,用來(lái)對(duì)容器化應(yīng)用進(jìn)行自動(dòng)化部署、 擴(kuò)縮和管理。
    的頭像 發(fā)表于 01-02 11:45 ?1117次閱讀
    <b class='flag-5'>K8S</b>落地實(shí)踐經(jīng)驗(yàn)分享
    主站蜘蛛池模板: 含羞草影院免费区| 国产精品嫩草影院| 国产精品无码AV天天爽人妻蜜桃 | 小777论坛| 一个人在线观看的视频| AV无码久久无遮挡国产麻豆| 国产成人啪精品视频免费网| 久久精品熟女亚洲AV国产| 日本浴室日产在线系列| 亚洲色图在线播放| 成年人视频在线免费看| 精品四虎国产在免费观看| 啪啪后入内射日韩| 亚洲偷偷自拍免费视频在线| www.伊人| 久久精品123| 天天国产在线精品亚洲| 最新国产在线视频| 国产午夜婷婷精品无码A片 | 日本bbwhd| 一级做a爰片久久毛片潮喷动漫| 大伊人青草狠狠久久| 久久强奷乱码老熟女| 无码人妻视频又大又粗欧美| 99re1久久热在线播放| 果冻传媒视频在线播放 免费观看 果冻传媒视频在线播放 | 女张腿男人桶羞羞漫画| 亚洲精品福利在线| 沟沟人体一区二区| 免费看黄色小说| 亚洲视频区| 国产精品国产三级国产专区53| 胖老太与人牲交BBWBBW高潮| 印度学生xxxxx性14一16| 国产乱码精品AAAAAAAA| 日本xxx片免费高清在线| 100国产精品人妻无码| 花蝴蝶在线直播观看| 乌克兰10一12x video| 擦擦擦在线视频观看| 免费小视频在线观看|