搭建私人的云笔记_使用webdav服务
转载注明来源: 本文链接 来自osnosn的博客,写于 2019-10-10.
手机上有很多云笔记app,大多支持云存储。可是把笔记放在别人的服务器上,总觉得不太安全。所以想把云笔记存在自己家。
有很多开源的云笔记,比如蚂蚁笔记(Leanote),nextcloud-note,
可是建立起来都比较麻烦,当然功能也是很强的。
leanote是golang写的,要mango数据库支持。nextcloud-note需要安装nextcloud云盘系统,需要php+mysql支持。
网上搜了一下,Android有几款笔记支持webdav同步,比如"一本日记"(要付费),"可乐记"(免费),"易码"(免费)。
所以尝试自己建个webdav服务器。
尝试nextcloud
nextcloud 支持webdav协议。
买了台迷你pc(x86架构),装CentOS7,安装nginx,php-fpm,mariadb,然后装nextcloud,然后在nextcloud中装notepad插件。
手机端app:
- nextcloud-note,挺好的,支持markdown。支持多层目录。但只支持配置一个服务器地址。或者说,app只支持一个账号。不能多账号共存。
- nextcloud,云盘,也不错,支持文件,图片,通讯录同步。支持多账号共存。
- 易码,支持markdown,支持多账号共存。(这个云笔记,我很推荐)
用了一段时间,发现云盘我基本上没什么需求,为了用个云笔记,建了这么个大东西,感觉挺浪费。
看了看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 。
- 不过有bug,nginx要求MKCOL指令跟的目录名,必须以'/' 除号结尾。而易码app在创建目录时,目录名末尾不带除号。
- 所以,易码能用,只是要事先手动把目录创建好。易码保存和更新笔记,没问题。
- 装lighttpd,1.4.53,(apt install)
- webdav支持挺好,没发现什么问题。
nginx 的 webdav 配置
yum install nginx 或者 apt install nginx 。
在vhost的 server { ... } 中,加上以下一段。则在 http(s)://youdomain.doman/dav/ 中打开wendav。
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;
}
因为页面认证用的是basic,所以不建议用http,不安全。建议用https (ssl)。 ssl 的配置自行上网搜索。
lighttpd 的 webdav 配置
centos : yum install lighttpd (配置后有问题,放弃)
armbian : apt install lighttpd lighttpd-mod-webdavlighttpd-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/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 也支持反向代理。请自行上网搜索。