搭建私人的雲筆記_使用webdav服務

搭建私人的雲筆記_使用webdav服務

轉載註明來源: 本文連接 來自osnosn的博客,寫於 2019-10-10.php

手機上有不少雲筆記app,大多支持雲存儲。但是把筆記放在別人的服務器上,總以爲不太安全。因此想把雲筆記存在本身家。html

有不少開源的雲筆記,好比螞蟻筆記(Leanote),nextcloud-note,
但是創建起來都比較麻煩,固然功能也是很強的。
leanote是golang寫的,要mango數據庫支持。nextcloud-note須要安裝nextcloud雲盤系統,須要php+mysql支持。mysql

網上搜了一下,nginx

  • Android,有幾款筆記支持webdav同步,好比"一本日記"(要付費),"可樂記"(免費),"易碼"(免費)。
  • 蘋果,只找到一款免費的。收費的就不少了。"Notebooks for iPhone"(免費), "Notebooks Write and Organize"(收費)

因此嘗試本身建個webdav服務器。git

嘗試 NextCloud

nextcloud 支持webdav協議。
買了臺迷你pc(x86架構),裝CentOS7,安裝nginx,php-fpm,mariadb,而後裝nextcloud,而後在nextcloud中裝notepad插件。
手機端app:github

  • nextcloud-note,挺好的,支持markdown。支持多層目錄。但只支持配置一個服務器地址。或者說,app只支持一個帳號。不能多帳號共存。
  • nextcloud,雲盤,也不錯,支持文件,圖片,通信錄同步。支持多帳號共存。
  • nextcloud 的 webdav 對易碼的支持也很好
  • nextcloud 雲盤的安卓版 APP 自己就能夠備份手機通信錄(打包爲一個文件,上傳到雲盤目錄)
  • 易碼,支持markdown,支持多帳號共存。(這個雲筆記,我很推薦)
  • nextcloud 對 DAVdroid(DAVx5)2.6.3 支持很好。配置好帳號後,通信錄,日曆,我的提醒 就均可以同步了。

用了一段時間,發現雲盤我基本上沒什麼需求,爲了用個雲筆記,建了這麼個大東西,感受挺浪費。golang

看了看leanote

也挺複雜的,還要裝mango數據庫。放棄。web


嘗試只建個webdav服務

apache2,nginx,lighttpd 都支持webdav。
apache2 比較臃腫,放棄。
因此只嘗試 nginx 和 lighttpd 。
若是從源碼安裝,不管什麼系統,不管 nginx 或 lighttpd 都能裝好webdav服務。
如下是嘗試使用系統的預編譯包安裝和配置。sql

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)版。docker

  • 裝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的博客.

相關文章
相關標籤/搜索