关于joplinserver的搭建及qnapQTS5反向代理的一些研究

作者:UC新闻震惊部

前言

最近终于将qnap更新到5.0了,对于我来说最有用的几个功能之一是增加了系统自带的反向代理功能

之前是使用docker配合nginx来实现,最近自己的域名到期了,续费感觉好贵 

于是改用qnap自带的ddns,使用com域名还能自动续期letsencrypt的证书 

对于我来说已经足够了,目前也没有更多地需求,于是就准备转向使用自带的反向代理

使用过程中遇到了一些坑,在此和大家讨论下

介绍下反向代理

qnap的反向代理使用起来比较简单,位置如图

广告财务代理记帐,省钱,省心,找专业代理!×

qnap 反向代理位置

   直接添加规则即可

广告如何选择和发展代理商?×

如图就可以将访问本地的10010端口代理到10086端口,协议包装为https

这对于某些强制需要https的应用来说非常有用,比如bitwarden、joplin

你只需要在这一处添加证书,并且qnap会自动续期证书 

同时你可以使用一些访问控制配置文件,来指定哪些ip能访问,有一定的安全性

广告国内有什么好的代理ip(http)提供商?×

简单使用的话其实就已经可以了,易用性也还不错,跟群晖的基本一致

但如果要有更进一步的配置就有点麻烦了 ,比如下面要说的joplin

遇到问题 

这里先推荐下joplin,一个基于md的开源的笔记软件,还是比较好用的(就是有点丑 )

之前使用joplin都是搭配webdav使用,但webdav效率确实不怎么高,坚果云还有一堆限制 

并且看网上说法还容易出现同步的bug?

最近去官网溜达发现joplin server已经出到2.x beta了,感觉应该没啥大的问题的,就琢磨着转向joplin server

按照官方的说法,比nextcloud和webdav更快速和高效

广告国内高匿免费http代理ip 快代理×

官方的速度比较

简单介绍一下基于docker的joplin server搭建

官方的介绍使用了env文件,但是在qnap上使用比较不方便,实际上env文件里只是配置了docker的一些环境参数而已,所以我还是决定直接创建(qnap也可以使用yaml),

根据官方建议,使用PostgresSQL 数据库存储(图简单可以使用sqlite,但我找了很久没找到db文件存储位置。。。不好备份,所以放弃了 ,并且数据量大了后PostgresSQL 更有优势)

qnap使用container station ,先拉取 postgres 官方镜像,注意从dockerhub拉取,qnap推荐版本低了点

广告2022研究生研招考试报名×

 拉取后创建

广告研究生信息网_研究生招生信息网×

环境注意后面三个,分别是数据库名、密码、用户名,这三个后续会使用,

网络方面自行映射5432端口,

广告代理招聘「猎聘」专业人才求职招聘平台×

持久化方面自行映射本地文件夹至 /var/lib/postgresql/data

广告慧聪网—代理商,专业靠谱的B2B网站×

至此postgres创建完成,后续数据备份只需要备份数据库文件夹,我这边使用hybrid backup sync实时同步备份至ondriver,且定时冷备份到异地,数据还是比较有保障的

然后创建joplin server,使用 joplin/server 官方镜像,创建容器时注意配置环境

广告找工作代理商-2022最新招聘信息/热招岗位×

APP_BASE_URL :后续访问joplin server使用的域名,需要https,需要完全一致

APP_PORT: 端口,默认23000

DB_CLIENT:pg 使用postgres数据库

POSTGRES_DATABASE:postgres数据库,同之前创建的数据库名

POSTGRES_HOST:数据库ip,同一机器使用本机ip即可

POSTGRES_PASSWORD:数据库密码,同之前设置

POSTGRES_PORT:数据库端口,同之前设置,默认5432

POSTGRES_USER:数据库用户名,同之前设置

端口映射22300,建议不改,若修改则反向代理处响应修改

广告800%爆率,无付费,12转神器靠打,10分钟200级!×

之后启动即可,注意先启动数据库,然后启动joplin,否则joplin可能会报错

启动成功后可以使用本地访问ip:22300,出现下面可认为已启动

广告女儿出差我与女婿相处,为女儿幸福,醉酒后我跟女婿敞开了心扉.×

这里就出现了一个坑,之前无论怎么改都是这个invalid origin error 

看报错可以大概知道是joplin会校验Origin,与APP_BASE_URL 不一致就会出现这个问题

官方解释也是如此

广告蜂蜜放了三年多,还能继续吃吗?幸亏及时听完专家的解释×

至于解决方法需要用到反向代理,并且方向代理需要一些配置传递原origin

实际上官方也给出了答案 

广告别再玩假传奇了!这款传奇爆率9.8,你找到充值入口算我输!×

nginx添加 proxy_set_header host $host;

apache添加 ProxyPreserveHost on

之前我是使用nginx转发的,贴一个我之前使用的ngixn配置

广告女儿出差丈母娘发烧了,浑身滚烫,女婿医生一双妙手,俩下退烧.×

