【自建 Wiki 01】用 VPS 自建团队 Wiki:BookStack / Wiki.js 部署与配置全流程

团队文档散落各处、版本混乱、按人头收费?本文手把手教你用一台廉价 VPS 通过 Docker 部署 BookStack 与 Wiki.js 两款开源知识库,覆盖安装、权限、HTTPS 与备份全流程。

延伸阅读

更多相关攻略推荐:Ollama AI系列(2):VPS上的AI推理与API应用Ollama AI系列(2):VPS上的AI推理与API应用【CPU选型 01】搭载 AMD Ryzen 9950X 的 VPSARM / Ampere 席卷 VPS:性价比真香还是兼容陷阱?Ollama AI系列(2):VPS上的AI推理与API应用

一、为什么要把团队知识库搬到自己的 VPS 上

很多团队都经历过这样的尴尬:一份重要的技术方案躺在某个人的微信收藏里,新人入职只能靠老人口头传授;产品需求文档在邮件里来回转发,版本改了三版没人知道哪份是最新的;运维手册散落在各个网盘文件夹,真到故障排查时翻半天找不到。知识一旦碎片化,就不再是资产,反而成了负担。

公有云的笔记与文档工具看似方便,却藏着三道坎。第一是按人头收费,团队每多一个人就要多交一份钱,规模上来后账单惊人;第二是数据主权不在自己手里,服务商调整政策、限流甚至关停,你的资料说没就没;第三是功能要么太简陋要么太臃肿,很难刚好贴合团队的协作习惯。

把知识库自建在 VPS 上,相当于给团队盖了一座属于自己的数字图书馆。数据完全存在你租的服务器上,隐私和合规都可控;一次部署长期使用的成本远低于订阅制 SaaS;权限可以细分到谁能看、谁能改、谁能管理;界面与扩展也能按需求定制。本文就带你用两台开源明星项目 BookStack 与 Wiki.js,在一台廉价 VPS 上把这件事落地。

二、先定调:两款都值得上,选型交给第 2 篇

BookStack 轻量、像写书一样整理文档,1 核 1G 内存的 VPS 就能跑得很顺;Wiki.js 现代、实时协作与第三方登录更强,建议准备 2G 内存。两者部署方式高度相似,本文下面把两个都手把手跑通。至于和 Outline 的三方横向选型、权限与搜索差异、以及与 Notion / 语雀的对照和成本账,留在本系列第 2 篇细讲,这里不重复。

三、环境准备:一台 VPS 与 Docker 基础

你只需要一台最便宜的国外 VPS 即可起步。BookStack 在 1 核 1G 的机器上就能稳定运行;Wiki.js 因为带 Node 运行时和数据库,建议选择 2G 内存的套餐。系统推荐 Ubuntu 22.04 或 24.04 LTS,社区资料最多,排错方便。

第一步是在服务器上安装 Docker 与 Docker Compose。最省事的办法是用官方一键脚本安装 Docker,安装完成后把当前用户加入 docker 用户组并刷新会话,这样后续执行 docker 命令就不用每次都加 sudo。也可以用系统包管理器安装 docker.io 与 docker-compose 插件,两种途径都能用。

接着建议准备一个域名并做 A 记录解析到服务器公网 IP,虽然不绑定域名也能用 IP 直接访问,但后续申请 HTTPS 证书、做反向代理都必须有域名。在云厂商防火墙或服务器本身放行 80 与 443 端口。最后在终端执行 id 命令查看当前用户的 UID 与 GID,记下这两个数字,它们会作为 PUID 与 PGID 写进容器配置,用来避免文件权限错乱。

四、BookStack 部署实战(Docker Compose)

先创建一个专门的项目目录,例如 bookstack,进入该目录后用编辑器新建名为 docker-compose.yml 的文件。这个文件里要定义两个服务:一个是 bookstack 应用本身,使用 linuxserver 维护的 bookstack 镜像;另一个是 mariadb 数据库。

在 bookstack 服务的环境变量里,先填 PUID 与 PGID(就是上一步记下的数字)和时区,再把 APP_URL 设成你打算访问的地址,例如 http://你的服务器IP:6875。数据库相关变量要填 DB_HOST 指向数据库服务名、DB_USER 与 DB_PASS 设成自定义的用户名和密码、DB_DATABASE 设成库名。把宿主机的 config 目录挂载进容器的 config 路径,并把宿主机 6875 端口映射到容器 80 端口。

数据库服务用 mariadb 官方镜像,设置 root 密码、库名、用户名和密码,并将数据目录挂载到宿主机持久保存。两个服务放在同一个自定义网络里,保证彼此能互通。

