前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云笔记到底哪家强 -- 教你搭建自己的网盘服务器

云笔记到底哪家强 -- 教你搭建自己的网盘服务器

作者头像
用户3147702
发布2022-06-27 15:55:26
7.3K0
发布2022-06-27 15:55:26
举报
文章被收录于专栏:小脑斧科技博客

1. 云笔记的选择

总喜欢有事没事写些东西,无论是总结新的技术点,还是读书笔记与感悟,抑或仅仅是一些心得体会,于是,这些东西写在哪里就成了我面临的一个选择难题。

1.1 印象笔记

大学时代,主要使用百度博客记录文字,大三的时候由于实习有了移动记录的诉求,于是开始使用印象笔记。

印象笔记可以说是最为稳定的一款笔记软件了,也是我至今使用唯一没有遇到过什么 bug 的软件,功能也非常基础,但十分易用。

可是到了 2015 年,印象笔记突然宣布免费用户只能登录两个设备,于是忍痛割爱,只能放弃了,主要问题有三个:

  1. 我至少需要三个设备同步:办公电脑、家用电脑、手机
  2. 不支持 markdown
  3. 不支持 linux 系统

加上印象笔记当时频频传出的财务问题,随时担心因为公司倒闭发生一夜之间笔记全无的悲剧,于是放弃了继续使用印象笔记的打算。

1.2 有道云笔记

脱离印象笔记,马上开始寻找下一个好用的工具,于是找到了国内本地化做的很好的有道云笔记。

有道云笔记和其他许许多多国内互联网厂商一样,坚持走免费路线,但由于笔记这个领域过于小众,可以看出网易对于这个产品的投入力度也非常不足,虽然也有推出诸如学霸笔记、微信热门收藏这样亮眼的功能,但有一些 bug 却反复反馈始终未能改善,同时发版频率很低,也很担心某天如同网易相册一样被网易弃之如敝屐。

说到 bug,最让人抓狂的一件事就是在 ios 端,反复在几个 app 间切换几次,光标就会消失,在 windows 上偶尔也会遇到,电脑上光标消失至少可以用鼠标定位,而手机端一旦没有了光标,实在让人无从下手。

另一方面,有道云笔记对于 MacOS 的支持与 windows 系统中相差甚远,而对于 linux 操作系统,完全没有客户端可供使用,尽管有道云笔记、印象笔记都有网页端,并且网页端都拥有客户端的完整功能,但问题在于,受到网页端的带宽限制,即便是打开纯文本的笔记,也需要有几秒钟时间缓冲,严重影响使用体验,如果仅从网页版来看的话,百度云笔记要好用得多。

另一个问题在于,非付费用户只能每隔 3 个月全量导出一次,不论成功失败,我在使用中,多次进行导出,每次都遇到了导出过程中 app 崩溃,虽然导出失败了,但这三个月一次的机会已经一去不复返了,也许很多用户并不在乎导出功能,但事实上,这是一个笔记备份、文本处理等常用功能所依赖的十分重要的功能。

1.3 notion

现在全世界最为火热的云笔记非 notion 莫属了,功能强大且多端体验一致,他不仅是一个传统的云笔记,还同时实现了文档管理、待办事项,并且按块组织,开创了一种新的笔记管理形式。

但多端体验一致这个优势的深层原因在于这个工具是完全使用 html5 开发的,客户端只是在 h5 基础上套壳实现的。

这意味着,notion 是完全在线的云笔记,使用 notion 需要忍受境外服务器极不稳定的网络,甚至会因为国家屏蔽策略的变更导致 notion 无法使用,这在我看来是完全无法接受的。

当然,以我国软件开发团队的惯例,notion 在国外如此火热,势必很快会有本土化产品横空出世,到时候大概会成为云笔记市场中一个强有力的竞争者。

1.4 同步云盘 + 编辑器

如果只在电脑端使用笔记,那么,有一个同步云盘,加上一个好用的编辑器,vim、typora、emacs、vscode,无论哪个用起来都会感到得心应手,配合操作系统强大的 find、fzf、awk、grep、sed 等工具,文本查找、批量操作都会非常轻松。