主要是将https 22301端口代理到22300端口

最终的访问路径为 :22301,

这个路径必须与APP_BASE_URL 里填写完全一致!!!包括端口 (别问我为什么知道,试了好久)

至此就可以访问了, 使用默认的账户名 admin@localhost 和密码 admin 登录,然后修改账号和密码即可

登录进去就能看到一些统计,如图

广告别再玩假传奇了!这款传奇爆率9.8,你找到充值入口算我输!×

客户端方面配置为joplin server即可

广告天然“荷尔蒙”终于被发现,男人坚持吃,身体悄悄发生惊喜变化×

至此就可以正常使用了 

转向qnap自带反向代理遇到的问题

现在准备把ngxin转为qnap自带的代理

然后问题来了,配置22301到22300的反向代理后,报invalid origin error错误。。。。

解决方法倒是有,可是在qnap上怎么配置? 

首先得确定qnap使用的什么来反向代理 

经过一番查找(ps),可以知道使用的是apache来做的

位于/usr/local/apache/bin/apache

apache 的话需要添加  ProxyPreserveHost on 配置

然而在页面上查看了下根本没有更详细的配置。。。

页面上倒是有高级配置

广告师姐,我相亲失败了,师傅让我来找你!师姐瞪眼:滚,找你师妹去×

可是只能配置超时和自定义标头等信息

这下就麻烦了。。。离成功只差一步啊 

后来想了下能不能自己去编辑实际的apache 配置,当时感觉自己很机智 

于是掉入了一个坑中 

qnap的反向代理使用得比较少,网上资料太少了 

不过经过几天的努力,还是基本弄清了流程,这里分享给大家 

首先确定了是apache,就顺着apache去找配置,发现配置在/etc/config/apache/下

广告800%爆率,无付费,12转神器靠打,10分钟200级!×

extra 内基本就是自带的一些映射配置

一番查找并没有找到我们自定义的配置 

挨着查看了几天。。。眼睛都看花了也没找到。。。 

都准备放弃了时偶然发现在修改qnap的方向代理时会调用/etc/init.d/reverse_proxy.sh这个脚本 

终于看到点希望了,赶紧去看下这个脚本,内容折叠了下

广告华阳村民祖坟冒青烟,专家赶到后立刻让封锁,背后原因×

终于看到了熟悉的身影 

这里大概给大家理一下流程

当用户在页面上配置了反向代理规则后,qnap会将用户的规则保存到/etc/config/reverseproxy/reverseproxy.json 中

广告白内障怎么办?教你一个小妙招,简单又实用×

这是一个json格式的文件,内容如图

是不是很熟悉,就是将页面上的配置以json格式保存了下来

随后使用/etc/init.d/reverse_proxy.sh 这个脚本来解析json,

这些配置被解析生成为apche 配置,存放于/etc/reverseproxy/extra/下

根据配置会有多个,命名方式为1.conf 2.conf …

我们去看下这些配置

啊。。。。熟悉的apache配置 ,终于看到你了,并且端口也是我自定义的端口 

然后会调用

/usr/sbin/reverseproxy -k start -f/etc/reverseproxy/reverseproxy.conf 来启动用户自定义规则

/usr/sbin/reverseproxy 是快捷方式,实际指向/usr/local/apache/bin/apache

我们看下reverseproxy.conf最后一行

包含了/etc/reverseproxy/extra/下所有conf文件

至此就将我们的规则运行起来了

现在知道了流程,就需要考虑怎么来实现我们的需求了

我现在的需求是添加 ProxyPreserveHost On 这个配置

方法有两个,

一是修改reverse_proxy.sh这个脚本,在生成配置时就注入,不过这个需要改脚本,且页面上没有相应的配置界面,pass

二是直接修改生成好的配置,这个就比较简单了

去/etc/reverseproxy/extra/ 下看下,找到我们需啊哟修改的配置,添加即可,如图

这样就将配置加入进去了 

下面是如何让他生效呢?

经过测试,在页面关闭、启动这个条规则会删除原有规则并重新生成 

这就又绕回去了 。。。

经过查看sh脚本,发现是在start_proxy 时会删除原有配置,然后根据json解析生成新配置

我不想修改脚本,所以只能绕过,

经过查找,发现在reload_proxy这个方法不会触发删除,只会调用

/usr/sbin/reverseproxy -k graceful -f/etc/reverseproxy/reverseproxy.conf

重新加载配置

所以我们可以这样,在页面添加必要的参数后保存、启动

然后ssh到设备,添加修改我们需要的参数,执行

sudo /etc/init.d/reverse_proxy.sh reload

这样配置就加载成功了,测试使用正常 

总结

目前测试了下手动修改配置,在页面添加或删除规则不会触发删除原有规则

启动或停止会触发

nas重启也会触发

想要更完美得去改脚本了,不过我nas基本不关机重启,反向代理配置好后基本也不会去动它

所以目前就算是完成了,配合qnap自己的ddns和自动更新证书还是比较香的