perber/leafwiki
GitHub: perber/leafwiki
一款零外部依赖的自托管 Wiki 引擎,以单个 Go 二进制文件配合 SQLite 和磁盘 Markdown 文件提供轻量级结构化文档管理。
Stars: 795 | Forks: 55
# 🌿 LeafWiki
自托管 wiki。单一 Go 二进制文件。SQLite + Markdown 存储在磁盘上。
面向希望获得结构化、长久保存的文档的工程师和自托管爱好者。无需 Node.js,无需 Redis,无需 Postgres —— 只需要一个二进制文件和一个数据目录。

如果你曾看过 Wiki.js 或 Outline,并觉得“对于我的需求来说,维护这套东西太重了” —— 那么它可能很适合你。
→ 免安装体验:**[demo.leafwiki.com](https://demo.leafwiki.com)** · `Ctrl+E` 编辑 · `Ctrl+S` 保存 · 每小时重置
→ 如果觉得合适,[点个 Star](https://github.com/perber/leafwiki) 可以帮助更多人发现它。
```
docker run -p 8080:8080 -v ~/leafwiki-data:/app/data \
ghcr.io/perber/leafwiki:latest \
--jwt-secret=yoursecret --admin-password=yourpassword --allow-insecure=true
```
→ [所有安装选项](#install) (Docker Compose, Linux 安装程序, 二进制文件)
## 目录
- [功能](#features)
- [适用 / 不适用场景](#good-fit--not-a-fit)
- [安装](#install)
- [Docker](#docker)
- [Docker Compose](#docker-compose)
- [Linux 安装程序](#linux-installer)
- [二进制文件](#binary)
- [重置管理员密码](#reset-admin-password)
- [运行模式](#operating-modes)
- [开发环境配置](#dev-setup)
- [配置](#configuration)
- [CLI 参数](#cli-flags)
- [环境变量](#environment-variables)
- [自定义样式表](#custom-stylesheet)
- [反向代理认证](#reverse-proxy-authentication)
- [Unix Socket](#unix-socket-v0113)
- [Git 备份](#git-backup-v0113-experimental)
- [安全性](#security)
- [运维说明](#operations-notes)
- [键盘快捷键](#keyboard-shortcuts)
- [页面排序](#sorting-pages)
- [支持本项目](#support-this-project)
- [贡献](#contributing)
## 功能
**运维:**
- 单一 Go 二进制文件 —— 无外部数据库,无运行时依赖
- Markdown 存储于磁盘 —— 页面内容在应用外也可直接阅读,备份只需 `cp -r`(请先停止应用)
- 支持 Linux、macOS、Windows、Raspberry Pi (x86_64 和 ARM64)
- 通过 `--base-path` 轻松支持反向代理
- 通过受信任的 HTTP header 进行反向代理认证 (v0.10+)
- 三种访问模式:完全内部、公开浏览但需登录编辑、或无需登录开放编辑 (见 [运行模式](#operating-modes))
- 角色:admin、editor、viewer
**核心功能:**
- 树状导航 —— 明确的层级结构,而非扁平的信息流
- 手动页面排序 —— 排序明确,不受文件名影响 (见 [页面排序](#sorting-pages))
- 跨标题和内容的全文搜索,支持基于 tag 的过滤
- 页面 tag —— 可在整个 wiki 中进行搜索和过滤
- 每个页面的反向链接和链接状态(传入、传出、断链)
- 内置 Markdown 编辑器,支持实时预览、键盘快捷键以及内部页面链接的自动补全
- 针对并发编辑的乐观锁
- Markdown:表格、任务列表、脚注、标注 (`:::info` / `:::warning`)、Mermaid 图表、KaTeX 数学公式块 (`$$...$$`,不支持行内 `$...$`)、净化后的内联 HTML
**自定义:**
- 自定义样式表 (`--custom-stylesheet`, v0.8.5+)
- 将 HTML/JS 注入 `` 以用于分析统计或自定义 CSS
- 品牌设置:logo、favicon、站点名称
- 深色模式和对移动端友好的 UI
**通过 feature flags 按需启用:**
- 修订历史 (`--enable-revision`)
- 页面重命名或移动时的自动链接重写 (`--enable-link-refactor`)
- Git 备份 —— 通过 SSH 将 wiki 内容推送到远程 Git 仓库 (`--git-backup`, v0.11.3, 实验性)
**Markdown 导入:**
- 基于 ZIP 的导入器,供 editor 和 admin 使用
- 支持在导入时重写 Obsidian 风格的 wiki 链接
- 在文件夹结构相对干净的情况下效果最佳;并非适用于所有源格式的全自动转换器
**移动端:**
## 适用 / 不适用场景
**适合:**
- 个人 wiki、工程笔记和操作手册
- 团队内部或家庭实验室文档
- 需要结构化 wiki UI 的现有 Markdown 或 Obsidian 库
- 希望使用树状导航而非扁平信息流的小型团队
- 运维开销较低的自托管环境
**可能不适合:**
- 需要复杂的企业权限或审批流程的组织
- 实时协作编辑
- 寻找 Confluence 或 Notion 替代品的团队
LeafWiki 在设计上比这些系统更具针对性。这种专注也是其价值的一部分。
**不想自己运行服务器?** 免费托管测试版 —— 共 10 个名额,2026 年 9 月开始。[获取测试名额 →](https://leafwiki.com/hosted/#waitlist) 并帮助塑造托管版本。
## 安装
### Docker
```
docker run -p 8080:8080 \
-v ~/leafwiki-data:/app/data \
ghcr.io/perber/leafwiki:latest \
--jwt-secret=yoursecret \
--admin-password=yourpassword \
--allow-insecure=true
```
使用纯 HTTP 时必须加上 `--allow-insecure=true`。如果通过 HTTPS 提供服务则可以省略(请确保反向代理转发 `X-Forwarded-Proto: https`)。
**非 root 用户:**
```
docker run -p 8080:8080 \
-u 1000:1000 \
-v ~/leafwiki-data:/app/data \
ghcr.io/perber/leafwiki:latest \
--jwt-secret=yoursecret \
--admin-password=yourpassword \
--allow-insecure=true
```
数据目录必须对指定的用户可写。
### Docker Compose
```
services:
leafwiki:
image: ghcr.io/perber/leafwiki:latest
container_name: leafwiki
user: 1000:1000
ports:
- "8080:8080"
environment:
- LEAFWIKI_JWT_SECRET=yourSecret
- LEAFWIKI_ADMIN_PASSWORD=yourPassword
- LEAFWIKI_ALLOW_INSECURE=true # Required for plain HTTP. Omit for HTTPS (ensure `X-Forwarded-Proto: https` is forwarded).
volumes:
- ${HOME}/leafwiki-data:/app/data
restart: unless-stopped
```
### Linux 安装程序
```
sudo /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/perber/leafwiki/main/install.sh)"
```
将 LeafWiki 安装为系统服务。已在 Ubuntu、Debian 和 Raspbian 上经过测试。
**更新:**
```
sudo /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/perber/leafwiki/main/update.sh)"
```
**非交互模式:**
```
cp .env.example .env
# 使用你的配置编辑 .env
sudo ./install.sh --non-interactive --env-file ./.env
```
**部署示例:**
- [在 Ubuntu 上搭配 Nginx 安装](docs/install/nginx.md)
- [在 Raspberry Pi 上安装](docs/install/raspberry.md)
### 二进制文件
```
chmod +x leafwiki
./leafwiki --jwt-secret=yoursecret --admin-password=yourpassword --allow-insecure=true
```
服务器默认绑定到 `127.0.0.1:8080`。要在网络中公开暴露:
```
./leafwiki --jwt-secret=yoursecret --admin-password=yourpassword --host=0.0.0.0 --allow-insecure=true
```
默认数据目录是 `./data`。可通过 `--data-dir` 修改。
### 重置管理员密码
```
./leafwiki reset-admin-password
```
## 运行模式
LeafWiki 支持三种访问模式。请选择与您的环境相匹配的一种:
### 1. 内部 wiki —— 需要登录(默认)
所有访问都需要身份验证。没有有效账号,任何人都无法阅读或编辑。这是未设置访问参数时的默认行为。
```
./leafwiki --jwt-secret=yoursecret --admin-password=yourpassword
```
适用于团队内部 wiki 或内容需保密的家庭实验室环境。
### 2. 公开浏览,编辑需登录
任何人无需登录即可浏览 wiki。只有拥有 editor 或 admin 角色的认证用户才能进行更改。
```
./leafwiki --jwt-secret=yoursecret --admin-password=yourpassword --public-access=true
```
适用于开放文档或项目 wiki,阅读者无需账号,但您仍希望控制编辑权限。
### 3. 无需登录 —— 所有人均可阅读和编辑 (`--disable-auth`)
身份验证完全禁用。任何能访问该服务器的人都可以阅读和编辑所有页面。
```
./leafwiki --disable-auth --host=127.0.0.1
```
## 开发环境配置
**技术栈:** Go · React (Vite) · SQLite
```
git clone https://github.com/perber/leafwiki.git
cd leafwiki
```
**终端 1 —— Frontend:**
```
cd ui/leafwiki-ui
npm install
npm run dev
```
**终端 2 —— Backend:**
```
cd cmd/leafwiki
go run main.go --jwt-secret=yoursecret --allow-insecure=true --admin-password=yourpassword
```
Vite 启动于 `http://localhost:5173`。Backend 默认绑定到 `127.0.0.1`。
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解贡献指南。
## 配置
### 必需项
| 参数 | 描述 |
|------|-------------|
| `--jwt-secret` | 用于签署 JWT 的密钥。请妥善保管。 |
| `--admin-password` | 初始 admin 密码(仅在尚不存在 admin 时应用)。 |
对于纯 HTTP:请添加 `--allow-insecure=true` 以确保登录和 CSRF cookie 正常工作。
### CLI 参数
| 参数 | 描述 | 默认值 | 引入版本 |
|----------------------------------|-------------------------------------------------------------------------|---------------|---------|
| `--host` | 服务器绑定的主机/IP | `127.0.0.1` | – |
| `--port` | 服务器监听的端口 | `8080` | – |
| `--unix-socket` | Unix domain socket 路径;覆盖 `--host` 和 `--port` | `""` | v0.11.3 |
| `--data-dir` | 存储数据的目录 | `./data` | – |
| `--public-access` | 允许公开只读访问 | `false` | – |
| `--base-path` | 用于反向代理设置的 URL 前缀 (如 `/wiki`) | `""` | v0.8.2 |
| `--allow-insecure` | ⚠️ 为 auth cookies 启用 HTTP(纯 HTTP 必需) | `false` | v0.7.0 |
| `--disable-auth` | ⚠️ 禁用所有身份验证(仅限内部网络) | `false` | v0.7.0 |
| `--access-token-timeout` | Access token 有效期 (如 `24h`, `15m`) | `15m` | v0.7.0 |
| `--refresh-token-timeout` | Refresh token 有效期 (如 `168h`) | `168h` | v0.7.0 |
| `--max-asset-upload-size` | 最大上传大小 (如 `50MiB`, `52428800`) | `50MiB` | v0.8.5 |
| `--custom-stylesheet` | 数据目录内 `.css` 文件的路径 | `""` | v0.8.5 |
| `--inject-code-in-header` | 注入到 `` 的原始 HTML/JS | `""` | v0.6.0 |
| `--hide-link-metadata-section` | 隐藏反向链接和链接状态面板 | `false` | – |
| `--enable-revision` | 启用修订历史 | `false` | v0.9.0 |
| `--enable-link-refactor` | 启用重命名/移动时的链接重写 | `false` | v0.9.0 |
| `--max-revision-history` | 每个页面的最大修订数;`0` = 无限制 | `100` | v0.9.0 |
| `--enable-http-remote-user` | 通过 HTTP header 启用反向代理身份验证 | `false` | v0.10.0 |
| `--http-remote-user-header-name` | 从代理携带用户名的 Header 名称 | `Remote-User` | v0.10.0 |
| `--trusted-proxy-ips` | 用于 remote-user header 的受信任代理 IP/CIDR | `""` | v0.10.0 |
| `--login-url` | 重定向到外部 URL,而不是内置的登录表单 | `""` | v0.11.5 |
| `--logout-url` | 注销后重定向到外部 URL | `""` | v0.11.5 |
| `--disable-request-log` | 屏蔽每个请求的 HTTP 访问日志行 | `false` | v0.10.1 |
| `--git-backup` | ⚗️ 启用到远程仓库的 Git 备份 | `false` | v0.11.3 |
| `--git-backup-remote` | ⚗️ 用于 Git 备份的 SSH 远程 URL (如 `git@github.com:user/repo.git`) | `""` | v0.11.3 |
| `--git-backup-branch` | ⚗️ 推送到的分支 | `main` | v0.11.3 |
| `--git-backup-ssh-key` | ⚗️ 原始 SSH 私钥(推荐使用环境变量) | `""` | v0.11.3 |
| `--git-backup-ssh-key-path` | ⚗️ SSH 私钥文件路径 | `""` | v0.11.3 |
| `--git-backup-ssh-known-hosts` | ⚗️ 用于防范 MITM 攻击的 `known_hosts` 路径 | `""` | v0.11.3 |
| `--git-backup-author-name` | ⚗️ Git commit 作者名称 `LeafWiki Backup` | v0.11.3 |
| `--git-backup-author-email` | ⚗️ Git commit 作者邮箱 | `backup@leafwiki.local` | v0.11.3 |
| `--git-backup-interval` | ⚗️ 备份间隔 (如 `60m`, `2h`);`0` = 仅手动 | `60m` | v0.11.3 |
### 环境变量
| 变量 | 描述 | 默认值 | 引入版本 |
|-----------------------------------------|------------------------------------------------------|---------------|---------|
| `LEAFWIKI_HOST` | 主机/IP 地址 | `127.0.0.1` | – |
| `LEAFWIKI_PORT` | 端口 | `8080` | – |
| `LEAFWIKI_UNIX_SOCKET` | Unix domain socket 路径;覆盖主机/端口 | `""` | v0.11.3 |
| `LEAFWIKI_DATA_DIR` | 数据目录路径 | `./data` | – |
| `LEAFWIKI_ADMIN_PASSWORD` | 初始 admin 密码 *(必填)* | – | – |
| `LEAFWIKI_JWT_SECRET` | JWT 签名密钥 *(必填)* | – | – |
| `LEAFWIKI_PUBLIC_ACCESS` | 允许公开只读访问 | `false` | – |
| `LEAFWIKI_BASE_PATH` | 反向代理的 URL 前缀 | `""` | v0.8.2 |
| `LEAFWIKI_ALLOW_INSECURE` | ⚠️ HTTP auth cookies | `false` | v0.7.0 |
| `LEAFWIKI_DISABLE_AUTH` | ⚠️ 禁用身份验证 | `false` | v0.7.0 |
| `LEAFWIKI_ACCESS_TOKEN_TIMEOUT` | Access token 有效期 | `15m` | v0.7.0 |
| `LEAFWIKI_REFRESH_TOKEN_TIMEOUT` | Refresh token 有效期 | `168h` | v0.7.0 |
| `LEAFWIKI_MAX_ASSET_UPLOAD_SIZE` | 最大上传大小 | `50MiB` | v0.8.5 |
| `LEAFWIKI_CUSTOM_STYLESHEET` | 数据目录内 `.css` 文件的路径 | `""` | v0.8.5 |
| `LEAFWIKI_INJECT_CODE_IN_HEADER` | 注入到 `` 的 HTML/JS | `""` | v0.6.0 |
| `LEAFWIKI_HIDE_LINK_METADATA_SECTION` | 隐藏反向链接和链接状态面板 | `false` | – |
| `LEAFWIKI_ENABLE_REVISION` | 修订历史 | `false` | v0.9.0 |
| `LEAFWIKI_ENABLE_LINK_REFACTOR` | 重命名/移动时的链接重写 | `false` | v0.9.0 |
| `LEAFWIKI_MAX_REVISION_HISTORY` | 每个页面的最大修订数;`0` = 无限制 | `100` | v0.9.0 |
| `LEAFWIKI_ENABLE_HTTP_REMOTE_USER` | 通过 Header 进行反向代理认证 | `false` | v0.10.0 |
| `LEAFWIKI_HTTP_REMOTE_USER_HEADER_NAME` | 代理发送的用户名 Header | `Remote-User` | v0.10.0 |
| `LEAFWIKI_TRUSTED_PROXY_IPS` | 受信任的代理 IP/CIDR | `""` | v0.10.0 |
| `LEAFWIKI_LOGIN_URL` | 重定向到外部 URL,而不是登录表单 | `""` | v0.11.5 |
| `LEAFWIKI_LOGOUT_URL` | 注销后重定向到外部 URL | `""` | v0.11.5 |
| `LEAFWIKI_DISABLE_REQUEST_LOG` | 屏蔽每个请求的 HTTP 访问日志行 | `false` | v0.10.1 |
| `LEAFWIKI_GIT_BACKUP` | ⚗️ 启用 Git 备份 | `false` | v0.11.3 |
| `LEAFWIKI_GIT_BACKUP_REMOTE` | ⚗️ SSH 远程 URL | `""` | v0.11.3 |
| `LEAFWIKI_GIT_BACKUP_BRANCH` | ⚗️ 推送到的分支 | `main` | v0.11.3 |
| `LEAFWIKI_GIT_BACKUP_SSH_KEY` | ⚗️ 原始 SSH 私钥(优先于路径) | `""` | v0.11.3 |
| `LEAFWIKI_GIT_BACKUP_SSH_KEY_PATH` | ⚗️ SSH 私钥文件路径 | `""` | v0.11.3 |
| `LEAFWIKI_GIT_BACKUP_SSH_KNOWN_HOSTS` | ⚗️ `known_hosts` 文件路径 | `""` | v0.11.3 |
| `LEAFWIKI_GIT_BACKUP_AUTHOR_NAME` | ⚗️ Git commit 作者名称 | `LeafWiki Backup` | v0.11.3 |
| `LEAFWIKI_GIT_BACKUP_AUTHOR_EMAIL` | ⚗️ Git commit 作者邮箱 | `backup@leafwiki.local` | v0.11.3 |
| `LEAFWIKI_GIT_BACKUP_INTERVAL` | ⚗️ 备份间隔 (如 `60m`);`0` = 仅手动 | `60m` | v0.11.3 |
### 自定义样式表
将 `.css` 文件放入您的数据目录,并传入其路径:
```
./leafwiki \
--data-dir=./data \
--custom-stylesheet=custom.css \
--jwt-secret=yoursecret \
--admin-password=yourpassword
```
- 文件必须存在于 `./data/custom.css`
- 作为 `/custom.css` 提供(若使用 `--base-path` 则为 `${base-path}/custom.css`)
- 该端点可被公开访问
### 反向代理认证
自 v0.10.0 起可用。当上游代理对用户进行身份验证并通过 HTTP header 转发用户名时使用。
```
./leafwiki \
--jwt-secret=yoursecret \
--admin-password=yourpassword \
--enable-http-remote-user=true \
--http-remote-user-header-name=X-Forwarded-User \
--trusted-proxy-ips=127.0.0.1,172.18.0.0/16 \
--login-url=https://auth.example.com/login \
--logout-url=https://auth.example.com/logout
```
- 仅信任来自 `--trusted-proxy-ips` 中列出的 IP 的 header
- 如果转发的用户名在 LeafWiki 中不存在,请求将被拒绝
- 在未配置 `--trusted-proxy-ips` 的情况下,请勿启用此功能
- `--login-url` 和 `--logout-url` 是独立且可选的重定向目标 —— 设置其中一个或两个,可将用户引导至外部 IdP,而不是内置的登录表单 / 或在注销后进行重定向
- `--login-url`、`--logout-url` 和 `--user-management-url` 必须以 `http://` 或 `https://` 开头;否则服务器将拒绝启动
### Unix Socket (v0.11.3)
当 LeafWiki 需要监听本地 unix domain socket 而不是 TCP 时,请使用 `--unix-socket`。
```
./leafwiki \
--unix-socket=/run/leafwiki/leafwiki.sock \
--data-dir=./data \
--jwt-secret=yoursecret \
--admin-password=yourpassword
```
- `--unix-socket` 将覆盖 `--host` 和 `--port`
- LeafWiki 依然提供普通的 HTTP 服务;反向代理如 Nginx 或 Caddy 可连接至该 socket
- 如果之前运行遗留了陈旧的 socket 文件,LeafWiki 会在监听之前将其移除
- 新建的 socket 文件权限为 `0660`
- 在 Windows 上不支持 unix sockets,如果使用此选项,LeafWiki 将返回启动错误
### Git 备份 (v0.11.3, 实验性)
Git 备份会在可配置的时间间隔内,通过 SSH 将 wiki **内容**推送到远程 Git 仓库。它涵盖 `root/`(页面)和 `assets/` 目录。数据库文件(`.db`、`.db-wal` 等)和运行时文件会通过 `.gitignore` 排除。
备份会在可配置的间隔自动运行,也可以从 **Git Content Backup** 页面手动触发。
**CLI 参数 (v0.11.3+):**
| 参数 | 描述 | 默认值 |
|------|-------------|---------|
| `--git-backup` | 启用 Git 备份 | `false` |
| `--git-backup-remote` | SSH 远程 URL (如 `git@github.com:user/repo.git`) | `""` |
| `--git-backup-branch` | 推送到的分支 | `main` |
| `--git-backup-ssh-key` | 原始 SSH 私钥(推荐使用环境变量) | `""` |
| `--git-backup-ssh-key-path` | SSH 私钥文件路径 | `""` |
| `--git-backup-ssh-known-hosts` | 用于防范 MITM 攻击的 `known_hosts` 路径 | `""` |
| `--git-backup-author-name` | Git commit 作者名称 | `LeafWiki Backup` |
| `--git-backup-author-email` | Git commit 作者邮箱 | `backup@leafwiki.local` |
| `--git-backup-interval` | 备份间隔 (如 `60m`, `2h`);`0` = 仅手动 | `60m` |
**环境变量:**
| 变量 | 描述 |
|----------|-------------|
| `LEAFWIKI_GIT_BACKUP` | 启用 Git 备份 |
| `LEAFWIKI_GIT_BACKUP_REMOTE` | SSH 远程 URL |
| `LEAFWIKI_GIT_BACKUP_BRANCH` | 推送到的分支 |
| `LEAFWIKI_GIT_BACKUP_SSH_KEY` | 原始 SSH 私钥 |
| `LEAFWIKI_GIT_BACKUP_SSH_KEY_PATH` | SSH 私钥文件路径 |
| `LEAFWIKI_GIT_BACKUP_SSH_KNOWN_HOSTS` | `known_hosts` 文件路径 |
| `LEAFWIKI_GIT_BACKUP_AUTHOR_NAME` | Git commit 作者名称 |
| `LEAFWIKI_GIT_BACKUP_AUTHOR_EMAIL` | Git commit 作者邮箱 |
| `LEAFWIKI_GIT_BACKUP_INTERVAL` | 备份间隔 |
**示例 (Docker Compose):**
```
environment:
- LEAFWIKI_GIT_BACKUP=true
- LEAFWIKI_GIT_BACKUP_REMOTE=git@github.com:youruser/yourwiki-backup.git
- LEAFWIKI_GIT_BACKUP_BRANCH=main
- LEAFWIKI_GIT_BACKUP_SSH_KEY=${LEAFWIKI_GIT_BACKUP_SSH_KEY} # from .env file
- LEAFWIKI_GIT_BACKUP_INTERVAL=60m
```
**注意事项:**
- 使用 SSH 推送时必须提供 `--git-backup-remote`。该远程地址必须是 SSH URL (`git@...` 或 `ssh://...`)。
- 配置了远程仓库时,必须提供 `--git-backup-ssh-key` 或 `--git-backup-ssh-key-path`。推荐使用环境变量,以避免密钥出现在进程列表中。
- `--git-backup-ssh-known-hosts` 是可选的,但推荐设置。如果未设置,LeafWiki 会回退到 `~/.ssh/known_hosts`。如果该文件也不存在(在容器中很常见),SSH 主机密钥验证将被**禁用** —— 这会使连接面临 MITM 攻击风险。在生产环境中请务必显式设置此参数。
- 如果远程仓库发生偏离(例如有人直接推送到了备份分支),LeafWiki 将停止自动推送,并在 UI 中显示 **Conflict — remote diverged** 警告。在 UI 中点击 **Force Push** 可用当前的本地备份历史记录覆盖远程仓库。您的 wiki 内容永远不会丢失 —— 本地备份仓库始终是权威的。
- 这仅备份**内容** —— 不包含 SQLite 数据库。若需完整备份,请使用您的数据目录(在停止应用后执行 `cp -r`)。
### 安全性
自 v0.7.0 起默认启用:
- 用于会话处理的安全、HttpOnly cookies
- 对所有改变状态的请求进行 CSRF 保护
- 对认证端点进行速率限制
- 基于角色的访问控制:admin、editor、viewer
**`--disable-auth`** 会移除所有身份验证。仅限用于本地开发、受信任的内部网络或隔离环境。
```
# 仅限本地的安全示例:
./leafwiki --disable-auth --host=127.0.0.1
```
对于大多数设置,建议使用 `--public-access` 进行只读公开访问,并使用 viewer 角色进行受限账户控制。
### 运维说明
- 默认绑定:`127.0.0.1` (二进制文件) / `0.0.0.0` (Docker 镜像)
- 默认数据目录:`./data` (二进制文件) / `/app/data` (容器)
- 默认设置有意保持保守 —— 全新安装不会意外暴露在网络中
## 键盘快捷键
| 动作 | 快捷键 |
|-----------------------|----------------------------------------|
| 编辑模式 | `Ctrl + E` / `Cmd + E` |
保存 | `Ctrl + S` / `Cmd + S` |
| 搜索 | `Ctrl + Shift + F` / `Cmd + Shift + F` |
| 导航面板 | `Ctrl + Shift + E` / `Cmd + Shift + E` |
| 转到页面 | `Ctrl + Alt + P` / `Cmd + Option + P` |
| 加粗 | `Ctrl + B` / `Cmd + B` |
| 斜体 | `Ctrl + I` / `Cmd + I` |
| 标题 1–3 | `Ctrl + Alt + 1–3` / `Cmd + Alt + 1–3` |
编辑器中支持使用 `Ctrl+V` / `Cmd+V` 粘贴图像和文件。
`Esc` 可关闭模态框、对话框和退出编辑模式。
## 页面排序
LeafWiki 中的页面顺序是**明确且手动的** —— 它不会自动遵循文件名或字母顺序。默认情况下,页面按创建顺序显示。
LeafWiki 不是文件浏览器。树状结构反映了您定义的结构,您设置的顺序就是读者看到的顺序。
要重新排列某个部分内或父页面下的页面:
1. 将鼠标悬停在侧边栏树状结构中的部分或页面上,以显示操作按钮
2. 点击 **⋮**(更多操作)按钮
3. 选择 **Sort Section Children** 或 **Sort Page Children**

排序对话框允许您将项目拖拽到位、使用 ↑ ↓ 箭头按钮,或通过 **A → Z** / **Z → A** 切换到字母顺序。点击 **Save** 进行应用。

## 支持本项目
如果它对您有帮助:
- ⭐ **[为仓库点 Star](https://github.com/perber/leafwiki)** —— 帮助其他人发现它
- 💛 **[在 GitHub 上赞助](https://leafwiki.com/support)** —— 支持持续的维护、错误修复和新功能开发
- 🚀 **[不想自托管?获取免费测试名额](https://leafwiki.com/hosted/#waitlist)** —— 10 个名额,托管测试版于 2026 年 9 月开始,快来帮助塑造托管版本吧
需要帮助为您的团队部署 LeafWiki 吗?[商业支持与设置 →](https://leafwiki.com/support/)
## 贡献
欢迎贡献、讨论和反馈。
在 GitHub 上开启 issue 或发起讨论。关注本仓库以获取有关新版本发布的通知。
标签:EVTX分析, Go, Markdown, Ruby, Ruby工具, SQLite, Wiki, 日志审计, 知识库, 自托管, 请求拦截