Wiki.js是一款基于Node.js的开源Wiki程序,支持Markdown编辑、用户权限管理以及Git等存储集成。它可以用于个人笔记、企业内部文档和产品帮助中心。自行部署无需支付Wiki.js软件订阅费,但服务器、备份和日常维护仍需要投入。下面使用Docker部署Wiki.js,通过PostgreSQL保存数据,再用Nginx绑定域名并配置HTTPS。
一、部署前需要准备什么
本教程以一台新装Ubuntu 24.04 LTS的VPS为例,需要具备以下条件。
- 可以通过SSH登录,并拥有sudo权限
- 建议至少配置2GB内存,为数据库和应用运行留出余量
- 一个准备绑定知识库的域名,例如wiki.example.com
- 将域名A记录解析到VPS公网IPv4地址
- 在服务商安全组中开放TCP 80和443端口,并保留SSH管理端口
如果域名还配置了AAAA记录,需要确认它指向这台服务器且IPv6可以正常访问。错误的AAAA记录可能影响网站访问和证书签发。
已有VPS可以直接使用。尚未购买服务器,可以查看RackNerd VPS方案,根据团队所在地、文档规模和备份空间选择配置。本文没有对其具体套餐进行实测,部署步骤同样适用于其他支持Docker的Linux 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官网了解:点击直达
这里采用容器部署,Wiki.js运行环境由镜像提供,无需另外在宿主机上安装Node.js。
二、更新系统并安装Docker通过SSH登录服务器,更新软件包索引和系统。
sudo apt update sudo apt upgrade -y
安装Docker、Nginx以及后面申请证书需要的Certbot。
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
如果系统更新提示需要重启,可以先重启VPS,重新登录后继续操作。
三、创建数据库和持久化存储Wiki.js需要数据库保存页面、用户和配置信息。本教程使用PostgreSQL,并创建独立的Docker网络,让应用通过容器名称连接数据库。
sudo docker network create wikijs-net sudo docker volume create wikijs-db sudo docker volume create wikijs-data
其中,wikijs-db保存数据库文件,wikijs-data用于保存Wiki.js数据目录中的文件。删除、重建容器时,这两个数据卷可以继续保留。
1、设置数据库密码在当前终端中输入以下命令,交互式设置密码。输入时不会显示字符。
read -r -s -p "请输入数据库强密码:" WIKI_DB_PASSWORD printf '\n'
请使用独立的强密码,并保存到密码管理工具中。后续启动Wiki.js时,需要在同一个终端中继续使用这个变量。
2、启动PostgreSQLsudo 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数据库和wikiuser用户。数据库没有映射到公网端口,只在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 2系列镜像创建应用容器。
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 sudo docker logs --tail 100 wikijs
本教程将3000端口绑定到127.0.0.1,由Nginx负责对外提供访问。因此,不需要在安全组开放3000端口,也不能直接通过公网IP加3000端口访问安装页面。
数据库密码仍保存在容器配置中,拥有服务器管理员或Docker管理权限的人可以读取。服务器账号和Docker权限应交给可信的管理员。
五、使用Nginx绑定域名搭建团队知识库,建议使用固定域名,方便成员访问和收藏。如果企业已经有官网域名,可以直接创建wiki.example.com这样的子域名,无需再购买一个域名。
还没有域名的用户,可以通过Gname注册域名,选择便于记忆、与企业或项目名称相关的名称。注册前一起查看首年价格和续费价格,准备长期使用的域名也要设置好到期提醒。
域名准备好后,在当前DNS服务商的解析面板中添加一条A记录。使用wiki.example.com时,主机记录填写wiki,记录值填写VPS的公网IPv4地址。等待解析生效,再继续配置Nginx和HTTPS。如果添加了AAAA记录,还需确认服务器的IPv6能够正常访问。
Gname优惠码:领取专属优惠券(点击优惠链接在Gname注册账号即可获得5张2.99美元COM域名优惠券,无需领取自动发放)
创建Nginx站点配置文件。
sudo nano /etc/nginx/sites-available/wikijs
写入以下内容,将wiki.example.com替换为自己的域名。
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;
}
}
这里将上传请求大小限制为20MB。如果后续需要上传更大的附件,还要检查Wiki.js自身的上传设置,并相应调整Nginx限制。
启用站点并检查配置。
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'
不要在未确认SSH放行规则前直接启用防火墙,以免中断远程管理。
六、申请HTTPS证书只有前面的80端口配置,网站仍然使用HTTP。接下来通过Certbot申请证书,并将HTTP访问重定向到HTTPS。
将命令中的域名替换为实际域名。
sudo certbot --nginx -d wiki.example.com --redirect
按照提示填写邮箱、接受服务条款并完成验证。申请证书时,域名必须正确解析,外部网络也需要能够访问服务器的80端口。
完成后,在浏览器中打开:
https://wiki.example.com
检查证书自动续期是否可以正常执行。
sudo certbot renew --dry-run
再确认续期定时器状态。
sudo systemctl status certbot.timer
如果测试失败,应先处理域名解析、防火墙或Nginx配置问题,避免证书到期后网站出现访问警告。
七、完成Wiki.js初始化打开网站后,按安装页面提示创建管理员账号,并将站点地址设置为实际使用的HTTPS域名。
初始化页面可以创建首个管理员,建议部署时尽快完成设置。如果暂时不准备初始化,可以先通过安全组限制访问来源。
进入后台后,可以依次完成以下操作。
- 设置网站名称、语言和时区。
- 创建首页及文档目录。
- 添加团队成员并分配用户组。
- 设置页面的查看和编辑权限。
- 按需要配置认证方式和存储集成。
如果用于企业内部知识库,尤其要检查访客用户组的权限。完成设置后,用浏览器无痕窗口访问网站,确认未登录用户无法查看内部页面和附件。
Wiki.js中的Git等存储集成,需要另外配置。启用同步后,也应检查同步范围与执行结果,不能把页面同步直接当作完整数据库备份。
八、备份与日常维护知识库投入使用后,数据库备份比最初安装更重要。管理员误删页面、服务器故障或升级失败,都可能影响资料使用。
1、备份数据库创建备份目录。
sudo install -d -m 700 /var/backups/wikijs
导出PostgreSQL数据库。
sudo sh -c 'docker exec wikijs-db pg_dump -U wikiuser -d wikijs -Fc > /var/backups/wikijs/wikijs-$(date +%F-%H%M%S).dump'
备份文件保存在当前VPS上,还应定期复制到另一台服务器或独立存储中,并检查导出命令是否成功。
除了数据库,也要保存Nginx配置、容器部署参数,以及所使用文件存储中的数据。备份后应在测试环境验证能否恢复,避免直到故障发生才发现文件不可用。
2、排查运行问题查看应用日志。
sudo docker logs --tail 100 wikijs
查看数据库日志。
sudo docker logs --tail 100 wikijs-db
检查磁盘空间。
df -h sudo docker system df
附件、数据库和日志都会逐渐占用磁盘。不要随意执行带有删除数据卷选项的清理命令,以免误删持久化数据。
3、升级前先备份教程中的ghcr.io/requarks/wiki:2会随Wiki.js 2系列版本更新。长期使用时,可以记录当前镜像版本或摘要,方便出现问题时回退。
升级Wiki.js前,先备份数据库与文件,再检查版本说明。PostgreSQL跨大版本升级需要单独进行数据迁移,不能仅更换镜像标签后直接挂载旧数据库目录。
常见问题Wiki.js需要付费吗?
Wiki.js是开源软件,自行部署不需要支付软件订阅费。VPS、域名、备份存储和运维服务可能产生费用。
1GB内存的VPS能运行吗?
轻量环境有可能运行,但同一台服务器还要承担数据库和Nginx的资源消耗。新部署建议从2GB内存考虑,实际配置再根据访问量、附件数量和启用功能调整。
Wiki.js适合内部知识库吗?
可以。部署后需要配置认证、用户组和页面权限,并检查未登录用户的访问范围。安装完成不代表已经设置为私有站点。
出现502 Bad Gateway怎么办?
先检查Wiki.js容器是否运行,以及日志中是否存在数据库连接错误。再确认Nginx代理地址为127.0.0.1:3000,与容器端口映射一致。
相关阅读:
《RackNerd VPS搭建Mail-in-a-Box邮件服务器教程》
《RackNerd VPS部署Hermes Agent教程:Ubuntu 24.04自建AI助手》
《RackNerd国外VPS上搭建Nextcloud云存储教程》
(本文由美国主机侦探原创,转载请注明出处“美国主机侦探”和原文地址!)
微信扫码加好友进群
主机优惠码及时掌握
QQ群号:938255063
主机优惠发布与交流





