搭建私⼈的云笔记_使⽤webdav服务
转载注明来源: 来⾃,写于 2019-10-10.
备注:
* ⽤debian-10或openwrt-19.07中预编译的nginx⾃带的webdav。
因为这个配置最简单的了。
MKCOL指令,需事先⼿动创建⼀下⽬录的问题。可以通过配置rewrite解决。
* 或者⽤openwrt-19中的lighttpd。
2020-11-15 更新.
⼿机上有很多云笔记app,⼤多⽀持云存储。可是把笔记放在别⼈的服务器上,总觉得不太安全。所以想把云笔记存在⾃⼰家。
有很多开源的云笔记,⽐如蚂蚁笔记(Leanote),nextcloud-note,
可是建⽴起来都⽐较⿇烦,当然功能也是很强的。
leanote是golang写的,要mango数据库⽀持。nextcloud-note需要安装nextcloud云盘系统,需要php+mysql⽀持。
⽹上搜了⼀下,
Android,有⼏款笔记⽀持webdav同步,⽐如"⼀本⽇记"(要付费),"可乐记"(免费),"易码"(免费)。
苹果,只到⼀款免费的。收费的就很多了。"Notebooks for iPhone"(免费), "Notebooks Write and Organize"(收费)
软件⾃⾏搜索。
所以尝试⾃⼰建个webdav服务器。
尝试
nextcloud ⽀持webdav协议。
买了台迷你pc(x86架构),装CentOS7,安装nginx,php-fpm,mariadb,然后装nextcloud,然后在nextcloud中装notepad插件。
⼿机端app:
nextcloud-note,挺好的,⽀持markdown。⽀持多层⽬录。但只⽀持配置⼀个服务器地址。或者说,app只⽀持⼀个账号。不能多账号共存。
nextcloud,云盘,也不错,⽀持⽂件,图⽚,通讯录同步。⽀持多账号共存。
nextcloud 的 webdav 对易码的⽀持也很好。
nextcloud 云盘的安卓版 APP 本⾝就可以备份⼿机通讯录(打包为⼀个⽂件,上传到云盘⽬录)
易码,⽀持markdown,⽀持多账号共存。(这个云笔记,我很推荐)
nextcloud 对⽀持很好。配置好账号后,通讯录,⽇历,个⼈提醒就都可以同步了。
⽤了⼀段时间,发现云盘我基本上没什么需求,为了⽤个云笔记,建了这么个⼤东西,感觉挺浪费。
看了看leanote
也挺复杂的,还要装mango数据库。放弃。
尝试只建个webdav服务
apache2,nginx,lighttpd 都⽀持webdav。
apache2 ⽐较臃肿,放弃。
所以只尝试 nginx 和 lighttpd 。
如果从源码安装,⽆论什么系统,⽆论 nginx 或 lighttpd 都能装好webdav服务。
以下是尝试使⽤系统的预编译包安装和配置。
CentOS7/8 上
从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。
CentOS7 , CentOS8 的预编译 nginx 都有 http_dav_module, 都缺失了 http_dav_ext。
从epel源装lighttpd,是1.4.54版,(yum install, centos7)
配置好后出错Sorry, no sqlite3 and libxml2 support include,发现编译时缺少--with-webdav-props参数。导致PROPFIND指令没有按要求返回XML内容,⽽是返回了0字节。
debian-10/Armbian
⼿上还有台斐讯N1盒⼦,刷了armbian。debian10(buster)版。
装nginx,1.14.2,(apt install nginx-full)
有http_dav_module 和 http_dav_ext 。
PUT,DELETE,MOVE,PROPFIND ⽀持OK。
不知道 COPY,OPTION ⽀持如何,因为没⽤到。
不过有bug,nginx要求MKCOL指令跟的⽬录名,必须以'/' 除号结尾。⽽易码app在创建⽬录时,⽬录名末尾不带除号。
MKCOL 的问题,可以通过配置 rewrite 解决。
所以,易码能⽤,只是要事先⼿动把⽬录创建好。易码保存和更新笔记,没问题。
⼿动mkdir mynote/ mynote/assets/每个⽬录中要有assets⽬录,易码⽤assets来存放附件。
最终可以完美⽀持易码。
x86/64 debian-10 的预编译 nginx-full,完全和 armbian 的 debian10 ⼀样。⽀持很好。
x86/64 debian-11 的预编译 nginx-full,完全和 armbian 的 debian11 ⼀样。⽀持很好。
装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)
好像是 1.4.53 的 bug, 1.4.54 就修复了。
所以,易码能同步获取更新,能创建新笔记。但不能修改旧笔记(会出错)。
openwrt-19.07
lighttpd-1.4.54 opkg install lighttpd lighttpd-mod-auth lighttpd-mod-authn_file lighttpd-mod-webdav
配置: document-root指向别的⽬录。其他配置参考本⽂后⾯的内容。
"易码"访问,能创建⽬录,创建新笔记,修改笔记,删除笔记。但不能同步获取笔记的更新,返回 "Not a valid DAV response"
原因是 PROPFIND "⽬录"(不带/结尾) 重定向到 "⽬录/" 的返回码是200 ⽽⾮ 301,易码不能识别。
配置中加⼊ rewrite 可以解决。
opkg install lighttpd-mod-rewrite,然后配置中加⼊write-if-not-file=( "^/dav/(.*)$" => "/dav/$1/" )
最终可以完美⽀持易码。
nginx-1.17.7 opkg install nginx-all-module (基础包nginx,没有webdav⽀持)
配置: root指向别的⽬录。其他配置参考本⽂后⾯的内容。
"易码"能⽤,只是要事先⼿动把⽬录创建好。MKCOL指令要求以'/'结尾,表现和 debian10 中的预编译 nginx ⼀样。
MKCOL 的问题,可以通过配置 rewrite 解决。
最终可以完美⽀持易码。
nginx 的 webdav 配置 (debian-10⾥的nginx-full对webdav⽀持很好)
centos7/8 : (缺少"http_dav_ext",导致PROPFIND不⽀持,放弃)
debian-10/armbian : nginx-full (⽀持很好)
openwrt-19 : nginx-all-module (⽀持很好)
yum install nginx 或者 apt install nginx 。
在vhost的 server { ... } 中,加上以下⼀段。则在http(s)://youdomain.doman/dav/中打开webdav。
location ^~ /dav/ {
if ($request_method = MKCOL) {
# 解决 MKCOL 需要以'/'结尾
rewrite  ^(.*[^/])$  $1/  break;
}
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的功能不影响,也能⼯作。
关于MKCOL需要以'/'结尾的问题
参考: , ,
if ($request_method = MKCOL) { rewrite ^(.*[^/])$ $1/ break; }
lighttpd 的 webdav 配置
配置⽂档:
centos7/8 : yum install lighttpd (缺少"--with-webdav-props",导致PROPFIND有问题,放弃)
debian-10/armbian : apt install lighttpd lighttpd-mod-webdav (MOVE指令有问题, 等升级到1.4.54再说, 暂时放弃)
openwrt-19 : lighttpd (⽀持很好)
启⽤两个module: lighttpd-enable-mod auth webdav
修改 /etc/f
server.document-root  = "/var/www/lighttpd"  # 设置web的根⽬录
server.port  = 88  # http 的端⼝,缺省为 80
# lighttpd 的运⾏⾝份,⼀般不修改,就⽤缺省设置
server.username    = "www-data"
#添加以下段落
$HTTP["url"] =~ "^/note($|/)" {
webdav.activate = "enable"
webdav.is-readonly = "disable"
webdav.sqlite-db-name = "/..../webdav.db"
auth.backend = "plain"
auth.backend.plain.userfile = "/etc/lighttpd/webdavuser"
"method"  => "basic",
"realm"  => "Access DAV",
"require" => "valid-user"
)
, )
# rewrite,是针对openwrt19.07中的重定向问题。debian-10 不⽤此项配置。
"^/dav/(.*)$" => "/dav/$1/"
)
}
创建⽬录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
设置完成,⽬录就开启了webdav。
让 webdav 运⾏在 ssl 上
因为页⾯认证⽤的是basic,所以不建议⽤http,不安全。建议⽤https (ssl)。
⽅法⼀,⽤ lighttpd 就配置 lighttpd 的 ssl。⽤ nginx 就配 nginx 的 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 127.0.0.1:88/note/;
}
注意,loction后的路径(note)要和proxy_pass中的路径相同。
⽅法三,lighttpd 配置好 ssl ⽀持,加上 mod_proxy ⽀持反向代理。请⾃⾏上⽹搜索。
⽅法四,apache2 配置好 ssl ⽀持,apache2 也⽀持反向代理。请⾃⾏上⽹搜索。
最后,把ssl的web,443⼝在路由器上做个映射(需公⽹ipv4)。
如果80和443标准端⼝不能⽤,也可以把https映射到8443这种⾮标准端⼝。
或者在路由器上允许转发(ipv6)。路由器⽀持ipv6就⾏。宽带运营商都已经提供ipv6了。国内三⼤⼿机运营商的4G⽹都有ipv6⽀持。再配置个动态域名。
就可以设置"易码"app,添加webdav服务器。开⼼的写你的云笔记。
其他搭建webdav的⽅法:
GO:
很多 golang 依赖包难以下载。
终于 build 成功。amd64的执⾏⽂件约9.7MB. 集成了DNS解析服务+web服务+webdav服务。
dns 解析配置简单,功能不错,可以⽤来负责解析⼀个域名(记录不多的话)。这样就不⽤ind。
web,做个静态⽹站似乎也不错。
webdav,易码访问显⽰"400 Bad Request", parkomat 显⽰ "prop must not be empty"
C语⾔: 1.1
配置⽐较⿇烦
在项⽬⽬录中make之后, 把build⽬录中的rap和webdavd两个⽂件,复制到 /root/webdavd⽬录中。
把package-with/share复制到/root/webdavd⽬录中。
把f复制为/etc/pam.d/webdavd
写f⽂件
<?xml version="1.0" encoding="utf-8" ?>
<server-config xmlns="/webdavd">
<server>
<listen>
<port>83</port>
<encryption>none</encryption>
</listen>
<chroot-path>/root/webdavd/data</chroot-path>
<mime-file>/pes</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>
执⾏./f &
问题:
MKCOL 命令能成功创建⽬录,但返回内容似乎不标准,不被"易码"接受。
MOVE 命令执⾏失败。
账号认证,缺省使⽤系统⽤户。如果要⽂件认证,则需要改pam⽂件,需要学习pam模块。
chroot-path只能指定为~或绝对路径,不⽀持类似~/data的格式。
GO: 3.0.0
有binary包下载,直接就能⽤。有arm的包。
不会配置。总是返回"400 Bad Request"
0.2.0
go build cmd/然后copy出来测试。
没有认证机制,"易码" 返回 "Not valid DAV response"
1.0.3
go build 失败,好多依赖包下载不了。
终于 build 成功。amd64的执⾏⽂件约 8MB.
易码访问,显⽰"400 Bad Request"。
GO: 0.3.0
有amd64的binary包,没有arm64的。
易码访问出错 "prop must not be empty"
⽤"易码"访问测试页⾯,失败。返回403错误。放弃。
(对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的两个配置⽂件 f, f 如下。
把f;写⼊ f 中的 server {..} 内,location / {..} 之前,即可。
这样就把 webdav 配置在 mydav ⽬录。通过访问127.0.0.1/mydav/即可。
# f
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;
}
# f
location ^~ /mydav {
root /mydir/phpdav;
php项目搭建index index.php;
f;
rewrite ^/(.*)$ /mydav/index.php last;
}
可道云 kodbox,v1.20 build:0528
我是使⽤esir的 openwrt-R21.6.1 中的可道云环境,(nginx-1.19,php-7.4,sqlite3)
按⽹上搜到的安装教程,去可道云官⽹,下载了个⼈免费版,进⾏安装。(2021-06-05装)
安装后,发现有bug,⽆法激活webdav插件。发现是 esir中的 luci-app-kodexplorer-13-1 包有问题。没有打开 php 的PATHINFO ⽀持。
修改 /etc/init.d/kodexplorer ⽂件,到try_files \$uri = 404;改为try_files \$fastcgi_script_name =404;即可。
然后去web配置页⾯,⽹络存储 -> 可道云,重新启⽤⼀次(即重启)。就可以正常启⽤可道云的webdav
插件了。
"易码"访问,能创建⽬录,创建新笔记,改名笔记,删除笔记,同步笔记更新。
修改笔记内容,返回 "Attempt to invoke virtual method 'long java.Time()' on a null object erference"
偶尔,同步刷新笔记时,也会出现上述错误。
⽀持不太好。
另,可道云的⼿机app,分 kodbox,和 kodexplorer 两款。为防⽌装错版本,导致⽆法登录。
建议登录⾃建的可道云后,点击个⼈头像,到App下载的链接,安装下载。就没问题了。
更多其他搭建webdav的⽅法:
GO: ,
caddy:
docker:
PHP: ;
PHP: ; ;
PY2:
搭建cardDAV calDAV 的⽅法
请看
转载注明来源: 来⾃.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。