公司的操作手册放在共享文件夹里,项目说明写在聊天群中,新员工遇到问题又要重新问一遍。资料分散之后,查找、更新和交接都会变得麻烦。把常用文档集中到知识库中,可以减少重复沟通,也便于维护统一版本。
Wiki.js是一款基于Node.js的开源知识库程序,可以部署在自己的服务器上,支持文档编辑、页面权限管理和多种登录方式。下面以Ubuntu VPS为例,介绍如何通过Docker部署Wiki.js,并完成域名、HTTPS和基础权限设置。
一、Wiki.js适合管理哪些资料
Wiki.js可以用于企业内部文档,也可以搭建面向客户的帮助中心。常见用途包括以下几类。
| 使用场景 | 可以整理的内容 |
|---|---|
| 员工培训 | 入职流程、岗位说明、常用工具操作 |
| 技术文档 | 部署步骤、接口说明、故障处理记录 |
| 客户支持 | 产品指南、常见问题、操作说明 |
| 项目协作 | 项目背景、需求说明、交付文档 |
| 个人知识管理 | 学习笔记、技术资料、工作记录 |
自行部署后,数据库和服务器由自己管理,备份、更新和权限设置也需要自行负责。已有Linux服务器管理经验的个人或团队,会更容易维护这套环境。
二、准备服务器和域名
本教程使用以下环境。
- Ubuntu 24.04 LTS服务器
- 拥有sudo权限的SSH账号
- 建议至少2GB内存,具体需求取决于访问量和启用功能
- 一个用于知识库的域名,例如
wiki.example.com - Docker运行Wiki.js和PostgreSQL,Nginx负责网站入口
已有VPS可以继续使用。需要另外购买时,可以比较RackNerd VPS等方案,重点查看内存、磁盘、机房位置和备份条件。以下操作不依赖指定服务商。
RackNerd美国KVM VPS新一轮促销方案(限量销售,售完即止):
| 方案 | CPU | 内存 | SSD存储 | 月流量 | 端口 | 价格 | 购买链接 |
| 1GB KVM VPS | 1核 | 1GB | 20GB SSD | 3TB | 1Gbps | $21.99/年 | 点击购买 |
| 2GB KVM VPS | 2核 | 2GB | 35GB SSD | 5TB | 1Gbps | $35.99/年 | 点击购买 |
| 4GB KVM VPS | 3核 | 4GB | 60GB SSD | 7TB | 1Gbps | $59.99/年 | 点击购买 |
| 6GB KVM VPS | 6核 | 6GB | 100GB SSD | 12TB | 1Gbps | $89.99/年 | 点击购买 |
| 8GB KVM VPS | 7核 | 8GB | 150GB SSD | 20TB | 1Gbps | $119.99/年 | 点击购买 |
可选洛杉矶DC02、圣何塞、西雅图、达拉斯、芝加哥、纽约等机房,产品可访问RackNerd官网了解:点击直达
先将域名A记录指向服务器公网IPv4地址,并在服务商安全组中开放TCP 80和443端口,保留实际使用的SSH端口。如果配置了AAAA记录,还要确认服务器的IPv6连接正常。
搭建团队知识库,建议使用固定域名,方便成员访问和收藏。如果企业已经有官网域名,可以直接创建wiki.example.com这样的子域名,无需再购买一个域名。
还没有域名的用户,可以通过Gname注册域名,选择便于记忆、与企业或项目名称相关的名称。注册前一起查看首年价格和续费价格,准备长期使用的域名也要设置好到期提醒。
Gname优惠码:领取专属优惠券(点击优惠链接在Gname注册账号即可获得5张2.99美元COM域名优惠券,无需领取自动发放)
域名准备好后,在当前DNS服务商的解析面板中添加一条A记录。使用wiki.example.com时,主机记录填写wiki,记录值填写VPS的公网IPv4地址。等待解析生效,再继续配置Nginx和HTTPS。如果添加了AAAA记录,还需确认服务器的IPv6能够正常访问。
三、安装Docker和Nginx
登录服务器后更新系统。
sudo apt update
sudo apt upgrade -y
安装Docker、Nginx和证书工具。
sudo apt install -y docker.io nginx certbot python3-certbot-nginx
设置Docker和Nginx开机启动。
sudo systemctl enable --now docker
sudo systemctl enable --now nginx
查看Docker是否安装成功。
sudo docker version
如果系统更新要求重启,先重启服务器,再继续部署。本教程采用容器运行Wiki.js,无需另外安装宿主机Node.js。
四、创建PostgreSQL数据库
Wiki.js通过PostgreSQL保存页面、用户和配置信息。先创建应用网络与数据卷。
sudo docker network create wikijs-net
sudo docker volume create wikijs-db
sudo docker volume create wikijs-data
数据卷用于持久化保存文件,重建容器时可以继续使用。不过,数据卷仍在同一台服务器上,不能替代异地备份。
1、输入数据库密码
执行下面的命令,设置一个独立的强密码。输入内容不会显示在终端中。
read -r -s -p "请输入数据库强密码:" WIKI_DB_PASSWORD
printf '\n'
将密码保存到密码管理工具中,后续步骤也要在当前终端继续执行。
2、启动数据库容器
sudo docker run -d \
--name wikijs-db \
--network wikijs-net \
--restart unless-stopped \
-e POSTGRES_DB=wikijs \
-e POSTGRES_USER=wikiuser \
-e POSTGRES_PASSWORD="$WIKI_DB_PASSWORD" \
-v wikijs-db:/var/lib/postgresql/data \
postgres:16
这条命令创建wikijs数据库,并设置数据库用户。PostgreSQL没有映射公网端口,通过Docker内部网络与Wiki.js通信。
检查数据库状态。
sudo docker exec wikijs-db pg_isready -U wikiuser -d wikijs
出现accepting connections,表示数据库已经可以接受连接。
如果还没有准备完成,可以查看初始化日志。
sudo docker logs --tail 50 wikijs-db
这里的数据库初始化方式适用于专供Wiki.js使用的实例,不建议把其他业务数据库放进同一个容器共用。
五、部署Wiki.js
数据库准备完成后,启动Wiki.js容器。
sudo docker run -d \
--name wikijs \
--network wikijs-net \
--restart unless-stopped \
-p 127.0.0.1:3000:3000 \
-e DB_TYPE=postgres \
-e DB_HOST=wikijs-db \
-e DB_PORT=5432 \
-e DB_USER=wikiuser \
-e DB_PASS="$WIKI_DB_PASSWORD" \
-e DB_NAME=wikijs \
-v wikijs-data:/wiki/data \
ghcr.io/requarks/wiki:2
清除当前终端里的密码变量。
unset WIKI_DB_PASSWORD
检查两个容器的运行状态。
sudo docker ps
查看Wiki.js启动日志。
sudo docker logs --tail 100 wikijs
3000端口只绑定到本机地址,外部访问稍后通过Nginx进入,无需开放公网3000端口。
数据库密码会保存在容器配置中,拥有Docker管理权限的人可以读取,因此不要随意给普通用户分配Docker权限。
六、配置域名访问和HTTPS
1、添加Nginx站点
创建配置文件。
sudo nano /etc/nginx/sites-available/wikijs
填写以下内容,将域名替换为自己的实际域名。
server {
listen 80;
server_name wiki.example.com;
client_max_body_size 20m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
保存后启用站点。
sudo ln -s /etc/nginx/sites-available/wikijs /etc/nginx/sites-enabled/wikijs
sudo nginx -t
只有配置检查通过后,才重新加载Nginx。
sudo systemctl reload nginx
如果服务器已启用UFW,允许HTTP和HTTPS访问。
sudo ufw allow 'Nginx Full'
2、申请证书
确认域名解析和80端口访问正常后,执行以下命令。
sudo certbot --nginx -d wiki.example.com --redirect
按照提示填写邮箱并完成验证。Certbot会申请证书,同时配置HTTP跳转HTTPS。
接着打开自己的知识库地址。
https://wiki.example.com
测试证书续期。
sudo certbot renew --dry-run
检查自动续期定时器。
sudo systemctl status certbot.timer
证书申请失败时,优先检查域名解析、错误的AAAA记录、安全组以及80端口是否能从外部访问。
七、创建管理员并设置文档权限
首次访问Wiki.js时,根据安装页面提示创建管理员账号,并填写正确的HTTPS站点地址。
初始化入口开放后,应尽快完成管理员设置。暂时不准备初始化的服务器,可以先限制访问来源。
进入后台后,先处理以下设置。
- 设置站点名称、语言和时区
- 创建文档首页和分类
- 添加团队成员及用户组
- 设置页面查看、编辑和管理权限
- 按需配置邮件、登录方式和存储集成
企业内部知识库尤其要检查访客权限。可以使用管理员、普通成员和未登录访客分别测试,确认每类用户只能看到允许访问的内容。
文档目录也不必一开始就划分得太细。可以先建立“入职指南”“操作手册”“项目文档”“常见问题”几个栏目,再根据实际内容扩展。每份重要文档最好写明维护人和更新时间,方便后续修订。
八、备份知识库数据
知识库上线后,需要定期备份数据库、文件和部署配置。
创建备份目录。
sudo install -d -m 700 /var/backups/wikijs
导出数据库。
sudo sh -c 'docker exec wikijs-db pg_dump -U wikiuser -d wikijs -Fc > /var/backups/wikijs/wikijs-$(date +%F-%H%M%S).dump'
查看备份文件。
sudo ls -lh /var/backups/wikijs
文件生成后,还要确认命令没有报错,并定期进行恢复测试。仅看文件存在,无法证明备份一定可用。
建议同时保存以下内容。
| 备份对象 | 用途 |
|---|---|
| PostgreSQL数据库 | 恢复页面、用户及配置信息 |
| 实际使用的附件存储 | 恢复图片和上传文件 |
| Nginx配置 | 恢复域名入口与代理设置 |
| 容器参数及镜像版本 | 重建相同运行环境 |
| 存储集成配置 | 恢复外部存储连接 |
备份应另存一份到独立存储或其他服务器。启用了Git同步,也要保留数据库备份,因为页面同步通常不会完整覆盖用户、权限和全部应用设置。
九、常见问题
Wiki.js能作为公司内部知识库吗?
可以。配置登录方式、用户组和页面权限后,可以将文档限定为团队内部访问。设置完成后,应使用未登录窗口检查实际访问范围。
Docker容器删除后,文档会丢失吗?
本教程使用数据卷保存数据库和Wiki.js数据目录。只删除容器、保留数据卷时,可以用原有数据重新部署。
如果删除了数据卷,相关数据也可能丢失。不要在没有备份的情况下执行数据卷清理操作。
打开网站出现502怎么办?
先检查Wiki.js容器是否正常运行,再查看应用日志中的数据库连接信息。同时确认Nginx代理地址与容器端口映射一致。
sudo docker ps -a
sudo docker logs --tail 100 wikijs
sudo nginx -t
上传附件失败怎么办?
检查文件大小是否超过Wiki.js和Nginx的限制,再查看磁盘剩余空间。教程中的Nginx请求大小上限为20MB,需要上传更大的文件时,应同时检查应用设置。
升级时要注意什么?
先备份,再查看版本说明,并记录当前镜像版本。PostgreSQL跨大版本升级需要迁移数据,不能只把postgres:16改成新版本后直接使用旧数据目录。
自建知识库上线后还需要维护吗?
需要。系统更新、证书续期、磁盘容量、数据库备份和成员权限都要定期检查。团队还应安排文档维护人,避免知识库上线后内容长期无人更新。
-
广告合作
-
QQ群号:4114653



