搭建私人的云笔记_使用webdav服务

转载注明来源: 本文链接 来自osnosn的博客,写于 2019-10-10.

手机上有很多云笔记app,大多支持云存储。可是把笔记放在别人的服务器上,总觉得不太安全。所以想把云笔记存在自己家。

有很多开源的云笔记,比如蚂蚁笔记(Leanote),nextcloud-note,

可是建立起来都比较麻烦,当然功能也是很强的。

leanote是golang写的,要mango数据库支持。nextcloud-note需要安装nextcloud云盘系统,需要php+mysql支持。

网上搜了一下,

  • Android,有几款笔记支持webdav同步,比如"一本日记"(要付费),"可乐记"(免费),"易码"(免费)。
  • 苹果,只找到一款免费的。收费的就很多了。"Notebooks for iPhone"(免费), "Notebooks Write and Organize"(收费)

所以尝试自己建个webdav服务器。

尝试 NextCloud

nextcloud 支持webdav协议。

买了台迷你pc(x86架构),装CentOS7,安装nginx,php-fpm,mariadb,然后装nextcloud,然后在nextcloud中装notepad插件。

手机端app:

  • nextcloud-note,挺好的,支持markdown。支持多层目录。但只支持配置一个服务器地址。或者说,app只支持一个账号。不能多账号共存。
  • nextcloud,云盘,也不错,支持文件,图片,通讯录同步。支持多账号共存。
  • nextcloud 的 webdav 对易码的支持也很好
  • nextcloud 云盘的安卓版 APP 本身就可以备份手机通讯录(打包为一个文件,上传到云盘目录)
  • 易码,支持markdown,支持多账号共存。(这个云笔记,我很推荐)
  • nextcloud 对 DAVdroid(DAVx5)2.6.3 支持很好。配置好账号后,通讯录,日历,个人提醒 就都可以同步了。

用了一段时间,发现云盘我基本上没什么需求,为了用个云笔记,建了这么个大东西,感觉挺浪费。

看了看leanote

也挺复杂的,还要装mango数据库。放弃。


尝试只建个webdav服务

apache2,nginx,lighttpd 都支持webdav。

apache2 比较臃肿,放弃。

所以只尝试 nginx 和 lighttpd 。

如果从源码安装,无论什么系统,无论 nginx 或 lighttpd 都能装好webdav服务。

以下是尝试使用系统的预编译包安装和配置。

CentOS7 上

  • 从epel源安装nginx,为1.12.2版。(yum install)

    • 发现有http_dav_module,但缺失http_dav_ext. 导致PROPFIND指令不支持。
  • 从nginx-stable源安装nginx,1.16.1版,(yum install)
    • 也是有http_dav_module,没有http_dav_ext。
  • 从epel源装lighttpd,是1.4.54版,(yum install)
    • 配置好后出错 Sorry, no sqlite3 and libxml2 support include,发现编译时缺少 --with-webdav-props 参数。导致PROPFIND指令没有按要求返回XML内容,而是返回了0字节。

Armbian

手上还有台斐讯N1盒子,刷了armbian。debian10(buster)版。

  • 装nginx,1.14.2,(apt install)

    • 有http_dav_module 和 http_dav_ext 。
    • PUT,DELETE,MOVE,PROPFIND 支持OK。
    • 不知道 COPY,OPTION 支持如何,因为没用到。
    • 不过有bug,nginx要求MKCOL指令跟的目录名,必须以'/' 除号结尾。而易码app在创建目录时,目录名末尾不带除号。
    • 所以,易码能用,只是要事先手动把目录创建好。易码保存和更新笔记,没问题。
      • 手动 mkdir mynote/ mynote/assets/ 每个目录中要有assets目录,易码用assets来存放附件
  • 装lighttpd,1.4.53,(apt install)
    • 有lighttpd-mod-webdav模块。
    • PUT,DELETE,MKCOL,PROPFIND 支持OK。
    • 不知道 COPY,OPTION 支持如何,因为没用到。
    • 有bug。但MOVE指令总是返回400 Bad request. (lighttpd独立运行在80或88,或通过nginx的proxy_pass到88口,MOVE指令都返回400)
    • 所以,易码能同步获取更新,能创建新笔记。但不能修改旧笔记(会出错)。

openwrt18.06

  • lighttpd, lighttpd-mod-auth, lighttpd-mod-webdav, (opkg install)

    • 支持ssl,webdav,props。应该对webdav支持完整。不过我没试过。

