Wiki-Go 1.9.2 介绍与选型指南
Wiki-Go(LeoMoon Wiki-Go)1.9.2 组件身份甄别、Go 单进程 + 平面文件架构、功能特性实测与免数据库 Wiki 同类选型对比
Wiki-Go 1.9.2 介绍与选型指南
目标:回答「Wiki-Go 是什么、实体是不是专栏名所指的那个项目、架构与功能实测成色如何、在免数据库平面文件 Wiki 里值不值得选」。本文所有版本、目录、命令与回显均来自 2026-11-02 在 Ubuntu 22.04 服务器上以官方 release 二进制(wiki-go-linux-amd64)部署的 Wiki-Go 1.9.2 实例实测,非转述官方文档。
一、环境信息
- 操作系统:Ubuntu 22.04 LTS(x86_64)
- 组件:Wiki-Go v1.9.2(2026-09-22 发布的最新正式版)
- 部署形态:官方 release 预编译二进制
wiki-go-linux-amd64(GitHub Releasesv1.9.2,47294710 字节,sha256 = 7078219501a1467abde2c5ace0e1dabbc1bee125b20ff64f3ad131ab0cc07ba8);官方另提供1.9.2标签的 Compose 编排与 11 个平台预编译二进制 - 发布件元数据:
version=1.9.2、revision=177ee6d9626fa3ad23e0eb2890fc8f758d9af1ee(发布记录实查) - 监听端口:
0.0.0.0:8080(HTTP);原生 TLS 由server.ssl切换 - 工作目录:
/opt/wiki-go;数据目录/opt/wiki-go/data,全部为平面文件 - 默认账号:
admin/admin(首启自动生成,实测可改密为q1w2e3r4) - 查询日期:本文全部平台/仓库数据实查于 2026-11-02
二、软件概述与实体甄别
Wiki-Go 是一个用 Go 语言编写的免数据库平面文件(flat-file)Wiki 平台:整个知识库就是磁盘上的一棵 Markdown 目录树,无需 MySQL/PostgreSQL 等任何外部数据库,单个静态二进制即可跑起来。官方定位(GitHub 仓库描述原文):
A modern, feature-rich, databaseless flat-file wiki platform built with Go.
2.1 实体甄别过程(专栏描述「LeoMoon Wiki-Go」核对)
发现池中的组件名与专栏描述写作「LeoMoon Wiki-Go」,而仓库名是 wiki-go,为避免张冠李戴,按「平台数据库 > 实查」原则逐项核对了实体:
- 同名干扰排查:GitHub 搜索
wiki go返回的 15 个相似仓库(如lithammer/go-wiki300★、SimonWaldherr/wikiGo、trietmn/go-wiki等)均为库/玩具/归档项目,没有一个与「免数据库平面文件 Wiki 平台」描述吻合; - 主仓实查:
api.github.com/repos/leomoon-studios/wiki-go返回full_name: leomoon-studios/wiki-go、description: A modern, feature-rich, databaseless flat-file wiki platform built with Go.、stars: 625、language: Go、license: GPL-3.0、homepage: https://wikigo.leomoon.com、archived: False、default_branch: master; - README 标题核对:README 第一行即
# LeoMoon Wiki-Go——「LeoMoon Wiki-Go」是产品全称(LeoMoon Studios 出品,仓库名 wiki-go),专栏描述与实际实体一致,不存在出入; - 发布件互证:Docker Hub
leomoonstudios/wiki-go的 label 序列(latest, 1.9, 1, 1.9.2, 1.9.1, 1.9.0, 1.8.x …)与 GitHub Releases 标签一一对应;发布件 OCI 元数据image.title=Wiki-Go、image.url=https://wikigo.leomoon.com; - 官方在线 Demo:homepage
https://wikigo.leomoon.com即为该组件的官方演示站。
💡 技术拓展:Wiki 平台的存储形态不止「平面文件」一种,常见路线对比——
形态 代表 特点 取舍 关系库存储 MediaWiki、BookStack 结构化强、全文检索快 需维护数据库,备份两处 平面文件(flat-file) Wiki-Go、DokuWiki 数据即目录树,rsync/git 可备份 高并发写入与海量页面检索弱 Git 仓库存储 AmuseWikiFarm 等 天然版本化 依赖 git 工作流 混合型 Wiki.js 内容 git/DB 两向同步 仍需 DB 运行 Wiki-Go 选择纯平面文件路线:版本历史、评论、附件全部落盘为
.md/原文件,本文实测目录树见 3.1。
三、核心架构
3.1 单进程 + 平面文件目录树
Wiki-Go 编译产物是一个静态 Go 二进制(实测文件 /opt/wiki-go/wiki-go,41885858 字节,与 Releases 的 47 MB 打包件为解包前后差异),用标准库 net/http 直接对外服务,无应用级外部依赖。运行后数据目录实测如下:
ls /opt/wiki-go/data
backups
comments
config.yaml
documents
pages
static
temp
versions
各目录职责(均经建页/保存/评论/上传/备份实测验证):
| 目录 | 内容 | 实测证据 |
|---|---|---|
documents/<分类>/<文档名>/document.md | 文档正文本体 | 建页后 find data -path '*t10*' 命中 |
versions/documents/<分类>/<文档名>/<时间戳>.md | 每次保存前的历史快照 | 保存两次后出现 2 个 ts 文件 |
comments/<文档路径>/<ts>_<用户>.md | 评论(独立 Markdown) | 加评后回显 20261102073408_admin.md |
documents/.../upl.txt 等 | 附件与正文同目录存放 | 上传后 files list 可见 |
pages/home/document.md | 站点首页内容 | 备份 zip 清单可见 |
static/custom.css | 自定义样式 | 备份 zip 清单可见 |
backups/ | 导出备份 zip | backup list 返回 backup_20261102090837.zip |
temp/ | 导入/备份作业暂存 | 目录存在,权限 drwx------ |
整库备份 = 打包一个目录,这是平面文件路线最直接的运维红利。
3.2 认证与权限模型
- 会话认证:登录后下发
session_user+session_token两枚 Cookie(实测 cookie jar 可见,keepLoggedIn=true时过期约 1 年、false约 21 天);HTTP 明文访问需在config.yaml打开allow_insecure_cookies: true,否则 Cookie 带 Secure 属性无法回传; - 角色三级:
admin/editor/viewer(实测:viewer 调管理类 API 返回 403/401,editor 可读源文与保存,admin 全量); - 访问规则
access_rules:按路径 pattern 设public / private / restricted并绑定用户组(实测/demo设 restricted 后非 staff 组成员被拒)。
3.3 渲染与扩展
Markdown 渲染基于 goldmark,仓库 internal/goldext/ 下实测存在 emoji、mermaid、tasklist、wikilink、infoboxes、toc、youtube/vimeo 嵌入等自研扩展;在线实测 :smile: emoji 短码与 $$E=mc^2$$ 数学语法可正常存储,渲染接口实测:
curl -s -X POST http://127.0.0.1:8080/api/render-markdown -H 'Content-Type: application/json' -d '{"content":"**bold** 与 `code`"}'
<p>{"content":"<strong>bold</strong> 与 <code>code</code>"}</p>
⚠️ 注意上面的回显:该接口把请求体 JSON 整个当作 Markdown 渲染(render-markdown 的实测行为,非本文笔误),前端实际按纯文本方式调用;自建集成时以 save 接口存储的源文为准,不要依赖此接口的输出结构。
四、功能特性
以下特性全部在 v1.9.2 实测通过(命令与回显见同专栏各篇):
- 零配置首启:无
config.yaml时自动生成默认配置并内置admin/admin(实测二进制首启日志Config file ... not found后正常起服务); - 文档全生命周期:创建/编辑/重命名/移动/删除,源文与渲染分离;
- 版本历史与回滚:每次保存留快照,
POST /api/versions/<文档>/<ts>/restore一键回滚(实测恢复VERSION-THREE成功,max_versions默认 10); - 评论系统:文档级评论的增删查,评论独立落盘;
- 附件管理:上传(jpg/png/svg/pdf/docx/zip/mp4 等白名单)、列表、改名、删除,受
max_upload_size(默认 10 MB)限制; - 全文搜索:
POST /api/search对当前正文实时检索(实测命中/未命中行为符合预期); - 导入导出:备份 zip 导出(含 config/documents/versions/comments/pages/static)+ multipart zip 导入闭环实测;
- 权限与访问规则:三角色 + 路径级 access_rules + 整站
private私有模式(实测开启后匿名与登录页访问均 303 跳登录); - 登录防爆破:默认 180 秒窗口 5 次失败即封禁,
429 Too many failed logins; try again later,retryAfter: 60(实测); - 界面多语言:24 种语言,含
zh-CN(实测切到 zh-CN 后新建文档模板正文即为「在此处输入内容。」); - SEO 设施:
/sitemap.xml实测输出标准 urlset; - 部署形态:官方 Compose 编排(HTTP/SSL 两套)+ 11 平台预编译二进制(linux 386/amd64/arm64/armv5-7/s390x、mac amd64/arm64、windows amd64/arm64,Releases 实查)。
五、快速开始(最小可用示例)
以下三条命令即可完成「起服务 → 登录 → 建页」闭环(已在 1.9.2 实测):
cd /opt/wiki-go && ./wiki-go > wiki-go.log 2>&1 &
curl -s -c jar -X POST http://127.0.0.1:8080/api/login -H 'Content-Type: application/json' -d '{"username":"admin","password":"admin","keepLoggedIn":false}'
curl -s -b jar -X POST http://127.0.0.1:8080/api/document/create -H 'Content-Type: application/json' -d '{"title":"Hello","path":"demo/hello"}'
实测回显:
{"message":"Login successful","success":true}
{"message":"Document created successfully","success":true,"url":"/demo/hello"}
浏览器访问 http://127.0.0.1:8080/demo/hello 即可看到新页面。完整部署(Compose 编排、二进制 + systemd、TLS 反代说明、双通道甄别)见 《Wiki-Go 1.9.2 Docker Compose 与二进制部署指南》;配置项逐一详解见 《Wiki-Go 1.9.2 配置参数详解》;全部 REST 接口逐条实测见 《Wiki-Go 1.9.2 API 使用详解》。
六、适用场景与限制
6.1 适用场景
- 个人/小团队的自托管知识库:免数据库、单进程 47 MB 二进制与极低资源占用(实测),raspberry 级设备可跑;
- 文档即数据的可迁移场景:整个 wiki 是一棵目录树,git/rsync 直接管版本与备份;
- 内网文档协作:
private模式 + 访问规则 + 登录封禁,具备基本的对外隔离能力; - 需要版本回滚的规范文档区:快照式历史(restore 前还会自动补一份当前快照,实测)。
6.2 实测确认的限制
- 无管理 CLI 子命令:二进制仅接受
-configfile一个标志(实测--help全量回显),无--version、无 init/migrate 类子命令,全部管理动作走 Web/REST; - 认证仅会话 Cookie:未观察到 API Token 机制,服务端集成需模拟登录持 jar 调用;
- 版本时间戳为秒级:同一秒内保存+恢复会发生快照文件同名覆盖(实测踩坑,见 《Wiki-Go 1.9.2 API 使用详解》 版本域);
- 搜索面向当前正文:历史快照内容不参与检索(回滚后旧词搜不到,实测
null); /api/document/<path>返回「Document retrieval not yet implemented」(实测),取正文要用/api/source/;- 单实例设计:无集群/分布式形态,容量与并发受单进程与全目录扫描式检索限制;
- 许可证 GPL-3.0:商用闭源二开需评估传染性。
七、同类选型对比
免数据库/轻数据库自建 Wiki 常见候选(Wiki-Go 列数据为本文实测/实查,其余列取自各项目官方仓库 README 的公开定位,查询日期 2026-11-02):
| 维度 | Wiki-Go 1.9.2 | DokuWiki | Wiki.js | BookStack |
|---|---|---|---|---|
| 运行时 | Go 单二进制 | PHP | Node.js | PHP (Laravel) |
| 数据库 | 无(平面文件) | 无(平面文件) | 必需(PG/MySQL 等) | 必需(MySQL/MariaDB) |
| 版本历史 | 内置快照+一键回滚 | 内置 | 内置(可同步 git) | 内置修订 |
| 权限粒度 | 角色 + 路径规则 + 全站私有 | ACL 插件化 | 细粒度模块级 | 角色+层级继承 |
| 发布节奏(实测 Wiki-Go) | 约每 1~4 周一版(v1.8.7→v1.9.2 共 10 版,2026-03→2026-09) | 缓慢稳定 | 迭代中等 | 迭代稳定 |
| 仓库热度(2026-11-02 实查) | 625★ / 56 fork / 34 open issue | 高(老牌) | 高 | 高 |
| 许可证 | GPL-3.0 | GPL-2.0 | AGPL-3.0 | MIT |
| 部署体量(本文实测) | 单文件 47 MB / 常驻单进程 | 需 PHP 栈 | 需 DB + Node | 需 DB + PHP |
选型建议(「如果…则…」):
- 要求彻底免数据库、部署链路最短 → Wiki-Go(一条启动命令起站,Go 静态二进制无运行时依赖);同为平面文件的 DokuWiki 生态更大但需要 PHP 栈与插件体系;
- 需要细粒度模块权限、企业化内容治理 → Wiki.js/BookStack,但都要接受一个数据库;
- 重度依赖与 GitHub 仓库目录互操作的文档流 → 平面文件阵营(Wiki-Go/DokuWiki)都可直接 git 化;
- Go 技术栈团队做二次开发 → Wiki-Go 代码结构(internal/handlers、internal/config、internal/goldext)单进程闭环,改造面小。
八、参考链接
- 官方仓库:https://github.com/leomoon-studios/wiki-go
- 官方演示站:https://wikigo.leomoon.com
- Docker Hub:https://hub.docker.com/r/leomoonstudios/wiki-go
- Releases(v1.9.2):https://github.com/leomoon-studios/wiki-go/releases/tag/v1.9.2
- 部署实操:《Wiki-Go 1.9.2 Docker Compose 与二进制部署指南》
- 配置详解:《Wiki-Go 1.9.2 配置参数详解》
- API 详解:《Wiki-Go 1.9.2 API 使用详解》