但问题在于,现有的几款同步云,除了坚果云外,都不能在手机端编辑,坚果云近来的广告真是铺天盖地,markdown 笔记支持手机端编辑,但坚果云 markdown 不支持相对路径中的图片,这意味着想在笔记中添加图片是一件非常繁琐的事情。

同时,坚果云非付费用户有着每月 1GB 上传、3GB 下载的流量限制,一旦你对他的使用越来越多,作为网盘资料累计,你将面临不付费下载不下来的尴尬局面。

1.5 joplin

1.5.1 基础功能

最终博主选择了 joplin 作为我日常使用的笔记,joplin 是一款开源的笔记软件,支持 Winodows、Linux、MacOS、Android、IOS 全套操作系统,并且各个平台体验是一致的,这在笔记软件中是很难得的,更为难得的是,他还拥有命令行版本,joplin 是通过 nodejs 实现的,且代码组织得很不错,你可以按照自己的需要去修改他的源码,增添自己的功能,或者屏蔽一些报错。

joplin 只支持通过 markdown 来记录笔记,不过这已经足够了,他支持生成临时文件供外部编辑器进行编辑,这样,你就可以使用 Typora、vim 或是任何你喜欢的编辑器来编辑和查看笔记了。

joplin 对全量导出也没有任何限制,你可以随时全量导出,通过操作系统提供的工具进行批量操作,再全量导入,这是极为方便的一个功能了,你也可以通过设置定时任务定时进行导出备份,或者修改 js 代码,让每次同步后导出一份来实现笔记的随时备份。

对于软件的展示,joplin 支持你通过 css 自定义各种样式,提供了最大程度的灵活性。

1.5.2 joplin-cli

joplin 除了提供支持所有主流操作系统的桌面版客户端外,还为 linux、MacOS 提供了命令行版本。

通过 joplin help all 命令可以查看 joplin 支持的全部命令,这些命令可以让你非常方便的与操作系统提供的功能相组合,实现各种其他笔记所无法实现的功能。

直接执行 joplin 命令,你还可以打开一个终端模拟界面,你可以编辑 ~/.config/joplin/keymap.json 文件,设置这个终端模拟界面中的操作,例如我通过下面的配置实现了 vim 的操作习惯:

代码语言:javascript
复制
 [
     { "keys": ["TAB","l"], "type": "function", "command": "focus_next" },
     { "keys": ["SHIFT_TAB","h"], "type": "function", "command": "focus_previous" },
     { "keys": ["UP","k"], "type": "function", "command": "move_up" },
     { "keys": ["DOWN","j"], "type": "function", "command": "move_down" },
     { "keys": ["PAGE_UP","F","{"], "type": "function", "command": "page_up" },
     { "keys": ["PAGE_DOWN","B","}"], "type": "function", "command": "page_down" }
 ]

1.5.3 远程服务器

joplin 作为一款开源软件,并没有维护远程的笔记服务器,但他支持接入你自己的远程服务器,包括:

  1. onedrive
  2. Nextcloud
  3. WebDAV 服务器
  4. Dropbox
  5. 本地文件系统

Dropbox 在国内被屏蔽而无法使用,onedrive 同步速度很慢,国内除了坚果云外,所有的网盘都不支持 WebDAV 协议。

此时,你的目光又看到了坚果云,看来坚果云真是一家良心厂商,但是,问题又来了,这次不仅仅是免费用户,即使你是付费用户,WebDAV 服务也受到 30 分钟内最多 1500 次请求的限制,因此只要笔记一多,就总是会同步失败,这简直不可接受,所以并不推荐使用。

在试用 onedrive、坚果云做 joplin 的远程服务器并为之抓狂后,博主走上了自己搭建 WebDAV 服务器之路,这也是目前我认为体验最好、最为方便快捷的方式了,但前提是你需要一台自己的服务器,考虑到百度空间、网易相册、360 云盘等国内厂商一夜之间关停服务,为广大使用者带来深重灾难,任何一家国内互联网厂商都不值得信赖,唯有自建服务器多地备份才是保障数据安全的最佳途径。

2. 通过 nginx 搭建 WebDAV 服务器

2.1 WebDAV 协议

