茄子的个人空间

搭建Webdav服务器实现Obsidian和Zotero多端同步

字数统计: 1.9k阅读时长: 7 min
2025/01/26
loading

前 言

很长一段时间以来,都比较苦恼自己的obsidian和zotero在多端同步的时候经常碰到问题,有时候想在手机上面查看某篇paper的时候,正好发现pdf附件没被同步,导致不能查看。加之,最近给女朋友推荐了obsidian,她觉得非常好用,但由于设备原因不能实现多端同步。她采用幕布记录笔记,再导入obsidian的方法,以实现多端同步和笔记本地保存,我认为该种方式较为繁琐,不符合技术人的气质。

思考再三,我决定好好解决多端配置的问题,网络上搜索了一圈资料下来,发现很多手机端软件均支持以Webdav协议进行文件共享,遂决定搭建Webdav协议服务器实现多端共享。

虽有坚果云等支持Webdav协议的现成云盘,但坚果云限制不少,既然要彻底解决该问题,自然不能忍受。所以决定搭建一个属于自己的Webdav协议服务器,以实现多端丝滑共享同步。

由于要和女友一起使用共享服务器,那么网上常见的单一账号的Webdav服务教程,自然不能满足要求。期望的是,分别设置user1和user2,以达到各自有不同的文件存储空间,并设置一个shared存储空间,方便共享文件,共享文件只有user1和user2能够进行编辑,但可以被guest用户查看,方便我们共享资料给朋友。

网络上面搜寻了一圈,发现Apache2能够很好的满足上述需求,并且具有想对成熟的教程资源,遂采用Apache2进行服务搭建。服务搭建的详细步骤记录如下:

环境及软件版本 :

  • 服务器操作系统: Ubuntu 22.04.4 LTS
  • zotero版本:7.0.9
  • obsidian版本:Version 1.5.8

安装Apache2并配置webdav协议

这里,我们对一般的WebDav配置进行了扩展,以达到多用户的要求,详细内容体现在配置文件里面。

  1. 安装 Apache2 HTTP 服务并开通webdav协议
1
2
3
4
5
6
sudo apt update
sudo apt install apache2
sudo systemctl enable apache2
sudo systemctl start apache2
sudo a2enmod dav dav_fs auth_digest
sudo systemctl restart apache2
  1. 创建WebDav文件夹,设置权限
1
2
3
4
5
sudo mkdir -p /var/www/webdav/user1
sudo mkdir -p /var/www/webdav/user2
sudo mkdir -p /var/www/webdav/shared
sudo chown -R www-data:www-data /var/www/webdav
sudo chmod -R 775 /var/www/webdav

通过上面的设置,webdav服务在服务器上面的路径为: /var/www/webdav
, 可以改为自己的。

  1. 创建用户认证文件
    根据提示输入密码并确认
1
2
sudo htdigest -c /etc/apache2/webdav.passwd "WebDAV Realm" user1
sudo htdigest /etc/apache2/webdav.passwd "WebDAV Realm" user2
  1. 获取SSL证书
    由于iso要求只能以https协议方式进行文件传输,所以要使得搭建的webdav服务能够用于电脑端和iPhone、ipad同步,必须配置SSL证书,以启用https协议。
    SSL证书有两种获取方式,一种是自签名证书,该种证书只适合测试环境,不适合生产环境,因为简单笔者一开始采用的是该种方式,但经过了大量尝试,最终得到的自签名证书,并不能用于iso端。因此,不推荐自签名证书。
    网络上的SSL证书颁发机构,一般仅针对于域名进行证书颁发,但是国内域名备案流程繁琐。笔者经过大量的查询,最终找到了一家可以为ip地址颁发免费证书的机构 ZeroSSL,虽然一次申请使用期仅为三个月,但是足以解决燃煤之急。
    ZeroSSL的网站上有较为详细的证书申请及使用方法,这里不做赘述。

  2. 配置WebDav
    完成上述操作之后,我们开始对WebDav服务进行配置,打开配置文件

1
sudo vim /etc/apache2/sites-available/000-default.conf