nginx 的 webdav 配置 (debian里的nginx对webdav支持还行,可用)

yum install nginx 或者 apt install nginx 。

在vhost的 server { ... } 中,加上以下一段。则在 http(s)://youdomain.doman/dav/ 中打开webdav。

  1. location ^~ /dav/ {
  2. dav_methods PUT DELETE MKCOL COPY MOVE;
  3. dav_ext_methods PROPFIND OPTIONS;
  4. # 上传文件的最大容量限制,0为不限制
  5. client_max_body_size 20M;
  6. create_full_put_path on;
  7. dav_access user:rw group:rw all:r;
  8. auth_basic "Authorized Users Only";
  9. auth_basic_user_file $document_root/dav/.htaccess.pw.basic ;
  10. satisfy any;
  11. }

.htaccess.pw.basic 用 htpasswd 命令创建。(yum install apache2-utils/apt install apache2-utils)

如果使用"易码",则手动建立存放笔记的目录,同时在这个目录中创建"assets"目录。

如果用其他支持webdav的云笔记,则自己去确定,云笔记需要创建什么目录。

因为页面认证用的是basic,所以不建议用http,不安全。建议用https (ssl)。 ssl 的配置自行上网搜索。

nginx 运行在非标准端口(比如http/8001,https/8443),webdav的功能不影响,也能工作。

lighttpd 的 webdav 配置

centos : yum install lighttpd (配置后有问题,放弃)

armbian : apt install lighttpd lighttpd-mod-webdav (最终发现bug,没再使用它)

lighttpd-enable-mod auth webdav

修改 /etc/lighttpd/lighttpd.conf

  1. server.document-root = "/var/www/lighttpd" # 设置web的根目录
  2. server.port = 88 # http 的端口,缺省为 80
  3. # lighttpd 的运行身份,一般不修改,就用缺省设置
  4. server.username = "www-data"
  5. server.groupname = "www-data"
  6. #添加以下段落
  7. $HTTP["url"] =~ "^/note($|/)" {
  8. webdav.activate = "enable"
  9. webdav.is-readonly = "disable"
  10. auth.backend = "plain"
  11. auth.backend.plain.userfile = "/etc/lighttpd/webdavuser"
  12. auth.require = ( "" => (
  13. "method" => "basic",
  14. "realm" => "Access DAV",
  15. "require" => "valid-user"
  16. ), )
  17. }

创建目录 mkdir -p /var/www/lighttpd/note

修改目录的owner chown www-data.www-data note,(www-data为lighttpd的运行身份)

创建账号文件 touch /etc/lighttpd/webdavuser

设置账号文件的权限 chown root.www-data webdavuser; chmod 640 webdavuser

webdavuser文件为纯文本文件,一行一个账号。用户名和密码之间用冒号隔开。

  1. test:123456
  2. user:password

systemctl restart lighttpd

设置完成,http://xxx.xxx.xxx:88/note/ 目录就开启了webdav。

让 webdav 运行在 ssl 上

因为页面认证用的是basic,所以不建议用http,不安全。建议用https (ssl)。

  • 方法一,配置 lighttpd 的 ssl 。自行上网搜索。
  • 方法二,nginx 配置好 ssl 的支持,然后用 nginx 做反向代理。

    在nginx的配置文件中的 server { ... } 中加入,
  1. location ^~ /note/ {
  2. allow all;
  3. proxy_set_header X-Real-IP $remote_addr;
  4. proxy_http_version 1.1;
  5. proxy_pass http://127.0.0.1:88/note/;
  6. }

注意,loction后的路径(note)要和proxy_pass中的路径相同。

  • 方法三,apache2 配置好 ssl 支持,apache2 也支持反向代理。请自行上网搜索。

最后,把ssl的web,443口在路由器上做个映射(需公网ipv4)。

如果80和443标准端口不能用,也可以把https映射到8443这种非标准端口。

或者在路由器上允许转发(ipv6)。路由器支持ipv6就行。宽带运营商都已经提供ipv6了。国内三大手机运营商的4G网都有ipv6支持。

再配置个动态域名。

就可以设置"易码"app,添加webdav服务器。开心的写你的云笔记。



