webdav 部署和使用

397次阅读
没有评论

共计 4359 个字符,预计需要花费 11 分钟才能阅读完成。

更新记录

2023-10-12

问题:文件权限导致报错

windows​ 挂载 webdav 时,在执行远程写入时,文件的属组和属主是 root​。

但是应用程序,例如我的思源笔记数据目录,在启动配置时并未使用 root​用户,会导致在 windows​ 上新增的文件,web端无法读取,且思源笔记容器重启会发生报错无权限读取 xxx 文件。

即需要注意 webdav 在写入文件时,权限需要和 挂载出来的数据目录的原始权限保持一致,避免发生问题。

2023-10-10

raidrive 从官网下载的免费版广告太多,在软件首页和右下角弹窗会频繁出现,很难忍受。且火绒也无法有效屏蔽弹窗广告。

尝试了两个方案

  • 使用 rclone 代替 raidrive
    • rclone配置要繁琐一些,需要通过命令行方式配置启动
    • 需要写bat来实现后台运行
    • 开机自启需要手动添加
    • 这点最关键。速度不如raidrive,尝试了很多不同的挂载参数,速率和raidrive有明显的区别,在资源管理器打开webdav目录,或者思源笔记读取时,加载速度极慢

  • 尝试去除广告
    • 改hosts方式,未生效
    • 订阅需要2美刀/月,价格太贵
    • 下载无广告版 2020.6.25

    • 这里需要注意,不要尝试下载破解版,可能留存后门,泄露webdav的用户信息

    • 官方的 2020.6.25 版本无广告,但是官网已经没有入口可以下载
    • 有知名的外网第三方下载站,提供各类旧版软件下载,下载链接:uptodown。此下载站风评还可以,请自行甄别安全与否

背景

日常的笔记或文章的撰写,我一般是在私有服务器上部署的思源笔记上进行。文章编辑成功后,会手动发布到 wordpress 站点中。经过几个月的实践,发现存在一些问题:

  1. 流程繁琐,文章编辑完后需要在笔记服务中手动导出,再导入发布。
  2. 已发布的文章内容如果更新,需要同样再执行一次导出发布的流程。
  3. 任一发布平台都需要手动执行,而 wordpress 个人站点其实并不好引流。

近期在思源笔记上发现了一款插件,参考:github 思源笔记发布插件

可以用于发布笔记到各个平台,我简单测试了下,可以满足多平台发布和更新文章的功能。

webdav 部署和使用

但是该插件只支持 PC端​,而私有化部署的思源笔记只能通过 web端​ 访问,真令人头大。要知道市面上其实并没有太多好用的多发工具,难得有一个免费好用的,却不能实施在现有环境下太可惜了。

思来想去,决定通过 webdav​ 的方式,将服务端的笔记数据目录使用映射到外网,再通过修改 PC端​ 的数据空间为服务端映射出的目录,直接在 PC端​ 共享使用服务端的数据。

这样做可能会存在数据损坏的弊端,参考:github 思源笔记

但是我已经通过计划任务定期备份数据。并且我会保持在 web端​ 进行编辑,在 PC端​ 仅发布。降低多端同时变更数据的风险。

牺牲一些安全性,可以极大提高便利性,值得做!

​​webdav 部署和使用​​

实施

webdav 是什么

WebDAV(Web Distributed Authoring and Versioning)是一种用于在Web上进行文件管理和协作的协议。它扩展了HTTP(Hypertext Transfer Protocol)协议,允许用户通过HTTP协议对远程服务器上的文件进行读取和写入操作。

架设 webdav 服务端

服务端可以由多种方式实现,我测试过两种方式:

  1. nginx & apache
  2. github webdav,这是社区一个使用 golang 实现的服务端

nginx

最终并没有采用 nginx 方式,不想下功夫来进行源码编译了,大概介绍下实现过程。

在使用 nginx 架设 webdav 时,需要手动进行源码编译,引入两个模块:--with-http_dav_module​ 和 --nginx-dav-ext-module​。

使用 nginx -V​ 命令可确定当前二进制的编译参数。

最终配置文件如下:

