官网
https://js.wiki/
https://docs.requarks.io/install/docker-desktop
k8s postgres 安装
因为包含中文分词,要在原版的基础上增加分词插件。
这里直接使用别人已经 制作好的镜像
github 地址 : https://github.com/abcfy2/docker_zhparser
镜像地址: hub.docker.com/r/abcfy2/zhparser
这里选择 postgres 15
版本,即 docker pull abcfy2/zhparser:15-alpine
那么最后的 k8s postgres
配置文件如下
pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: postgres
name: postgres
spec:
replicas: 1
revisionHistoryLimit: 5
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- env:
- name: TZ
value: Asia/Shanghai
- name: POSTGRES_USER
value: fox
- name: POSTGRES_PASSWORD
value: 123456
- name: ALLOW_IP_RANGE
value: 0.0.0.0/0
- name: PGDATA
value: /var/lib/postgresql/data
#image: 'postgres:15-alpine'
# 使用支持 中文分词的
image: 'abcfy2/zhparser:15-alpine'
name: postgres
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
protocol: TCP
# resources:
# limits:
# memory: 2Gi
# requests:
# memory: 2Gi
volumeMounts:
- name: vm-data
mountPath: /var/lib/postgresql/data
restartPolicy: Always
terminationGracePeriodSeconds: 30
volumes:
- name: vm-data
hostPath:
# 宿主机目录
path: /www/websites/postgresql/data
# hostPath 卷指定 type,如果目录不存在则创建(可创建多层目录)
type: DirectoryOrCreate
服务 svc.yaml
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
ports:
- port: 5432
targetPort: 5432
nodePort: 30432
selector:
app: postgres
30432 : 为 外部端口
应用并生效
kubectl apply -f pod.yaml
kubectl apply -f svc.yaml
配置 wiki数据库
创建 wiki 使用 用户和库
# 登陆 fox用户
psql -U fox
设置数据库相关
-- 生成用户,数据库,给用户管理员权限(创建插件用)
-- 创建用户及密码
CREATE USER wikijs WITH PASSWORD 'wikijs';
-- 创建库及库所属人
CREATE DATABASE wikijs_db OWNER wikijs;
-- 设置权限
GRANT ALL PRIVILEGES ON DATABASE wikijs_db to wikijs;
-- 设置用户为超级用户
ALTER USER wikijs WITH SUPERUSER;
最后 exit
退出数据库命令行
设置 wikijs
用户下 库相关
登陆
psql -U wikijs -d wikijs_db
表相关操作
# 创建扩展表
-- https://docs.requarks.io/en/search/postgres
CREATE EXTENSION pg_trgm;
CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION pg_catalog.chinese_zh (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR n,v,a,i,e,l WITH simple;
-- [二、PostgerSQL全文检索系统之中文支持_jjj的博客-CSDN博客](
-- https://blog.csdn.net/weixin_40746796/article/details/89209316
-- )
-- 忽略标点影响
ALTER ROLE wikijs SET zhparser.punctuation_ignore = ON;
-- 短词复合
ALTER ROLE wikijs SET zhparser.multi_short = ON;
-- 看看 chinese_zh 在不在
\dF
-- 测试一下
select ts_debug('chinese_zh', '白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代');
最后 exit
退出数据库命令行
设置wikijs
用户为普通用户权限
登陆
psql -U fox -d fox
表相关操作
-- UPDATE:之前提示 pg_catalog 没权限,这里再执行一次!
CREATE TEXT SEARCH CONFIGURATION pg_catalog.chinese_zh (PARSER = zhparser);
ALTER USER wikijs WITH NOSUPERUSER;
到此数据库配置完成
k8s 配置 wiki
pod.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: wiki
name: wiki
spec:
replicas: 1
revisionHistoryLimit: 5
selector:
matchLabels:
app: wiki
template:
metadata:
labels:
app: wiki
spec:
containers:
- env:
- name: TZ
value: Asia/Shanghai
- name: DB_USER
value: fox
- name: DB_PASS
value: 123456
- name: DB_NAME
value: wiki_db
- name: DB_HOST
value: postgres
- name: DB_TYPE
value: postgres
- name: DB_PORT
value: "5432"
image: 'ghcr.io/requarks/wiki:2'
name: wiki
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
protocol: TCP
# resources:
# limits:
# memory: 2Gi
# requests:
# memory: 2Gi
volumeMounts:
- name: vm-data
mountPath: /var/lib/wiki/data
restartPolicy: Always
terminationGracePeriodSeconds: 30
volumes:
- name: vm-data
hostPath:
# 宿主机目录
path: /www/websites/wiki/data
# hostPath 卷指定 type,如果目录不存在则创建(可创建多层目录)
type: DirectoryOrCreate
svc.yml
apiVersion: v1
kind: Service
metadata:
name: wiki
labels:
app: wiki
spec:
ports:
- port: 3000
targetPort: 3000
selector:
app: wiki
ingress.yml
本步骤是设置 域名可以访问,我这的k8s ingress 使用的是 traefik
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik
name: wiki
spec:
rules:
- host: wiki.foxwho.com
http:
paths:
- backend:
service:
name: wiki
port:
number: 3000
path: /
pathType: ImplementationSpecific
应用并生效
kubectl apply -f pod.yml
kubectl apply -f svc.yml
kubectl apply -f ingress.yml
设置wiki 可以使用中文分词
进入pod 内部
kubectl exec -it `kubectl get pods | grep wiki | awk '{print $1}'` bash
显示 definition.yml 文件内容,
cat /wiki/server/modules/search/postgres/definition.yml
把上面显示的内容复制到 /www/websites/wiki/search/definition.yml
文件中,如果没有目录的,要先创建好目录或文件
修改 /www/websites/wiki/search/definition.yml
文件 ,案例如下
主要是在 - turkish
下面一行增加- chinese_zh
格式要一致
请不要直接复制以下案例内容,因为有的版本该文件会增加其他功能字段
key: postgres
title: Database - PostgreSQL
description: Advanced PostgreSQL-based search engine.
author: requarks.io
logo: https://static.requarks.io/logo/postgresql.svg
website: https://www.requarks.io/
isAvailable: true
props:
dictLanguage:
type: String
title: Dictionary Language
hint: Language to use when creating and querying text search vectors.
default: english
enum:
- simple
- danish
- dutch
- english
- finnish
- french
- german
- hungarian
- italian
- norwegian
- portuguese
- romanian
- russian
- spanish
- swedish
- turkish
- chinese_zh
order: 1
最后重启 pod
kubectl rollout restart deploy wiki
配置 wiki
通过域名打开http://wiki.foxwho.com
,开始配置wiki。配置比较简单,这里略。
配置 中文
如果要配置语言为中文的的,在这个页面下http://wiki.lanmps.com/a/locale
,
配置 中文搜索
wiki.js 管理 | 搜索引擎 | Database - PostgreSQL | Dictionary Language
选 chinese_zh
中文分词 参考 安装:
https://zhuanlan.zhihu.com/p/335359081
如果设置指定ip访问
设置 wiki 白名单
wiki-ipwhitelist.yml
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: wiki-ipwhitelist
spec:
ipWhiteList:
sourceRange:
- 127.0.0.1/32
- 192.168.0.1/32
- 10.0.0.1/32
- 114.114.114.114
114.114.114.114 :允许访问的ip
127.0.0.1/32,192.168.0.1/32,10.0.0.1/32 位局域网ip
ingress 白名单配置
ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik
##指定使用的 Middleware,规则是 {namespace名称}-{middleware名称}@{资源类型}
traefik.ingress.kubernetes.io/router.middlewares: default-wiki-ipwhitelist@kubernetescrd
name: wiki
spec:
rules:
- host: wiki.foxwho.com
http:
paths:
- backend:
service:
name: wiki
port:
number: 3000
path: /
pathType: ImplementationSpecific
应用并生效
kubectl apply -f wiki-ipwhitelist.yml
kubectl apply -f ingress.yml