其他搭建webdav的方法:

  • GO: parkomat

    • 很多 golang 依赖包难以下载。
    • 终于 build 成功。amd64的执行文件约9.7MB. 集成了DNS解析服务+web服务+webdav服务。
    • dns 解析配置简单,功能不错,可以用来负责解析一个域名(记录不多的话)。这样就不用装bind。
    • web,做个静态网站似乎也不错。
    • webdav,易码访问显示"400 Bad Request", parkomat 显示 "prop must not be empty"
  • C语言: WebDAV-Daemon 1.1

    • 配置比较麻烦
    • 在项目目录中make之后, 把build目录中的rap和webdavd两个文件,复制到 /root/webdavd目录中。
    • 把package-with/share复制到/root/webdavd目录中。
    • 把package-with/pam.conf复制为/etc/pam.d/webdavd
    • 写config.conf文件
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <server-config xmlns="http://couling.me/webdavd">
  3. <server>
  4. <listen>
  5. <port>83</port>
  6. <encryption>none</encryption>
  7. </listen>
  8. <chroot-path>/root/webdavd/data</chroot-path>
  9. <mime-file>/etc/mime.types</mime-file>
  10. <rap-binary>/root/webdavd/rap</rap-binary>
  11. <pam-service>webdavd</pam-service>
  12. <static-response-dir>/root/webdavd/share</static-response-dir>
  13. <error-log>/root/webdavd/error.log</error-log>
  14. <access-log>/root/webdavd/access.log</access-log>
  15. </server>
  16. </server-config>
  • 执行 ./webdavd config.conf &
  • 问题:
    • MKCOL 命令能成功创建目录,但返回内容似乎不标准,不被"易码"接受。
    • MOVE 命令执行失败。
    • 账号认证,缺省使用系统用户。如果要文件认证,则需要改pam文件,需要学习pam模块。
    • chroot-path只能指定为~绝对路径,不支持类似~/data的格式。
  • GO: Simple Go WebDAV server 3.0.0

    • 有binary包下载,直接就能用。有arm的包。
    • 不会配置。总是返回"400 Bad Request"
  • go-webdav 0.2.0

    • go build cmd/webdav-server/main.go 然后copy出来测试。
    • 没有认证机制,"易码" 返回 "Not valid DAV response"
  • webdavserver 1.0.3

    • go build 失败,好多依赖包下载不了。
    • 终于 build 成功。amd64的执行文件约 8MB.
    • 易码访问,显示"400 Bad Request"。
  • GO: The simple webdav server 0.3.0

    • 有amd64的binary包,没有arm64的。
    • 易码访问出错 "prop must not be empty"
  • phpEasyVCS

  • phpdav (对webdav支持好)

    • github上最后更新时间为 2019-5-13
    • 代码中无用户认证机制。如要用户认证,则需依赖nginx或apache的认证。所以也不支持多用户。
    • PUT,DELETE,MKCOL,MOVE,PROPFIND 支持OK。对"易码"支持很好。
    • 不知道 COPY,OPTION 支持如何,因为没用到。
    • 只需要sqlite3支持,不需要其他数据库。
    • 有一点小bug,不过不太影响。
      • PUT 指令时,Undefined index: Request-Body-File in /..xxx../handlers/Put.php on line 70
      • 作者只试过装在网站的 root。不过我费了好大劲才装到二级目录。
      • 项目的php文件放置的路径,不能包含下划线( _ )
      • 浏览器访问,当访问的路径末尾不带/时,页面左上角的"上级目录"会跳两层,链接不正确。
    • 安装配置:
      • 从github中把所有文件copy到本地目录。比如 /mydir/phpdav/ (这个路径中不能包含下划线)
      • 保留 conf/ handlers/ library/ logs/ models/ interface/, 其他的没有用,可删。
        • mkdir -p logs/phpdav/debug; #这个目录中会生成log文件,不知道有什么用。
        • chown apache.apache logs/phpdav/debug;
        • chown apache.apache library/db/sqlite;
        • mv interface/ mydav/; #下文以及配置文件中,所有的"mydav"必须一样
      • 安装nginx,php72-fpm,配置方法自己搜索。
        • php72 需要 php72-pdo, php72-sqlite3, php72-mbstring, php72-xml, 几个包。
      • 修改 conf/config.ini.php 中 $cloud_root='/mydir/dav-data'
        • mkdir -p /mydir/dav-data/mydav; chmod apache.apache /mydir/dav-data/mydav;
      • nginx的两个配置文件 phpdav.conf, php72-fpm.conf 如下。
      • include phpdav.conf; 写入 nginx.conf 中的 server {..} 内,location / {..} 之前,即可。
      • 这样就把 webdav 配置在 mydav 目录。通过访问 http://127.0.0.1/mydav/ 即可。
  1. # php72-fpm.conf
  2. location ~ \.php(?:$|\/) {
  3. fastcgi_pass 127.0.0.1:9000;
  4. include fastcgi_params;
  5. fastcgi_index index.php;
  6. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  7. fastcgi_param PATH_INFO $fastcgi_path_info if_not_empty;
  8. fastcgi_param SERVER_SOFTWARE phpdav-1.0;
  9. fastcgi_param REQUEST_ID $request_id;
  10. fastcgi_param REQUEST_BODY_FILE $request_body_file;
  11. }
  1. # phpdav.conf
  2. location ^~ /mydav {
  3. root /mydir/phpdav;
  4. index index.php;
  5. include php7-fpm.conf;
  6. rewrite ^/(.*)$ /mydav/index.php last;
  7. }