# cat webdav.conf
server {
  listen 443 ssl http2;
  server_name ***.***;

  ssl_certificate     /root/.acme.sh/***.***/fullchain.cer;
  ssl_certificate_key /root/.acme.sh/***.***/***.***.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_prefer_server_ciphers on;

  charset utf-8;
  error_page 405 =200 @405;

  location / {
    auth_basic "请输入用户和密码";
    auth_basic_user_file /etc/nginx/password;

    charset utf-8;
    autoindex on;
    dav_methods PUT DELETE MKCOL COPY MOVE PROPFIND;
    create_full_put_path on;
    dav_access user:rw group:rw all:r;
    dav_ext_methods PROPFIND OPTIONS;
    client_max_body_size 100000M;
    root /siyuan_note_pyw;
    }
}

dav_ext_methods PROPFIND OPTIONS;​ 依赖于​nginx-dav-ext-module

其他 dav 相关参数依赖于 with-http_dav_module

Go webdav server

服务端部署

# 下载包
mkdir /usr/local/webdav && cd /usr/local/webdav
wget https://github.com/hacdias/webdav/releases/download/v4.2.0/linux-amd64-webdav.tar.gz
tar xf linux-amd64-webdav.tar.gz

# 拷贝至环境变量目录
cp webdav /usr/bin/webdav

# 编辑配置文件,仅配置最简单的参数,更细致的配置参考 github
# vim /usr/local/webdav/config.yaml
address: 0.0.0.0
port: 47878
auth: true
tls: false
cert: cert.pem
key: key.pem

# Default user settings (will be merged)
scope: .
modify: true
rules: []

users:
  - username: pengyinwei
    password: testpassword
    scope: /siyuan_note_pyw

部署流程很简单,配置文件未进行过于复杂的配置,仅个性化配置了端口、鉴权、映射目录。

# 命令行方式启动确认配置文件是否正确
/usr/bin/webdav --config /usr/local/webdav/config.yaml
2023-10-06T21:23:30.357+0800    info    Listening   {"address": "[::]:47878"}

systemd 配置

命令行方式启动只是用于临时测试,最佳实践是使用 systemd 管理 webdav。

# 编辑配置文件
# vim /etc/systemd/system/webdav.service 
[Unit]
Description=WebDAV server
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/webdav --config /usr/local/webdav/config.yaml
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 启动 webdav
systemctl start webdav.service

# 配置开机自启
systemctl enable webdav.service

# 查看服务状态
systemctl status webdav.service

nginx 反代

IP,证书等请替换为自己的配置

# vim webdav.***.conf
upstream webdav-local {
  server 192.168.2.11:47878;
}

server {
  listen 80;
  server_name webdav-local.***.***;

  return 301 https://webdav-local.***.***$request_uri;
}

server {
  listen 443 ssl http2;
  server_name webdav-local.***.***;


  ssl_certificate     /root/.acme.sh/*.***.***/fullchain.cer;
  ssl_certificate_key /root/.acme.sh/*.***.***/*.***.***.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_prefer_server_ciphers on;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://webdav-local;
  }
}

Win 10 挂载 webdav 为本地磁盘

使用 RaiDrive​ 软件,可以方便的挂载各类网盘或 webdav 为本地磁盘。

官方免费版下载链接:raidrive 官网 (广告多)
2020.06.25 旧版下载链接:uptodown (无广告)

安装完毕后,添加 webdav 挂载配置

​​webdav 部署和使用​​

点击 连接​ 进行挂载,最终效果如下:
webdav 部署和使用

思源 PC端 配置工作空间

webdav 部署和使用

webdav 部署和使用

配置完毕后,即可在 PC端​ 直接读取 服务端 的数据。也可以愉快的使用插件进行文章的多平台发布。

webdav 部署和使用

结论

只要数据在自己手中,方法总比困难多。下个阶段会实测文章多发的效果,待我后续更新吧。

引用链接

正文完
 
pengyinwei
版权声明:本站原创文章,由 pengyinwei 2023-10-06发表,共计4359字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处:https://www.opshub.cn
评论(没有评论)