搭建私人的云笔记_使用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。

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

.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

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

创建目录 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文件为纯文本文件,一行一个账号。用户名和密码之间用冒号隔开。

test:123456
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 { ... } 中加入,
location ^~ /note/ {
allow all;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:88/note/;
}

注意,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文件
<?xml version="1.0" encoding="utf-8" ?>
<server-config xmlns="http://couling.me/webdavd">
<server>
<listen>
<port>83</port>
<encryption>none</encryption>
</listen>
<chroot-path>/root/webdavd/data</chroot-path>
<mime-file>/etc/mime.types</mime-file>
<rap-binary>/root/webdavd/rap</rap-binary>
<pam-service>webdavd</pam-service>
<static-response-dir>/root/webdavd/share</static-response-dir>
<error-log>/root/webdavd/error.log</error-log>
<access-log>/root/webdavd/access.log</access-log>
</server>
</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/ 即可。
# php72-fpm.conf
location ~ \.php(?:$|\/) {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info if_not_empty;
fastcgi_param SERVER_SOFTWARE phpdav-1.0;
fastcgi_param REQUEST_ID $request_id;
fastcgi_param REQUEST_BODY_FILE $request_body_file;
}
# phpdav.conf
location ^~ /mydav {
root /mydir/phpdav;
index index.php;
include php7-fpm.conf;
rewrite ^/(.*)$ /mydav/index.php last;
}

更多其他搭建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. 部署高可用 schduler

    目录 创建 kube-scheduler 证书和私钥 创建和分发 kubeconfig 文件 创建 kube-scheduler 配置文件 创建kube-scheduler启动文件 启动kube-sc ...

  2. CentOS 7 ETCD集群配置大全

    目录 前言 环境准备 安装 静态集群 配置 node01 配置文件 node02 配置文件 node03 配置文件 启动测试 查看集群状态 生成TLS证书 etcd证书创建 安装cfssl工具集 生成 ...

  3. Xtrabackup 介绍

    目录 概念 备份方式 xtrabackup 特点 通信方式 备份过程 扩展理解 xtrabackup 如何实现增量备份 概念 Xtrabackup是由Percona开发的一个开源软件,可实现对Inno ...

  4. DJango模型Meta选项详解

    Django模型之Meta选项详解 MEAT选项 Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当 ...

  5. 【SSL1457】翻币问题

    题面: \[\Large\text{翻币问题}\] \[Time~Limit:1000MS~~Memory~Limit:65536K\] Description 有N个硬币(6<=N<=2 ...

  6. 使用Feign访问接口

     添加主要依赖 使用Feign访问接口的配置,如果服务不在Eureka上,可以不加Eureka的依赖,用在FeignClient上指定url的方式访问 dependencies { compile(' ...

  7. Scrapy+eChart自动爬取生成网络安全词云

    因为工作的原因,近期笔者开始持续关注一些安全咨询网站,一来是多了解业界安全咨询提升自身安全知识,二来也是需要从各类安全网站上收集漏洞情报. 作为安全情报领域的新手,面对大量的安全咨询,多少还是会感觉无 ...

  8. iOS10 openURL方法跳转到设置界面

    问题 在iOS10之前,跳转到系统设置界面的某个指定界面的方式如下: //打开定位服务界面 NSURL*url=[NSURL URLWithString:@"prefs:root=Priva ...

  9. 第3节:Java基础 - 必知必会(上)

    第3节:Java基础 - 必知必会(上) 本篇是基础篇的第一小节,我们从最基础的java知识点开始学习.本节涉及的知识点包括面向对象的三大特征:封装,继承和多态,并且对常见且容易混淆的重要概念覆盖和重 ...

  10. 深入探索Java设计模式之单例模式

    单例模式可确保在给定的时间实例中只能创建一个具有全局访问点的对象.这是面向对象编程中最常用的技术之一.尽管它很简单,但从类设计的角度来看可能是最简单的,但是在尝试实现它们之前,必须先解决一些细微的问题 ...