更多其他搭建webdav的方法:


搭建cardDAV calDAV 的方法


转载注明来源: 本文链接 来自osnosn的博客.

搭建私人的云笔记_使用webdav服务的更多相关文章

  1. 搭建私人通讯录/日历同步服务_使用cardDAV/calDAV服务

    搭建私人通讯录/日历同步服务_使用cardDAV/calDAV服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-02-18. Radicale, Radicale (对cardd ...

  2. 树莓派发射FM波——搭建私人小电台

    树莓派的应用十分广泛,有很多奇思妙想的应用非常有趣,在这里我们想实现一个小电台的功能,但是在这里需要说明,私人架设电台是违法行为,所以本案只作为自我娱乐所用,不能发射大功率的信号干扰正常的FM频段. ...

  3. 给小米路由R1D增加WebDAV服务

    我的R1D是14年买的,原装的硬盘已经不能用了,换了一块从笔记本上退役下来的500G硬盘后继续愉快的使用了-- 当初买这款路由器的原因之一是看中了它的内置硬盘,可以用来备份手机相册.存储智能摄像机录像 ...

  4. webDAV服务的开启以及客户端的上传、下载、删除、新建文件夾、列表的代码(C#)

    windows server 2003开启webDAV服务 1. 启动“IIS管理器”选择“WEB服务扩展”,选择“WEBDAV”的允许按钮启动WEBDAV功能 2.建立一个虚拟目录,对应到一个本地目 ...

  5. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

  6. WebDAV服务漏洞利用工具DAVTest

    WebDAV服务漏洞利用工具DAVTest   WebDAV是基于Web服务的扩展服务.它允许用户像操作本地文件一样,操作服务器上的文件.借助该功能,用户很方便的在网络上存储自己的文件.为了方便用户使 ...

  7. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.10.配置用户NTF服务

    2.10.配置用户NTF服务 2.10.1.配置节点RAC1 1) [root@linuxrac1 sysconfig]#sed -i 's/OPTIONS/#OPTIONS/g' /etc/sysc ...

  8. 讲解开源项目:5分钟搭建私人Java博客系统

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...

  9. 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务

    本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...

随机推荐

  1. [学习笔记] [数据分析] 01.Python入门

    1.安装Python与环境配置 ① ② 安装pip以及利用pip安装Python库 2.Anaconda安装 conda list 要在root环境下 3.常用数据分析库 ① Numpy 安装:con ...

  2. elastic search(es)安装

    全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Gi ...

  3. 《Windows内核安全与驱动开发》 3.2 内存与链表

    <Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发> 3.2 内存与链表 1. 尝试生成一个链表头并将其初始化. 2. 尝试向内存 ...

  4. 在modelarts上部署mask-rcnn模型

    最近老山完成了对mask-rcnn在modelarts上的部署,部署模型来自于这个项目.部署的过程大体和我的上篇文章使用modelarts部署bert命名实体识别模型相似,许多细节也不在赘述.这篇文章 ...

  5. MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...

  6. postman tests常用方法

    postman常用方法集合: 1.设置环境变量 postman.setEnvironmentVariable("key", "value"); pm.envir ...

  7. luogu P1850 换教室

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程安排在 n 个时间段上.在第 i (1 ≤ i ≤ n)个时间段上,两节内容 ...

  8. [TimLinux] JavaScript 模态框可拖动功能实现——节流版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. [TimLinux] CSS 纯CSS实现动画展开/收起功能

    内容转自CSS世界,理解之后进行了简化,简化后代码: <!DOCTYPE html> <html> <head> <meta charset=utf-8 /& ...

  10. Orleans的生产环境部署

    这一章非常简单 只要照着官方文档做就行了 文档地址 打好NUGET包后 Sql脚本是在项目下的OrleansAdoNetContent