关于joplin server 的搭建 及qnap QTS5 反向代理的一些研究
前言
最近终于将qnap更新到5.0了,对于我来说最有用的几个功能之一是增加了系统自带的反向代理功能
之前是使用docker配合nginx来实现,最近自己的域名到期了,续费感觉好贵
于是改用qnap自带的ddns,使用com域名还能自动续期letsencrypt的证书
对于我来说已经足够了,目前也没有更多地需求,于是就准备转向使用自带的反向代理
使用过程中遇到了一些坑,在此和大家讨论下
介绍下反向代理
qnap的反向代理使用起来比较简单,位置如图
qnap 反向代理位置
直接添加规则即可
如图就可以将访问本地的10010端口代理到10086端口,协议包装为https
这对于某些强制需要https的应用来说非常有用,比如bitwarden、joplin
你只需要在这一处添加证书,并且qnap会自动续期证书
同时你可以使用一些访问控制配置文件,来指定哪些ip能访问,有一定的安全性
简单使用的话其实就已经可以了,易用性也还不错,跟群晖的基本一致
但如果要有更进一步的配置就有点麻烦了 ,比如下面要说的joplin
遇到问题
这里先推荐下joplin,一个基于md的开源的笔记软件,还是比较好用的(就是有点丑 )
之前使用joplin都是搭配webdav使用,但webdav效率确实不怎么高,坚果云还有一堆限制
并且看网上说法还容易出现同步的bug?
最近去官网溜达发现joplin server已经出到2.x beta了,感觉应该没啥大的问题的,就琢磨着转向joplin server
按照官方的说法,比nextcloud和webdav更快速和高效
官方的速度比较
简单介绍一下基于docker的joplin server搭建
官方的介绍使用了env文件,但是在qnap上使用比较不方便,实际上env文件里只是配置了docker的一些环境参数而已,所以我还是决定直接创建(qnap也可以使用yaml),
根据官方建议,使用PostgresSQL 数据库存储(图简单可以使用sqlite,但我找了很久没找到db文件存储位置。。。不好备份,所以放弃了 ,并且数据量大了后PostgresSQL 更有优势)
qnap使用container station ,先拉取 postgres 官方镜像,注意从dockerhub拉取,qnap推荐版本低了点
拉取后创建
环境注意后面三个,分别是数据库名、密码、用户名,这三个后续会使用,
网络方面自行映射5432端口,
持久化方面自行映射本地文件夹至 /var/lib/postgresql/data
至此postgres创建完成,后续数据备份只需要备份数据库文件夹,我这边使用hybrid backup sync实时同步备份至ondriver,且定时冷备份到异地,数据还是比较有保障的
然后创建joplin server,使用 joplin/server 官方镜像,创建容器时注意配置环境
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,建议不改,若修改则反向代理处响应修改
之后启动即可,注意先启动数据库,然后启动joplin,否则joplin可能会报错
启动成功后可以使用本地访问ip:22300,出现下面可认为已启动
这里就出现了一个坑,之前无论怎么改都是这个invalid origin error
看报错可以大概知道是joplin会校验Origin,与APP_BASE_URL 不一致就会出现这个问题
官方解释也是如此
至于解决方法需要用到反向代理,并且方向代理需要一些配置传递原origin
实际上官方也给出了答案
nginx添加 proxy_set_header host $host;
apache添加 ProxyPreserveHost on
之前我是使用nginx转发的,贴一个我之前使用的ngixn配置
主要是将https 22301端口代理到22300端口
最终的访问路径为 https://xxx.myqnapcloud.com:22301,
这个路径必须与APP_BASE_URL 里填写完全一致!!!包括端口 (别问我为什么知道,试了好久)
至此就可以访问了, 使用默认的账户名 admin@localhost 和密码 admin 登录,然后修改账号和密码即可
登录进去就能看到一些统计,如图
客户端方面配置为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/下
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和自动更新证书还是比较香的
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
值友1812956188
校验提示文案
oengus
校验提示文案
bbki288
校验提示文案
wkyo
校验提示文案
BH4GLQ
校验提示文案
jhonbulls
校验提示文案
神龍
校验提示文案
宠虫
校验提示文案
callmedaddy
校验提示文案
留白待绘
校验提示文案
疯狂剁手的ultraman
校验提示文案
Ronanluo
校验提示文案
Ronanluo
校验提示文案
疯狂剁手的ultraman
校验提示文案
留白待绘
校验提示文案
wkyo
校验提示文案
callmedaddy
校验提示文案
bbki288
校验提示文案
宠虫
校验提示文案
神龍
校验提示文案
jhonbulls
校验提示文案
oengus
校验提示文案
值友1812956188
校验提示文案
BH4GLQ
校验提示文案