BookStack 还要求一个应用密钥 APP_KEY 用于加密会话与数据。生成办法是临时跑一条基于 bookstack 镜像的命令,让它输出一个 base64 开头的密钥串,把它复制下来填回 compose 文件的 APP_KEY 变量里。

配置就绪后,在目录内执行后台启动命令让容器运行,再用查看日志的命令确认没有报错。第一次启动会拉取镜像并初始化数据库,可能要等几分钟,看到两个服务状态都是运行中即可。

五、BookStack 初始化与权限配置

打开浏览器访问 http://你的服务器IP:6875,会看到登录页。默认管理员账号是 admin@admin.com,密码是 password,登录后第一件事就是到个人资料里把密码改成强密码,这是生产环境必做的动作。

BookStack 的内容组织是四层:书架 Shelves 用来把主题相关的书归到一起;书 Books 是主要组织单元,对应一个项目或一门知识;章节 Chapters 是书里可选的细分;页面 Pages 才是真正写内容的地方。编辑器同时支持 Markdown 和所见即所得,普通同事用富文本,技术同学用 Markdown,各取所好。

权限方面,进入管理后台可以创建用户、建立角色(如管理员、编辑者、查看者),并把用户分配到角色上,实现谁能建书、谁能改页、谁只能读的精细控制。页面支持上传 PDF、图片、表格等附件,内置搜索能秒定位关键词。配合 calibre 还能把整本书一键导出为电子书,方便离线阅读或归档。

六、Wiki.js 部署实战(Docker Compose)

同样先建一个项目目录,比如 wikijs,进入后新建 docker-compose.yml。Wiki.js 官方推荐搭配 PostgreSQL 数据库,所以在文件里定义一个 postgres 服务和一个 wiki 服务。

数据库服务使用 postgres 官方镜像,设置库名 wiki、用户名 wikijs 和自定义密码,并把数据卷挂载持久化。wiki 服务使用 requarks 官方的 wiki 镜像(版本标签为 2),通过环境变量告诉它数据库类型是 postgres、主机名、端口、用户名、密码和库名,并将宿主机的 80 端口映射到容器 3000 端口,这样直接用域名或 IP 就能访问。

在目录内执行后台启动命令,Docker 会自动拉取镜像并起来两个容器。启动完成后,浏览器访问 http://你的服务器IP(或域名),会进入可视化安装向导:填管理员邮箱与密码、设置站点标题,确认数据库连接信息无误后点安装,几分钟就能进后台。

七、Wiki.js 初始化与高级配置

装好后第一件事是创建主页。系统会让你选编辑器,可选 Markdown、HTML 或可视化编辑器,按团队习惯挑一个。之后进入管理面板,在常规设置里填站点标题、描述、默认首页和可见性(公开还是私有)。

区域设置里可以指定默认语言、时区与日期格式,中文团队记得把语言设成简体中文。导航栏用来规划菜单结构,标签页给内容打标签提升检索效率,主题标签能改 Logo、配色和字体,让知识库长得像你们公司。

协作与权限是 Wiki.js 的强项。在用户组里创建角色并分配成员,用页面规则控制谁能看哪一部分;认证模块可以开启本地账号之外的 LDAP、Google、GitHub 等登录方式,直接对接公司现有账号体系。存储与搜索引擎模块还能接外部对象存储和更高级的检索引擎。实时协同与历史版本让多人改同一篇文档也不怕互相覆盖。

八、安全加固与日常维护

用 IP 加端口裸奔访问只是临时方案,正式给团队用必须上 HTTPS。最常见的做法是装 Nginx 做反向代理,把域名请求转发到容器端口,再用 Certbot 免费申请 Let's Encrypt 证书,证书会定期自动续期。这样同事访问的就是 https://你的域名,地址栏出现小锁,数据传输也加密了。

服务器本身也要收口:用 ufw 防火墙只放行 22、80、443,关掉其他端口;Docker 数据卷放在独立的大磁盘或挂载块存储上,因为图片和附件会越积越多。备份是重中之重——BookStack 要定期打包 config 目录并导出 MariaDB 数据库;Wiki.js 则要备份 PostgreSQL 数据卷。可以用定时脚本在凌晨把备份传到另一台机器或对象存储,做到异地容灾。

更新也很简单,进入项目目录执行拉取新镜像命令再重新创建容器即可,Docker 会保留挂载的数据卷,升级不丢资料。平时用 docker compose 的日志命令留意有无报错,磁盘快满时清理无用的旧镜像,保证服务一直在线。

#VPS #自托管 #知识库 #BookStack #Wiki.js #团队Wiki