perber/leafwiki

GitHub: perber/leafwiki

一款零外部依赖的自托管 Wiki 引擎,以单个 Go 二进制文件配合 SQLite 和磁盘 Markdown 文件提供轻量级结构化文档管理。

Stars: 795 | Forks: 55

# 🌿 LeafWiki 自托管 wiki。单一 Go 二进制文件。SQLite + Markdown 存储在磁盘上。 面向希望获得结构化、长久保存的文档的工程师和自托管爱好者。无需 Node.js,无需 Redis,无需 Postgres —— 只需要一个二进制文件和一个数据目录。 ![预览](https://static.pigsec.cn/wp-content/uploads/repos/cas/b2/b26c2d85f3061f2fba21034eb9a137201c9668d93eda629dab7e11ed368cc98d.png) 如果你曾看过 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** ![排序上下文菜单](https://static.pigsec.cn/wp-content/uploads/repos/cas/7b/7baeb855c2db53fb9cacbeb1d025f068d2552481481159486d2f3c67f53370ac.png) 排序对话框允许您将项目拖拽到位、使用 ↑ ↓ 箭头按钮,或通过 **A → Z** / **Z → A** 切换到字母顺序。点击 **Save** 进行应用。 ![排序对话框](https://raw.githubusercontent.com/perber/leafwiki/main/assets/sort-dialog.png) ## 支持本项目 如果它对您有帮助: - ⭐ **[为仓库点 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, 日志审计, 知识库, 自托管, 请求拦截