Kylaan

Back

阿里云服务器:使用 Docker + WebDAV 实现 Obsidian 多端同步Blur image

阿里云服务器:使用 Docker + WebDAV 实现 Obsidian 多端同步

Obsidian 是一款极其强大的本地化双链笔记软件,但“本地化”也意味着多端同步一直是个痛点。官方的 Obsidian Sync 价格有些高昂,既然手里有一台 24 小时开机的阿里云服务器(2核2G配置),加上公网 IPv4,不如自己动手丰衣足食。

WebDAV + Remotely Save 插件 是目前最主流且轻量的方案。但在宝塔面板上直接部署的过程中,我却踩了几个非常经典的坑。


踩坑记录:被宝塔官方 WebDAV 插件背刺

一开始,我的思路非常直接:既然服务器装了宝塔面板,直接去软件商店点个安装不就行了?

结果第一步就卡住了——软件商店列表无法加载。通过 SSH 终端测试发现是服务器的 DNS 解析出了问题:

ping: [www.baidu.com](https://www.baidu.com): Name or service not known
bash

顺手通过向 /etc/resolv.conf 写入阿里云公共 DNS (223.5.5.5) 解决了断网问题。

但更大的坑在后面。

安装好宝塔 WebDAV 插件并配置了 127.0.0.1:8082 端口,外层套上泛域名解析并申请了 SSL 证书,做好了 Nginx 反向代理。满心欢喜地打开浏览器访问,迎接我的却是冰冷的:502 Bad Gateway

通过 curl 排查,发现底层服务根本没跑起来:

curl: (7) Failed to connect to 127.0.0.1 port 8082: Connection refused
bash

即使把监听地址换成了全局的 0.0.0.0,通过 ss -tulnp | grep :80 依然看不到任何程序在监听 8082 端口。彻底破案:宝塔官方的 WebDAV 插件存在假死 Bug,UI 显示成功,底层服务根本没有启动。

最终方案:Docker 编排

通过 Docker Compose 跑一个极轻量的 WebDAV 镜像,不仅稳定,而且维护起来异常清晰。

1. 准备目录与配置文件

在服务器上新建专用的项目目录和笔记存储目录:

mkdir -p /opt/obsidian-webdav
mkdir -p /www/wwwroot/obsidian_sync
cd /opt/obsidian-webdav
bash

创建 .env 文件,将账号密码和端口配置抽离出来,方便日后修改:

# WebDAV 账号和密码(请务必修改为强密码)
WEBDAV_USERNAME=<your_username>
WEBDAV_PASSWORD=<your_secure_password>

# 绑定的本地端口
WEBDAV_PORT=8082

# 宿主机的笔记存储路径
SYNC_DIR=/www/wwwroot/obsidian_sync
plaintext

2. 编写 Docker Compose

在同目录下创建 docker-compose.yml。这里有一个细节:端口映射必须强制绑定 127.0.0.1,这样可以防止 Docker 穿透阿里云和宝塔的防火墙将 WebDAV 裸露在公网上,确保所有的访问都必须乖乖走我们配置好 HTTPS 的反向代理。

查看 docker-compose.yml 完整代码

version: '3.8'

services:
  webdav:
    image: bytemark/webdav:latest
    container_name: obsidian-webdav
    restart: always
    ports:
      # 强制绑定 127.0.0.1,保障安全
      - "127.0.0.1:${WEBDAV_PORT}:80"
    environment:
      - AUTH_TYPE=Basic
      - USERNAME=${WEBDAV_USERNAME}
      - PASSWORD=${WEBDAV_PASSWORD}
    volumes:
      - ${SYNC_DIR}:/var/lib/dav
yaml

执行 docker compose up -d,容器瞬间秒级启动。再去 curl 测试,终于看到了久违的 HTTP/1.1 401 Unauthorized 身份验证提示。

完善反向代理与 HTTPS(iOS 同步必备)

因为 iOS 端的 Obsidian(或者大部分手机端 WebDAV 客户端)强制要求 HTTPS 协议,所以我们必须在宝塔里做一次反向代理:

  1. 在宝塔面板新建一个纯静态站点,绑定你分配给笔记同步的子域名(例如 obsidian.yourdomain.com)。
  2. 在 SSL 选项卡中,使用 Let’s Encrypt 申请免费证书,并开启强制 HTTPS
  3. 在站点的“反向代理”设置中,添加一条代理,目标 URL 填写 http://127.0.0.1:8082

成果验收与结语

打开 Obsidian,关闭安全模式,下载社区插件 Remotely Save。 选择 WebDAV 同步,填入 https://obsidian.yourdomain.com 和刚才在 .env 中设置的账号密码。点击 “Check” 测试,成功连接。

阿里云服务器:使用 Docker + WebDAV 实现 Obsidian 多端同步
https://kylaan.top/blog/webdav/obsidian
Author Kylaan
Published at 2026年3月2日
Comment seems to stuck. Try to refresh?✨