动机
wiki.js功能多,符合当代审美,然而v2.5不支持中文全文搜索。是其数据库postgres(v10)对中文全文搜索缺乏支持所致。所以改用带 zhparser 插件的 postgres数据库。
官网已有部署教程。网上已有使用带 zhparser 插件的 postgres数据库,以支持中文全文搜索的教程。本文把两者合而为一,并增加了一些细节,如docker容器没有vi,只能使用ed的操作记录。
利用docker安装各组件。
日期:2021-3-29
安装
Update the machine
First, let’s make sure the machine is up to date.
# Fetch latest updates
sudo apt -qqy update
# Install all updates automatically
sudo DEBIAN_FRONTEND=noninteractive apt-get -qqy -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' dist-upgrade
Install Docker
# Install dependencies to install Docker
sudo apt -qqy -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' install apt-transport-https ca-certificates curl gnupg-agent software-properties-common openssl
# Register Docker package registry
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Refresh package udpates and install Docker
sudo apt -qqy update
sudo apt -qqy -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold
Containers Prepare
# Create installation directory for Wiki.js
mkdir -p /etc/wiki
# Generate DB secret
openssl rand -base64 32 > /etc/wiki/.db-secret
# Create internal docker network
docker network create wikinet
# Create data volume for PostgreSQL
docker volume create pgdata
Postgresql Container
# Create the containers
# -e为设置环境变量 -v为从主机向容器中复制
# 拉取镜像,并带参数创建容器
docker create --name=db -e POSTGRES_DB=wiki -e POSTGRES_USER=wiki -e POSTGRES_PASSWORD_FILE=/etc/wiki/.db-secret -v /etc/wiki/.db-secret:/etc/wiki/.db-secret:ro -v pgdata:/var/lib/postgresql/data --restart=unless-stopped -h db --network=wikinet -p 5432:5432 chenxinaz/zhparser
# 运行容器
docker start db
# 进入容器
docker exec -it db bash
su - postgres
psql
# 生成用户,数据库,给用户管理员权限(创建插件用)
CREATE USER wiki WITH PASSWORD 'wiki';
CREATE DATABASE wiki OWNER wiki;
GRANT ALL PRIVILEGES ON DATABASE wiki to wiki;
ALTER USER wiki WITH SUPERUSER;
# 退出 session,重新连入 wiki数据库,设置中文全文检索
\q
psql -U wiki -d wiki
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 wiki SET zhparser.punctuation_ignore = ON;
# 短词复合
ALTER ROLE wiki SET zhparser.multi_short = ON;
# 看看 chinese_zh 在不在
\dF
# 测试一下
select ts_debug('chinese_zh', '白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代');
# 退出 session,重新连入 postgres 数据库,关闭 wiki的 superuser权限
\q
psql -U postgres -d postgres
ALTER USER wiki WITH NOSUPERUSER;
# 退出该容器
\q
exit
exit
Wiki Container
# 在参数里设置端口
docker create --name=wiki -e DB_TYPE=postgres -e DB_HOST=db -e DB_PORT=5432 -e DB_PASS_FILE=/etc/wiki/.db-secret -v /etc/wiki/.db-secret:/etc/wiki/.db-secret:ro -e DB_USER=wiki -e DB_NAME=wiki -e UPGRADE_COMPANION=1 --restart=unless-stopped -h wiki --network=wikinet -p 80:3000 -p 443:3443 requarks/wiki:2
# 进入容器 console
docker start wiki
docker exec -it wiki bash
# 将 /wiki/server/modules/search/postgres/definition.yml 中的 enum list 添加一个元素 chinese_zh
ed /wiki/server/modules/search/postgres/definition.yml
enum:
...
- turkish
- chinese_zh
# ed的相关操作
a #进入插入模式
- chinese_zh
. #返回命令模式
w #保存
q #退出
重启wiki容器,打开 wiki.js 管理 | 搜索引擎 | Database - PostgreSQL | Dictionary Language 选 chinese_zh
。
修改 wiki 中的表 searchEngines 中的 row,将 dictLanguage 改为 chinese_zh,具体如下:(我的版本已经有这个了,不需要这步)
docker exec -it bd bash
su - postgres
psql
\d wiki
(本来想写的,发现不用了)
改好后在入口试试全文检索吧,enjoy!
(下面的不配置,也可使用了)
用于自动更新的容器组件
docker create --name=wiki-update-companion -v /var/run/docker.sock:/var/run/docker.sock:ro --restart=unless-stopped -h wiki-update-companion --network=wikinet requarks/wiki-update-companion:latest
Setup Firewall
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw --force enable
Start the containers
docker start db
docker start wiki
docker start wiki-update-companion
参考文献
https://docs.requarks.io/install/ubuntu
https://zhuanlan.zhihu.com/p/335359081