wiki.js开源文档库安装与功能介绍
一、介绍
1.1 基本概述
https://news.qq.com/rain/a/20230324A03IUX00
Wiki.js是一款基于Node.js和Vue技术栈可高度扩展的、开源的 Wiki 软件。适用于团队协作共同编辑文档。尽管市面上已经有很多 Wiki.js 的同类竞品,比如 Confluence、语雀、Notion 等等,但它基本上已经为用户考虑好了搭建一个 Wiki 站点可能会用到的解决方案,包括存储、评论系统、访问统计以及全文搜索等等。而这些特性既是「powerful」, 同时又能「extensible」。
1.2 功能亮点
1.2.1 文档管理
- 在线编辑文档:Wiki.js 内置了多种的编辑器供你选择,如 Markdown、Visual Editor(即 WYSIWYG,所见即所得)、AsciiDoc、原始的 HTML 编辑器等。这个是知识库最基本的功能,既然要团队能共享文档,那就要解决每个人文档一致性问题。在统一的web端编辑是最简单的解决方案。
- 文档版本控制:可以恢复历史版本,还能可视化比较同一文档的不同版本。
- 文档搜索:Wiki.js 基本上也涵盖了主流的全文搜索引擎方案,包括 AWS CloudSearch、Azure Search、Elasticsearch 等。
1.2.2 存储与备份
支持 Git 协议的存储与同步。如:github, gitlab等git服务。简单来说就是,即便你不在 Wiki.js 内置的编辑器上编辑内容,但只要你把创作的内容上传到主流的 Git 存储平台如 GitHub 或 GitLab 等,之后在后台界面中勾选并配置 Git 存储选项,就那么 Wiki.js 可以自动将内容同步到站点上而无须手动操作,实现从写作到发布的一站式闭环!wiki.js官方文档就是存储在github上的。通过我的实践,完全可以私有化本地git服务,不需要通过github这样的网站。这对数据本地安全是很有用的功能。
除了Git同步,你也可以选择本地文件的存储方式,这样可以开启每日备份选项。
1.2.3 安全与权限
用户管理系统,简化用户登录和权限管理流程。
身份认证。除了直接在注册好的 Wiki.js 站点上注册之外,Wiki.js 还集成了国外多个平台的身份验证,如 GitHub、Google、Slack 等,如果你想接入自己的身份认证服务,那么 Wiki.js 也预留了 OAuth2、CAS、Generic OpenID Connect 等多种认证服务接口。
1.2.4 自动化接口
https://blog.csdn.net/weixin_38299857/article/details/145519850
Wiki.js 也预留了自动化接口,在后台中配置了 API 访问密钥之后即可以一边参考接口文档,一边通过 GraphQL 接口来与其他自动化工具集成或关联。当然在未来的版本中也会提供 Webhook 的功能。
1.2.5 web界面可定制
外观定制,自定义主题。就是通过自己写CSS,这点对界面美观有要求的人可以研究。
二、docker方式安装
2.1 镜像下载
这里介绍的是采用docker方式安装wiki.js环境。通常镜像下载是比较麻烦的事情,可以通过设置代理下载。docker image也可以在其他网络好的设备上下载后保存为tar包,拷贝到部署环境也是完全可行的。
docker pull ghcr.io/requarks/wiki:2.5
docker pull docker.xuanyuan.me/library/mysql:5.7
2.2 部署
docker安装wiki.js mysql。由于我只是原型验证下wiki.js部署,用的是mysql数据库。
2.2.1 加载镜像
# docker load < mysql.tar
441e16cac4fe: Loading layer [==================================================>] 1.536kB/1.536kB
Loaded image: docker.xuanyuan.me/library/mysql:5.7
# docker load < wikijs.tar
340489cca797: Loading layer [==================================================>] 36.86kB/36.86kB
Loaded image: ghcr.io/requarks/wiki:2.5
2.2.2 创建docker网络
这个网络是给wiki.js与mysql通信用的。
docker network create wiki-net
2.2.3 部署mysql
docker run --name mysql-wiki -e MYSQL_ROOT_PASSWORD=my-pwd -e MYSQL_DATABASE=wikijs -e MYSQL_USER=wikijs -e MYSQL_PASSWORD=wikijs-pwd --network=wiki-net -d docker.xuanyuan.me/library/mysql:5.7
2868f7c555837e011da1593ef5cc66d2d111a20ed41c898be379a56e2e5f66e3
2.2.4 部署wiki.js
docker run --name wikijs -e DB_TYPE=mysql -e DB_HOST=mysql-wiki -e DB_PORT=3306 -e DB_USER=wikijs -e DB_PASS=wikijs-pwd -e DB_NAME=wikijs --network=wiki-net -p 8080:3000 -d ghcr.io/requarks/wiki:2.5
85a2304482956e1609cff23ba9a0e41b64556f0101dcacac108910e0ff0a90e7
2.2.4.1 wiki.js调试方式
docker exec -it wikijs bash
如果有旧docker占用参数名就要先删除。
# docker run --name wikijs -e DB_TYPE=mysql -e DB_HOST=mysql-wiki -e DB_PORT=3306 -e DB_USER=wikijs -e DB_PASS=wikijs-pwd -e DB_NAME=wikijs --network=wiki-net -p 8080:3000 -d ghcr.io/requarks/wiki:2.5
docker: Error response from daemon: Conflict. The container name "/wikijs" is already in use by container "842d06c018b86e0818f14d35bceddce7317a9b6b1dbf1f824ecf3a0c90b8848f". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
# docker rm 842d06c018b86e0
842d06c018b86e0
2.2.5 验证部署正常
2.2.5.1 验证docker正常
可以看到两个docker都正常运行。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85a230448295 ghcr.io/requarks/wiki:2.5 "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 3443/tcp, 0.0.0.0:8080->3000/tcp, :::8080->3000/tcp wikijs
2868f7c55583 docker.xuanyuan.me/library/mysql:5.7 "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 3306/tcp, 33060/tcp mysql-wiki
2.2.5.2 mysql数据库调试方式
查看数据库数据,在连接好wikijs后可以看是否有数据写入。
# docker exec -it mysql-wiki bash
bash-4.2# mysql -u wikijs -p wikijs
Enter password: wikijs-pwd <<< 密码是docker部署时设置的密码
进入数据库界面后查看数据。
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| wikijs |
+--------------------+
2 rows in set (0.00 sec)
mysql> SHOW TABLES;
+------------------+
| Tables_in_wikijs | <<< wikijs相关数据,说明wiki.js已经连接上了mysql。
+------------------+
| analytics |
| apiKeys |
| assetData |
| assetFolders |
| assets |
| authentication |
| commentProviders |
| comments |
| editors |
| groups |
| locales |
| loggers |
| migrations |
| migrations_lock |
| navigation |
| pageHistory |
| pageHistoryTags |
| pageLinks |
| pageTags |
| pageTree |
| pages |
| renderers |
| searchEngines |
| settings |
| storage |
| tags |
| userAvatars |
| userGroups |
| userKeys |
| users |
+------------------+
30 rows in set (0.00 sec)
2.2.6 访问wiki.js web页面
wiki.js设置的http服务监听的是8080端口。只要web访问这个端口就可以访问web页面。
# netstat -tunple
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 0 502679 21255/docker-proxy
tcp6 0 0 :::8080 :::* LISTEN 0 509743 21262/docker-proxy
wiki.js本地浏览器可以访问wiki.js的http服务地址:http://localhost:8080/。我的wiki.js部署在远端服务器172.16.100.43上就需要把localhost替换为服务器IP:http://172.16.100.43:8080/。
可以看到web页面就整个wiki.js环境安装成功了!
2.3 基本使用
2.3.1 初始界面
初始的web界面需要设置管理员账号密码。可以随便填一个不存在的邮箱都行。

