Docker 伺服

在服务器或 NAS 上运行思源,最简单稳定的方案是使用官方 Docker 镜像 b3log/siyuan。部署完成后,通过浏览器访问 http://服务器 IP:6806 即可使用。
⚠️
先确认工作空间挂载正确。 思源数据保存在工作空间目录中,如果 -vvolumes 写错,容器删除后可能会造成数据丢失。公开访问时务必设置强访问授权码。

适用场景

  • 适合在 Linux 服务器、NAS、Unraid、TrueNAS、群晖等环境中长期运行
  • 适合只需要通过浏览器访问思源的场景
  • 不适合把 Docker 版当作桌面端或移动端的同步服务

镜像信息

  • 镜像名称:b3log/siyuan

程序结构

容器内程序位于 /opt/siyuan/,主要结构如下:
  • appearance:图标、主题、多语言资源
  • guide:帮助文档
  • stage:界面和静态资源
  • kernel:思源内核程序
  • entrypoint.sh:容器启动入口脚本
当前 Docker 镜像入口为:
启动时最终会运行思源内核,并把工作空间路径、访问授权码等参数传给内核。

1 分钟启动

以下示例把宿主机和容器内的工作空间都统一为 /siyuan/workspace,这样最不容易写错路径。
启动后访问:
查看运行状态:
停止和启动:

参数说明

  • -v /siyuan/workspace:/siyuan/workspace:把宿主机目录挂载为容器内工作空间
  • -p 6806:6806:把思源 Web 端口暴露到宿主机
  • PUID:容器内运行用户的用户 ID,未设置时默认 1000
  • PGID:容器内运行用户的用户组 ID,未设置时默认 1000
  • --workspace:指定思源工作空间路径
  • --accessAuthCode:访问授权码,请务必改成强密码
可以用下面命令查看当前 Linux 用户的 UID 和 GID:
如果宿主机工作空间属于当前用户,例如 UID/GID 是 1001:1002,则要同步调整目录权限和环境变量:

Docker Compose 部署

更推荐长期使用 Docker Compose,方便升级、重启和维护。
在服务器上创建 compose.yaml
同目录创建 .env
启动:
查看日志:
关闭:

环境变量写法

除了命令行参数,也可以使用环境变量指定工作空间和访问授权码:
如果命令行参数和环境变量同时存在,命令行参数优先级更高。
不建议公开部署时关闭访问授权码。如果只在完全可信的内网环境中使用,可以通过下面变量跳过授权码:

权限处理

官方镜像会通过 entrypoint.sh 根据 PUIDPGID 创建或调整容器内的 siyuan 用户。现在通常不需要再额外传 -u 1000:1000
如果出现无法创建文件、无法保存、启动时报 permission denied,优先检查:
然后让目录所属用户和容器环境变量保持一致:

反向代理和隐藏端口

如果需要通过域名访问,建议使用 NGINX、Caddy、Traefik 等反向代理,并把 Docker 端口只绑定到本机。
Docker 端口改为:
Docker Compose 写法:
NGINX 示例:
💡
建议使用独立域名或子域名,例如 siyuan.example.com。不要用 URL 重写把思源挂到某个子路径下,否则鉴权和 WebSocket 可能出现异常。

升级

升级前先备份工作空间。使用 Compose 时推荐流程如下:
生产环境更稳妥的做法是固定镜像版本,例如:
确认新版正常后再修改版本号升级。可在 Docker Hub TagsGitHub Releases 查看版本。

备份和恢复

思源 Docker 部署最重要的是工作空间目录。建议定期备份整个 /siyuan/workspace,不要只备份容器。
备份:
恢复:
如果使用快照、云盘或 NAS 备份,也要确保备份的是宿主机上的工作空间目录,而不是容器内部目录。

安全建议

  • --accessAuthCode 必须设置为强密码
  • 公网访问建议开启 HTTPS
  • 使用反向代理时,容器端口尽量只绑定 127.0.0.1
  • 云服务器安全组只开放必要端口,例如 80、443
  • 不要把工作空间目录放到会被第三方同步盘实时同步的位置
  • 不要把 .env 中的访问授权码提交到公开仓库

常见问题

打开页面后要求输入授权码

输入启动参数或环境变量中设置的 accessAuthCode。如果忘记了,查看 Compose 文件、.env 文件或 Docker 启动命令。

容器启动后访问不了

依次检查:
  • 容器是否运行:docker ps
  • 日志是否报错:docker logs siyuandocker compose logs -f
  • 服务器防火墙和云服务器安全组是否放行 6806
  • 如果用了反向代理,确认 /ws 已经正确代理 WebSocket

提示权限不足或无法保存

通常是宿主机目录权限和 PUID/PGID 不一致。检查目录所有者后执行:
如果你的 PUID/PGID 不是 1000:1000,请替换为实际值。

升级后数据不见了

优先检查 volumes-v 是否指向了原来的宿主机目录。只要原工作空间目录还在,通常重新挂载正确路径即可恢复。

反向代理后登录或连接异常

不要使用 URL 重写;优先使用独立域名或子域名。确认 /ws WebSocket 代理配置正确。

当前限制

Docker 伺服版有一些限制:
  • 不支持桌面端和移动端应用连接,仅支持浏览器使用
  • 不支持导出 PDF、HTML 和 Word 格式
  • 不支持导入 Markdown 文件

参考资料

上一篇
手机伺服
下一篇
资源文件
Loading...
文章列表
思源笔记用户指南
🍼新手引导
✏️基础操作
⛓️基础块
🧬高级块
📊数据库
🛹特色功能
🚀高级操作
💎会员特权
🖼️主题推荐
🔌常用插件
🔡代码片段
💬交流区
❇️思源进阶