Joplin 记录

折腾
55 0

本地+外网 md 笔记记录、同步、保存、加密软件 Joplin

应该支持全平台,直接上 Joplin。

整体要求:
linux + nginx + webdav + 手机 + 电脑

在原有 Nginx 基础上进行 nginx 二次编译。


依赖

apt install libxml2 libxml2-devel libxslt-devel apache2-utils

拉取模块

cd /mnt/usb/lnmp/
git clone https://github.com/arut/nginx-dav-ext-module.git
git clone https://github.com/openresty/headers-more-nginx-module.git

编译新 nginx

./configure --prefix=/usr/local/nginx \
--user=www \
--group=www \
--error-log-path=/usr/local/nginx/logs/error_nginx.log \
--http-log-path=/usr/local/nginx/logs/access_nginx.log \
--with-openssl=../openssl \
--with-pcre=../pcre \
--with-pcre-jit \
--with-zlib=../zlib \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_perl_module \
--with-stream \
--with-stream_ssl_module \
--with-http_dav_module \
--add-module=../nginx-dav-ext-module \
--add-module=../headers-more-nginx-module

目录准备

mkdir -pv /tmp/webdav/
mkdir -pv /mnt/usb/wwwroot/webdav/
chown www:www /mnt/usb/wwwroot/webdav/
chmod 700 /mnt/usb/wwwroot/webdav/

账号/密码

htpasswd -bc /usr/local/nginx/.htpasswd leeyr leeyr

# https://tool.oschina.net/htpasswd

授权

chown www:www /usr/local/nginx/.htpasswd
chmod 600 /usr/local/nginx/.htpasswd

vhost_nginx.conf

server {

  listen 83;
  server_name webdav;
  #access_log  off;

  # 虚拟个 webdav 目录
  location /webdav {
    # 软连接到实际目录
    alias /mnt/usb/wwwroot/webdav/;
    charset utf-8;
    
    # http 访问时列出目录
    autoindex on;
    # 显示时间为文件的服务器时间
    autoindex_localtime on;
    # 显示文件大小 单位 kB MB GB
    autoindex_exact_size off;

    # 认证
    auth_basic    realm_name;
    auth_basic_user_file /usr/local/nginx/.htpasswd;
    
    # Nginx 自带方法
    dav_methods PUT DELETE MKCOL COPY MOVE;
    
    # nginx ext 自带方法
    dav_ext_methods PROPFIND OPTIONS;
    
    # 新建文件/夹 权限,预设 user:rw。若指定 all 及 group 权限, 则 user 可忽略
    dav_access user:rw group:rw all:r;

    # 临时中转目录
    client_body_temp_path   /tmp/webdav/;
    # 上传档案最大限制, 0 为不限制
    client_max_body_size 0;
    # 在现有目录中如果指定的文件夹不存在, 自动创建
    #create_full_put_path on;
    
    # 仅限内网设备访问
    limit_except GET {
        allow 192.168.2.0/24;
        deny  all;
    }
    
    # 处理某些 WebDAV 客户端增删改问题
    # 
    # 
    set $dest $http_destination;
    if (-d $request_filename) {
      rewrite ^(.*[^/])$ $1/;
      set $dest $dest/;
    }
    if ($request_method ~ (MOVE|COPY)) {
        more_set_input_headers 'Destination: $dest';
    }
    if ($request_method ~ MKCOL) {
      rewrite ^(.*[^/])$ $1/ break;
    }
  }
}

重启 nginx

service nginx restart

打开地址输入密码即代表成功。
http://192.168.2.100:83/webdav

外网

  • 内网穿透。
  • 外服搭建 WebDav,单向同步到本地某文件夹备份,这只是安全的第一道险。

笔记工具

  • typora 支持 Windows、Mac、Linux,仅编辑器
  • marktext 支持 Windows、Mac、Linux,仅编辑器
  • liandi 支持 Windows、Mac、Linux,仅编辑器
  • PandaNote,支持 iOS,可同步
  • joplin,全平台,可同步


文件工具

其它

webdav支持方法

PROPFIND 和 GET
PROPFIND 是查找资源的信息,并不包括资源的内容。而 GET 方法是直接返回资源的具体内容。在 PROPFIND 中,你可以指定返回资源的哪些属性信息,也可以返回资源的所有属性信息(allprop)。

PROPPATCH
对资源的某个或者某些属性进行操作,这个操作可以是增加,删除,修改等。

MKCOL
就是创建 Collection,Collection 的意思就是文件夹,它对应一个 URI 路径。这个命令创建的 Collection 如果事先存在,或者前置的路径不存在,都会报错。

POST
POST 方法的实际作用在 Webdav 的协议中没有做强制定义,一般都是由具体的应用场景的 Server 进行定义的。

DELETE
DELETE 就是删除操作,它可以删除资源,也可以删除一个 Collection。但是删除资源的时候,要求被删除的资源不能有锁。
如果是删除一个 Collection,要求这个 Collection。

LOCK 和 UNLOCK
对一个已经存在的资源加锁或者解锁操作。

COPY
COPY 复制一个文件到目标文件夹,目标文件夹必须存在

PUT
PUT 是用来更新服务器上的一个文件的,它不能作用于文件夹。

解决一些错误日志

# 路径
~/nginx-1.17.9/src/http/modules/ngx_http_dav_module.c

# 注释掉 line 637~

/*
if ((r->uri.data[r->uri.len - 1] == '/' && *(last - 1) != '/')
    || (r->uri.data[r->uri.len - 1] != '/' && *(last - 1) == '/'))
{
    ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
                  "both URI \"%V\" and \"Destination\" URI \"%V\" "
                  "should be either collections or non-collections",
                  &r->uri, &dest->value);
    return NGX_HTTP_CONFLICT;
}
*/

解决报错:PROPFIND : Unknown error 2 (403): <html> <head><title>403 Forbidden</title>

server {
    limit_except GET {
        allow 10.1.1.0/24;    <== 局域网 IP
        deny  all;
    }
}
更新 2020-02-10
评论 ( 0 )
私信
pic
code
pre