腾讯轻量应用服务器CentOS宝塔面板安装Wiki.js并添加中文检索支持
腾讯轻量应用服务器CentOS+宝塔面板安装Wiki.js并添加中文检索支持
安装Wiki.js
以下是Wiki.js 2.x.x 的安装步骤。
下载wiki.js网站
按照 操作,文档中第一步是通过后台命令行下载wiki.js网站压缩包,由于使用了宝塔面板我们可以变通一下,使用浏览器下载这个资源,并在之后通过宝塔手动放到网站路径下。
https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
在宝塔面板中安装必要的支持环境
在软件商店中,搜索并安装
Nginx
Node.js版本管理器
PostgreSQL管理器
,其中PostgreSQL数据库是wiki.js强烈推荐使用的数据库,会支持全部的功能,所以我们选择使用这个数据库。而后在Node.js版本管理器的设置界面中安装nodejs14.x.x版本,在PostgreSQL管理器安装PostgreSQL14.2版本。
安装创建数据库
在刚刚安装好的PostgreSQL管理器配置界面中选择数据库列表,点击添加数据库按钮,这里因为是要给wiki.js使用,所以我们为数据库起名叫 wiki,用户名也是wiki。
新建网站目录
在宝塔面板的文件选项卡中,在默认打开的网站路径
/www/wwwroot/
中新建一个文件夹叫wiki,然后进入文件夹下把我们之前下载的wiki.js网站文件拖入并解压在此路径下。解压完成后就可以把压缩包删了。创建nodejs项目网站
在宝塔面板中选择网站选项卡,并进入node项目,选择添加Node项目。
项目名称我们这里设为wiki,端口号设置为wiki.js默认使用的端口3000,点击项目目录选择上一步的路径文件夹。其他参数按照需求配置。
点击提交后宝塔会自动下载依赖,但其实nodejs网站包已经把需要的依赖做好了,在开始自动安装依赖后我们马上刷新一下界面打断安装即可。
配置wiki.js
在网站文件路径下,将
config.sample.yml
改名为->config.yml
,然后双击打开在宝塔面板中编辑。最核心的,要将数据库配置改为我们之前的数据库用户和密码。其他的部分参考官方wiki即可:# PostgreSQL / MySQL / MariaDB / MS SQL Server only: host: localhost port: 5432 user: wiki pass: <password> db: wiki ssl: false
启动网站
在一切完成后,我们就可以在宝塔的网站选项卡中重新启动wiki.js了。如果之后网站有什么报错等内容我们可以通过网站配置中的项目日志查看信息定位问题。
最后记得在云服务后台的防火墙中将3000端口打开,我们就能够通过外网IP+3000端口访问了。
首次进入时会要求设置管理员账户等信息,按照提示完成即可。 
添加中文检索支持
在 wiki.js 后台中,我们在搜索设置中选择 PostgreSQL数据库,可以看到下拉菜单中是没有中文选项的,我们需要为PostgreSQL数据库安装中文搜索插件,并在wiki.js配置中加入中文选项。
补齐宝塔面板安装的PostgreSQL缺失的库和插件
由于宝塔面板安装的PostgreSQL缺少一些库和自带插件,会导致我们后面执行
CREATE EXTENSION pg_trgm;
语句时报错,我们还需要在终端中手动安装一个 PostgreSQL 并将其库和插件复制进入宝塔面板安装的PostgreSQL中,最后再将手动安装的 PostgreSQL 删除。
在服务器终端中,添加 PostgreSQL RPM 服务器
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装postgresql14-contrib
sudo yum install -y postgresql14-contrib
复制通过终端安装的 PostgreSQL 的库文件和插件 到宝塔面板安装的 PostgreSQL 安装目录里
sudo awk 'BEGIN { cmd="cp -ri /usr/pgsql-14/share/extension/* /www/server/pgsql/share/extension"; print "n" |cmd; }' sudo awk 'BEGIN { cmd="cp -ri /usr/pgsql-14/lib/* /www/server/pgsql/lib/"; print "n" |cmd; }'
卸载通过终端安装的 PostgreSQL
sudo yum remove -y postgresql14-contrib
安装中文插件 zhparser
安装 scws
scws 中文分词系统是 zhparser 编译安装的必要内容。使用下方指令下载并编译安装 scws。
wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 tar xvjf scws-1.2.3.tar.bz2 cd scws-1.2.3 sudo ./configure sudo make install
安装 zhparser
注意在这步中需要使用 PG_CONFIG 来指定 pgsql 的 pg_config 文件路径,否则运行会报错。
clone 项目时腾讯云莫名抽风下载不动,最后我是通过手动下载压缩包并通过面板扔到了服务器上。
git clone https://github.com/amutu/zhparser.git cd zhparser sudo PG_CONFIG=/www/server/pgsql/bin/pg_config make sudo PG_CONFIG=/www/server/pgsql/bin/pg_config make install
全部安装已经完成,删除路径下无用的程序压缩包和解压后的文件。
在PostgreSQL中创建中文插件
进入PostgreSQL数据库
以默认的管理员 postgres 登录
cd /www/server/pgsql/bin sudo -u postgres ./psql
授予wiki用户管理员权限,并退出
ALTER USER wiki WITH SUPERUSER; \q
使用wiki用户名登录数据库。注意一定使用 wiki 账户操作后续内容,否则创建的文本搜索配置并无法被 wiki 的账户使用,会导致 wiki.js 报错:text search configuration “chinese_zh” does not exist)
./psql -U wiki -d wiki
创建扩展
CREATE EXTENSION pg_trgm; CREATE EXTENSION zhparser;
输入指令
\dFp
查看扩展是否生效,列出文本搜寻剖析器,可以看到结果中已经出现了 zhparserpostgres=# \dFp List of text search parsers Schema | Name | Description ------------+----------+--------------------- pg_catalog | default | default word parser public | zhparser | (2 rows)
将扩展应用到配置中
# 创建使用zhparser作为解析器的全文搜索的配置 CREATE TEXT SEARCH CONFIGURATION pg_catalog.chinese_zh (PARSER = zhparser); # 往全文搜索配置中增加token映射 ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR n,v,a,i,e,l WITH simple;
微调解析器配置
# 忽略标点影响 ALTER ROLE wiki SET zhparser.punctuation_ignore = ON; # 短词复合 ALTER ROLE wiki SET zhparser.punctuation_ignore = ON;
查看所有语言列表里有没有 chinese_zh
postgres=# \dF List of text search configurations Schema | Name | Description ------------+------------+--------------------------------------- pg_catalog | arabic | configuration for arabic language pg_catalog | armenian | configuration for armenian language pg_catalog | basque | configuration for basque language pg_catalog | catalan | configuration for catalan language pg_catalog | chinese_zh | . . . (30 rows)
测试一下中文搜索功能
postgres=# select ts_debug('chinese_zh', '白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代'); ts_debug ---------------------------------------------------- (t,"time,时语素",白垩纪,{},,) (v,"verb,动词",是,{simple},simple,{是}) (n,"noun,名词",地球,{simple},simple,{地球}) (n,"noun,名词",上海,{simple},simple,{上海}) (m,"numeral,数词",陆,{},,) (v,"verb,动词",分布,{simple},simple,{分布}) (c,"conjunction,连词",和,{},,) (n,"noun,名词",生物界,{simple},simple,{生物界}) (d,"adverb,副词",急剧,{},,) (v,"verb,动词",变化,{simple},simple,{变化}) (u,"auxiliary,助词",、,{},,) (n,"noun,名词",火山,{simple},simple,{火山}) (v,"verb,动词",活动,{simple},simple,{活动}) (a,"adjective,形容词",频繁,{simple},simple,{频繁}) (u,"auxiliary,助词",的,{},,) (n,"noun,名词",时代,{simple},simple,{时代}) (16 rows)
退出数据库,再次以postgres账户登录,并取消wiki账户的管理员权限
\q ./psql -U postgres -d postgres ALTER USER wiki WITH NOSUPERUSER; \q
在Wiki.js 的搜索配置中添加中文选项
- 修改wiki路径中 /wiki/server/modules/search/postgres/definition.yml 文件,在文件中的 enum list 添加一个元素 chinese_zh
enum:
...
- turkish
- chinese_zh
- 宝塔面板中重启wiki.js服务器
在wiki.js中启用中文搜索
再服务重启后我们再次进入wiki.js的后台就可以看到有chinese_zh选项了,选择并应用。然后点击更新索引按钮,看到显示索引更新成功,说明我们就已经成功开启中文搜索功能了。
参考文献
[1]
[2]
[3]
[4]
[5]