往配置文件中添加以下完整配置内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/webdav

# 设置ssl证书,路径表示证书的存放位置
# ServerName webdav.local
SSLEngine on
SSLCertificateFile /etc/ssl/certs/certificate.crt
SSLCertificateKeyFile /etc/ssl/private/private.key
SSLCertificateChainFile /etc/ssl/certs/ca_bundle.crt

Alias /webdav /var/www/webdav
<Directory /home/webdav>
Options Indexes FollowSymLinks
AllowOverride None
# Require all granted
# Dav On
</Directory>


<Location /webdav/user1>
AuthType Digest
AuthName "WebDAV Realm"
AuthDigestProvider file
AuthUserFile /etc/apache2/webdav.passwd
Require user user1
Dav On
</Location>

<Location /webdav/user2>
AuthType Digest
AuthName "WebDAV Realm"
AuthDigestProvider file
AuthUserFile /etc/apache2/webdav.passwd
Require user user2
Dav On
</Location>

# 设置共享路径的权限
<Location /webdav/shared>
Dav On
Allow from all
<LimitExcept OPTIONS GET>
AuthType Digest
AuthName "WebDAV Realm"
AuthDigestProvider file
AuthUserFile /etc/apache2/webdav.passwd
Require valid-user
</LimitExcept>
<LimitExcept PUT POST DELETE MOVE>
Require all granted
</LimitExcept>
</Location>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
  1. 重启Apache2并测试
1
sudo systemctl restart apache2

如果使用云服务器,需要在安全组中开通443端口,才能够正常访问服务。

  • 访问方式
    地址为 http://your-server-ip/webdav
  • 预期效果
    • 用户 user1 只能访问 /webdav/user1
    • 用户 user2 只能访问 /webdav/user2
    • 所有人均可访问 /webdav/shared,无需密码,但只有查看权限,user1和user2通过登录验证,有查看、编辑和删除权限。

Zotero 配置

zotero 中的配置很简单,只要打开设置->同步,附件同步方式选择”WebDAV”填入在配置文件中设置的网址、用户名、密码即可,填写好之后通过点击”验证服务器”按钮,对服务进行验证,验证通过即表示zotero已经与服务器建立了连接。然后关闭设置界面,点击右上角的同步图标即可将文件附件同步到远程服务器。手机端和ipad端的设置类似,此处略。

值得注意的是,如果服务器ip没有获得ssl证书,或者使用自签名证书,此处将会报错,在电脑端的解决方法在这里, 手机端和ipad端笔者暂未找到合适的解决方法,笔者在配置的时候,在这里耗费了大量心力,最终才找到了 ZeroSSL 这个免费为ip地址颁发ssl证书的机构,并获得了ssl证书。

Obsidian 配置

obsidian 配置远程同步,主要使用了remotely-save这个插件,该插件的配置使用可以参考这里这里, 细节这里不赘述。

由于我们在上述配置中,使用了htdigest生成用户密码,因此,鉴权类型要选择digest,否则连接失败。

image-20250126211130501

此外,在obsidian中下载插件需要科学上网,由于手机或ipad不具备科学上网的条件,这使得无法在手机或ipad上的obsidian中安装remotely-save。一种简单的解决方法是,将手机或ipad端obsidian根目录下的.obsidian替换成电脑端obsidian根目录下的.obsidian,重启之后就会发现手机端的配置和电脑上一模一样了。

其 他

只要能够支持WebDAV协议备份文件的App均可通过类似上述的设置,将资料备份到云端服务器,并实现多端共享访问。

总 结

本文详细介绍了,在一台Ubuntu 22.04服务器上通过Apache2配置多用户的webdav服务,给出了经过笔者实践过的详细配置文件,并提供了获取免费ip地址ssl证书的方法。同时,给出了简单的zotero和obsidian配置指导。

CATALOG
  1. 1. 前 言
  2. 2. 环境及软件版本 :
  3. 3. 安装Apache2并配置webdav协议
  4. 4. Zotero 配置
  5. 5. Obsidian 配置
  6. 6. 其 他
  7. 7. 总 结