Wiki-Go 1.9.2 介绍与选型指南

Wiki-Go(LeoMoon Wiki-Go)1.9.2 组件身份甄别、Go 单进程 + 平面文件架构、功能特性实测与免数据库 Wiki 同类选型对比

Wiki-GoWiki-Go2026/11/02

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 Releases v1.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,为避免张冠李戴,按「平台数据库 > 实查」原则逐项核对了实体:

  1. 同名干扰排查:GitHub 搜索 wiki go 返回的 15 个相似仓库(如 lithammer/go-wiki 300★、SimonWaldherr/wikiGo、trietmn/go-wiki 等)均为库/玩具/归档项目,没有一个与「免数据库平面文件 Wiki 平台」描述吻合;
  2. 主仓实查: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;
  3. README 标题核对:README 第一行即 # LeoMoon Wiki-Go——「LeoMoon Wiki-Go」是产品全称(LeoMoon Studios 出品,仓库名 wiki-go),专栏描述与实际实体一致,不存在出入;
  4. 发布件互证: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;
  5. 官方在线 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/导出备份 zipbackup 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>{&quot;content&quot;:&quot;<strong>bold</strong> 与 <code>code</code>&quot;}</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 适用场景

  1. 个人/小团队的自托管知识库:免数据库、单进程 47 MB 二进制与极低资源占用(实测),raspberry 级设备可跑;
  2. 文档即数据的可迁移场景:整个 wiki 是一棵目录树,git/rsync 直接管版本与备份;
  3. 内网文档协作:private 模式 + 访问规则 + 登录封禁,具备基本的对外隔离能力;
  4. 需要版本回滚的规范文档区:快照式历史(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.2DokuWikiWiki.jsBookStack
运行时Go 单二进制PHPNode.jsPHP (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.0GPL-2.0AGPL-3.0MIT
部署体量(本文实测)单文件 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)单进程闭环,改造面小。

八、参考链接

Wiki-Go 1.9.2 介绍与选型指南 - Quzuo