WebDAV 是一种基于 HTTP1.1 协议的通信协议,关于 HTTP 协议,可以参看:

详解 HTTP 协议

在 HTTP 协议的基础上,WebDAV 添加了 GET、POST、HEAD 等新的 HTTP 请求方法,让请求方可以实现直接在服务器上读写文件、资源管理的功能,同时,WebDAV 还支持了对文件版本控制、加锁与解锁等方法,让 web 服务器直接变身为一个拥有标准功能的网盘服务器。

2.2 基于 Nginx 配置 WebDAV 服务器

2.2.1 下载 nginx 源码

首先我们需要下载源码包并解压:

wget https://nginx.org/download/nginx-1.19.2.tar.gz tar -zxvf nginx-1.19.2.tar.gz && cd nginx-1.19.2/

2.2.2 下载 nginx dav 扩展

nginx 的源码中并不包含对 WebDAV 协议的支持,但 nginx 官方开发了开启 WebDAV 协议支持的模块,因此我们只需要下载并在 nginx 编译时引入该模块即可。

git clone https://github.com/arut/nginx-dav-ext-module.git

2.2.3 编译 nginx

下面是我使用的编译命令,你可以根据自己的需要酌情增删引入的模块,最重要的是其中的 --add-module=./nginx-dav-ext-module

./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module --add-module=./nginx-dav-ext-module make -j8 sudo cp objs/nginx /usr/sbin/nginx

2.2.4 生成加密文件

既然是网盘,自然不能随便访问,需要对用户权限进行限制,通过 apache 的 htpasswd,可以生成账户加密文件:

htpasswd -cb auth_file username password

2.2.5 nginx 配置

下面是 nginx 的配置:

代码语言:javascript
复制
 server {
     listen 1088;
 
     charset utf-8,gbk;
     location / {
         set $dest $http_destination;
         if (-d $request_filename) {
             rewrite ^(.*[^/])$ $1/;
             set $dest $dest/;
         }
 
         if ($request_method ~ MKCOL) {
             rewrite ^(.*[^/])$ $1/ break;
         }
         root /data/webdav;
         autoindex on;
         dav_methods PUT DELETE MKCOL COPY MOVE;
         dav_ext_methods PROPFIND OPTIONS;
         create_full_put_path on;
         client_max_body_size 0M;
         dav_access user:rw group:rw all:r;
         auth_basic "Authorized Users Only";
         auth_basic_user_file /etc/nginx/auth_file/webdav_auth_file;
     }
 }

当然,最好是能够配置支持 ssl 加密,从而防止被篡改,ssl 加密的配置方法参看:

手把手教你配置 https 站

这里我们使用了 1088 端口,并且将同步路径设置为了 /data/webdav,你可以根据自己的需要修改这些参数,不过需要记得将同步路径设置为开放权限:

chmod -R 777 /data/webdav

接下来,只要在 joplin 或者其他你想要实用的软件中配置用户名密码与服务地址即可。

如果你想要将你的 WebDAV 服务器直接作为网盘来使用,windows 系统中,你可以安装 RaiDrive 后进行一些配置就可以直接使用。

linux 系统中安装 davfs2 后,执行下面命令即可实现网盘挂载:

echo "use_locks 0" >> /etc/davfs2/davfs2.conf mkdir /mnt/drive1 mount -t davfs https://xx.com/dav/ /mnt/drive1

目前很多文件管理器已经支持了直接通过可视化配置实现 WebDAV 服务的挂载。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小脑斧科技博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 云笔记的选择
    • 1.1 印象笔记
      • 1.2 有道云笔记
        • 1.3 notion
          • 1.4 同步云盘 + 编辑器
            • 1.5 joplin
              • 1.5.1 基础功能
              • 1.5.2 joplin-cli
              • 1.5.3 远程服务器
          • 2. 通过 nginx 搭建 WebDAV 服务器
            • 2.1 WebDAV 协议
              • 2.2 基于 Nginx 配置 WebDAV 服务器
                • 2.2.1 下载 nginx 源码
                • 2.2.2 下载 nginx dav 扩展
                • 2.2.3 编译 nginx
                • 2.2.4 生成加密文件
                • 2.2.5 nginx 配置
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档