2.3.2 管理员登录

登录后界面:

2.3.3 系统设置

三、功能原型验证
3.1 文档功能验证
3.1.1 搜索功能
验证结果:初始部署只能搜索标题,文档内容不能搜索。可能需要通过安装拓展插件实现。

3.1.2 文档协同编辑
可以多人编辑同一篇文档。这个是团队必须要的一个功能。文档保存按钮就会触发一次git commit。
验证步骤:
- 用户1创建一篇文档。
- 登录用户2编辑同一篇文档。
3.1.2.1 设置普通用户编辑权限

页面权限:

3.1.2.2 普通用户编辑效果
普通用户界面出现编辑图标则具有编辑权限。

用户2成功编辑并保存正文则说明共同编辑是成功的。

3.1.3 文档插入图片
一篇文档不只有文字,也应该有插图。
3.1.3.1 插入流程图
支持draw.io

3.1.3.2 插入位图
文档编辑界面有插入图片(png, jpg)的菜单可以上传图片。
3.2 git存储功能验证
因为很多这些软件都想把数据限制在他自己软件才能读取,这样对用户迁移就很不灵活。一个团队的文档可能以后要整体迁移的,如果数据被限制了,那如果遇到这个软件以后开始收费或闭源将是很麻烦的事情。
3.2.1 设置
看菜单有git仓库设置功能。而且我采用一个本地的git仓库而不需要连接外网。
这里我填的远端仓库地址是一个内网私有地址:root@172.18.0.1:/home/git。只需要保证wiki.js的docker里能确认git clone这个地址能成功即可。

storage.status可以看到git配置成功!
如果不成功,调试方法也是根据storage.status的日志提示。
3.2.2 同步验证
git拉取的新文档

wiki.js里查看git log与远端仓库git log对比则可以说明wiki.js与git仓库双向同步验证完成。

浙公网安备 33010602011771号