作者:o0Mirage0o
前期回顾:
前言
各位安好!
前几篇文章介绍了如何在我们的All in one主机中安装软路由OpenWrt、Nas群晖、以及智能家居控制中心HomeAssistant,到这里几个基础的服务已经安装完毕,当然,我自己的主机里面还有一些别的虚拟机,比如:Linux、x心云之类的,就不再介绍了,安装方法基本类似,无非就是添加虚拟机、安装系统之类的操作。
后面的文章将倾向于一些应用服务搭建的介绍。
本篇,分享一个比较实用的笔记应用—Joplin
对于我个人而言,我是比较喜欢做笔记的,很多工作方面的事情需要记下来,并且手机端、电脑端经常切换使用,以前电脑里东一个TXT、西一个Doc,到处都找不到。。。
后来也尝试过其他云笔记软件,很多功能都得付费,并且自己的资料还需要存在别人的服务器,空间大小也得付费,而且说不定哪天就没了。。。
这款开源的云笔记软件就没有这些烦恼,虽然功能比起商业软件要弱一些,但也完全够用,况且自己有了All in one主机,将资料存在自己的服务器里面,心里有底!
Joplin&JoplinServer介绍
Joplin
Joplin 是一个优秀的开源笔记应用,拥有丰富的功能。你可以记笔记、记录待办事项并且通过多种方式保存到云端来实现跨设备同步笔记。同步过程通过端到端加密保护。以下是我整理的几项比较实用的功能:
-
将笔记保存到笔记本和子笔记本中,以便更好地组织
-
创建待办事项清单
-
可以标记和搜索笔记
-
离线优先,因此即使没有互联网连接,所有数据始终在设备上可用
-
Markdown 笔记支持图片、数学符号和复选框、支持附件
-
PC端、移动端多端可用
-
除了Nextcloud、Dropbox、WebDAV 和 OneDrive 等各种云服务同步之外,还能自己搭建云存储服务
-
如果有公网IP,可以将自己的笔记分享成网页的形式给朋友、同时查看
-
······ 还有很多功能,不一一列举了
JoplinServer
JoplinServer就是本篇文章我们需要搭建服务,主要作用是:将我们写的笔记数据存储,然后同步到其他设备,实现多端、多设备的数据同步。
有IPv6或者公网IPv4,我们在外面也能连接家中的JoplinServer进行同步。
安装方式
JoplinServer支持物理安装、也支持Docker安装,官方较为推荐Docker形式,那我们也这么办。
本文将详细的介绍安装步骤、以及每一步操作的含义,咱们除了要学会安装,还需要懂得后期如何维护,毕竟这些数据是辛辛苦苦一字一字码出来的笔记记录,不像电影,丢了还能重新下载。
废话不扯了,下面正式进入正题:
安装位置:当然是安装在不关机的设备里面!如果出门在外,设备关机了,那还用个啥?
不关机的设备、并且设备中支持Docker的,有:OpenWrt、群晖、Homeassistant
而HomeAssistant的Docker中已经跑了官方的好几个容器,并且经常升级,所以就不考虑。
还剩OpenWrt和群晖,如果各位小伙伴的群辉是长时间不关机的,那我推荐安装到群晖里面!
而我家的环境呢,群晖Nas在不使用的时候是关机状态的,因此我就要把JoplinServer安装在OpenWrt里面了,那么找一个或者自己编译一个带Docker的OpenWrt固件就是必要的,这里我就不详细说了,各位自行准备。
下面将开始分别介绍如何在OpenWrt以及群晖的Docker里搭建JoplinServer,各位小伙伴可以根据需要选择适合自己步骤参阅。
并且为了保证安装准确性,一律使用命令行的形式进行操作。(命令行其实不难,各位只需要根据我给出命令,修改一下粘贴就好了,不要心慌。)
OpenWrt中安装JoplinServer
这里介绍OpenWrt软路由中安装JoplinServer,如果是群辉安装的小伙伴可以跳过。
OpenWrt准备工作
1、前面说了,你的OpenWrt固件需要支持Docker,如果没有的请自行安装。
2、磁盘扩容:检查一下你OpenWrt固件的磁盘容量,安装需要至少2G空间,后续随着存储数据的增加,所需空间也越来越多,如果磁盘容量不够的小伙伴,可以参考我另一篇文章,对磁盘进行扩容:
通过SSH连接OpenWrt
运行命令:
ssh root@192.168.66.1
命令说明:通过SSH连接OpenWrt
# root 代表OpenWrt的登录用户名,请改成你的
# 192.168.66.1 代表OpenWrt的后台地址,请改成你的
出现 Are you sure you want to continue connecting (yes/no/[fingerprint])? 提示的时候,输入yes,并按回车
然后输入密码,输入密码的时候不显示字符,盲打,完成后按回车
注意:如果报错,说明你windows系统的CMD不支持ssh命令,可以自己下载一个SSH客户端软件,如:xshell(家庭/学校免费,可在官网申请)、Putty(免费开源)、FinalShell(部分收费)等。
安装postgres数据库
运行命令:
mkdir -p /opt/local/postgres/data
命令说明:建立postgres挂载目录
运行命令:
docker run –name postgres –privileged=true –network=host -e TZ=”Asia/Shanghai” -e POSTGRES_DB=joplin_server -e POSTGRES_USER=joplin -e POSTGRES_PASSWORD=Password -v /opt/local/postgres/data:/var/lib/postgresql/data –restart=unless-stopped -itd postgres:15
命令说明:上面命令将创建并运行Mysql容器,具体说明如下(!!!注意加粗部分,需要自行修改!!!):
–name postgres # 设置容器名称
–privileged=true # 使用高权限运行当前容器
–network=host # 使用docker的Host网络,与宿主机在同一网段
-e TZ=”Asia/Shanghai” # 设置时区
-e POSTGRES_DB=joplin_server # 创建容器后创建一个数据库joplin_server(如果修改,需要与后面JoplinServer容器的配置一致)
-e POSTGRES_USER=joplin # 创建容器后创建一个数据库用户joplin(如果修改,需要与后面JoplinServer容器的配置一致)
-e POSTGRES_PASSWORD=Password # 新创建的数据库用户的密码(如果修改,需要与后面JoplinServer容器的配置一致)
-v /opt/local/postgres/data:/var/lib/postgresql/data # 将数据库文件挂载到刚刚创建的/opt/local/postgres/data目录
–restart=unless-stopped # 处于 Stopped (Exited) 状态的容器,不会在 Docker daemon 重启的时候被重启
-itd mysql:5.7.41 # itd:代表容器启动参数照抄好了,这里不详细说了。 postgres:15:数据库的镜像名称以及版本
安装JoplinServer
运行命令:
docker run –name joplin_server –privileged=true –network=host -e TZ=”Asia/Shanghai” -e APP_BASE_URL=注意这里的设置,请看下方的命令说明 -e DB_CLIENT=pg -e POSTGRES_HOST=192.168.66.1 -e POSTGRES_PORT=5432 -e POSTGRES_DATABASE=joplin_server -e POSTGRES_USER=joplin -e POSTGRES_PASSWORD=Password –restart=unless-stopped -itd joplin/server:latest
↑ 命令说明:创建并启动JoplinServer容器,具体说明如下(!!!注意加粗部分,需要自行修改!!!):
–name joplin_server # 容器名称
–privileged=true # 高权限执行容器
–network=host # 使用Host网络,与宿主机相同网段
-e TZ=”Asia/Shanghai” # 设置时区
-e APP_BASE_URL=http://192.168.66.1:184 # 注意:JoplinServer运行的地址,如果是域名请填写域名,如果是IP则填写IP,如果在非80端口运行也必须带上端口号。容器运行后,如果不是通过这个地址访问的话,是无法使用的
-e DB_CLIENT=pg # 指定使用哪个数据库Client
-e POSTGRES_HOST=192.168.66.1# 注意:这个是数据库的IP地址,我们在数据库容器中使用了host模式,所以填写OpenWrt的地址即可
-e POSTGRES_PORT=5432 # 数据库运行的端口
-e POSTGRES_DATABASE=joplin_server # 数据库名称,这就是刚刚我们配置数据库的时候,创建的数据库的名称
-e POSTGRES_USER=joplin # 数据库用户名称,这就是刚刚我们配置数据库的时候,创建的用户名称
-e POSTGRES_PASSWORD=Password # 数据库用户密码,这就是刚刚我们配置数据库的时候,创建的用户密码
–restart=unless-stopped # 处于 Stopped (Exited) 状态的容器,不会在 Docker daemon 重启的时候被重启
-itd joplin/server:latest # itd:代表容器启动参数照抄好了,这里不详细说了。 joplin/server:latest:镜像名称以及版本
到此,OpenWrt中安装JoplinServer完成,后面还有食用方法以及注意事项,请各位往后翻。
群晖中安装JoplinServer
准备及连接SSH
这里介绍 群晖中安装JoplinServer,如果是OpenWrt安装的小伙伴可以跳过。
群晖开启SSH
群晖中创建docker容器挂载目录
将刚刚新建的二级文件夹的完整路径复制出来,后面要用到,比如我的:
-
postgres_db:
-
data:/volume2/docker/postgres_db/data
-
通过SSH连接群晖
运行命令:
ssh mirage@192.168.66.3
命令说明:通过SSH连接群晖
# mirage 是群辉管理后台的登录用户名,请改成你的
# 192.168.66.3 代表群晖的后台地址,请改成你的
出现 Are you sure you want to continue connecting (yes/no/[fingerprint])? 提示的时候,输入yes,并按回车
然后输入密码,输入密码的时候不显示字符,盲打,完成后按回车
连接群晖后运行命令:sudo -i
然后输入密码并按回车,即可切换成root用户
注意:如果报错,说明你windows系统的CMD不支持ssh命令,可以自己下载一个SSH客户端软件,如:xshell(家庭/学校免费,可在官网申请)、Putty(免费开源)、FinalShell(部分收费)等。
编辑Docker-Compose配置文件
电脑上新建一个文本文件,将以下内容复制粘贴进去:
version: “3”
services:
postgres_db: # 数据库
image: postgres:15
container_name: postgres_db
ports:
– “15432:5432” # 将数据库5432端口映射到宿主机的15432端口
volumes:
– /volume2/docker/postgres_db/data:/var/lib/postgresql/data # 将数据库文件映射到群晖中刚刚我们创建的/volume2/docker/postgres_db/data目录(请改成你的)
restart: unless-stopped
environment:
– TZ=Asia/Shanghai
– POSTGRES_DB=joplin_server # 数据库名称
– POSTGRES_USER=joplin # 数据库用户名称
– POSTGRES_PASSWORD=joplinPwd # 数据库用户密码
joplin_server: # joplin_server
image: joplin/server:latest
container_name: joplin_server
depends_on:
– postgres_db
ports:
– “22300:22300” # 将JoplinServer的22300端口映射到宿主机的22300端口(冒号左侧为宿主机端口,右侧为容器内部端口)
environment:
– TZ=Asia/Shanghai
# =================
# 全局配置
# =================
– APP_NAME=Joplin-Server # app名称
– APP_PORT=22300 # 运行端口(如果这里修改了,在上面的ports里面也要修改)
# =================
# URL配置
# =================
– APP_BASE_URL=http://home-server.123456.cn:189 # JoplinServer运行的地址,如果是域名请填写域名,如果是IP则填写IP,如果在非80端口运行也必须带上端口号,http或者https也需要加上。容器运行后,如果不是通过这个地址访问的话,是无法使用的
# =================
# 数据库配置
# =================
– DB_CLIENT=pg
– POSTGRES_DATABASE=joplin_server # 数据库密码,需要与上面的 POSTGRES_DB 一致
– POSTGRES_USER=joplin # 数据库用户名,需要与上面的 POSTGRES_USER 一致
– POSTGRES_PASSWORD=joplinPwd # 数据库用户密码,需要与上面的 POSTGRES_PASSWORD 一致
– POSTGRES_PORT=5432 # 数据库运行端口
– POSTGRES_HOST=postgres_db # 数据库运行IP地址
上面的配置内容请各位根据自身情况,按需修改
完成后保存,并将文件改名为:joplin-server-compose.yml
将文件上传到群晖:
运行命令:
docker-compose -f /volume2/docker/postgres_db/joplin-server-compose.yml up -d
命令说明:通过docker-compose安装容器。 注意:加粗部分的路径请填写上面步骤复制的路径
到这里,已完成群晖中安装部署JoplinServer。
访问测试
浏览器访问刚刚配置中 APP_BASE_URL 填写的地址:
初始账号:admin@localhost
初始密码:admin
注意事项
配置JoplinServer的时候,一定要注意 APP_BASE_URL 这个配置项,应该填写JoplinServer的最终访问地址。
举个栗子:
-
OpenWrt地址:192.168.66.1
-
群辉地址:192.168.66.3
-
JoplinServer端口号:22300
-
如果在内网使用,并且在OpenWrt中安装的,就填写:http://OpenWrt地址+JoplinServer端口号
-
如果在内网使用,并且在群辉安装的,就填写:http://群辉地址+JoplinServer端口号
想在公网使用,需要有公网IPv6,或者公网IPv4,然后通过ddns将公网ip绑定到域名,然后在OpenWrt中配置端口转发以达到目的,比如我的:
我将JoplinServer安装在OpenWrt软路由中,安装完成后JoplinServer在内网的地址就应该为:http://192.168.66.1:22300
然后,我通过ddns将我的公网IP绑定到域名后,访问:http://xxxx.cn 就能访问到我的OpenWrt软路由。
请求到达软路由以后,我再通过软路由的端口转发:将入站184端口的数据转发给22300端口,因此,我JoplinServer最终的访问地址就是:http://xxxx.cn:184
这么说大家应该能明白吧。
OpenWrt开启IPv6,并实现外网访问家中设备,可以参考我另一篇文章:
配置Joplin客户端同步
在官网中下载并安装客户端,Joplin官网:https://joplinapp.org/
数据备份以及更新
更新OpenWrt
如果JoplinServer安装在OpenWrt软路由内,软路由固件会经常更新,为了保证更新后笔记数据不丢失,可以如下操作:
每次更新OpenWrt固件前,系统—备份/升级—动作—生成备份
更新固件后,上传备份恢复一下。
更新JoplinServer
这个随意,可以直接删掉JoplinServer容器以及镜像,重新拉取并启动就好。
更新数据库
不建议更新数据库,但如果非要更新的话,需要查看是小版本还是大版本更新。
如果小版本更新,直接删掉postgres容器以及镜像,重新拉取并启动就好,因为数据库文件已经映射到容器外面,重新拉取容器并不影响数据。
如果大版本更新,建议使用如下操作:
1、备份数据库:
docker exec -it postgres /usr/bin/pg_dump -U joplin joplin_server > joplin_server-bak.sql
↑ 命令说明: 在容器中执行备份数据库,并将备份文件保存到宿主机
# postgres:容器名称
# joplin:数据库用户名
# joplin_server:需要备份的数据库名称
# joplin_server-bak.sql:备份保存的文件名
2、删掉postgres容器以及镜像、删掉宿主机中数据库挂载目录,重新拉取镜像并启动容器
4、还原备份
docker cp joplin_server-bak.sql postgres:joplin_server-bak.sql
↑ 命令说明: 将备份文件从宿主机拷贝到容器中
# joplin_server-bak.sql:需要拷贝的文件名
# postgres:容器名称
# joplin_server-bak.sql:拷贝后保存的文件名
docker exec -it postgres psql -U joplin joplin_server -f joplin_server-bak.sql
↑ 命令说明: 在容器中执行数据库恢复操作
# postgres:容器名称
# joplin:数据库用户名
# joplin_server:需要恢复的数据库名称
# joplin_server-bak.sql:备份文件名
总结
洋洋洒洒写了几千字,再加几十张图片,总算把想介绍的写完了,但可能还是有没表达清楚的地方,如果有疑问的小伙伴可以留言。
PS:在写这篇文章的过程中,又发现了一个功能更强大的云笔记软件,下一篇文章再介绍吧。
原文链接:https://t.cj.sina.com.cn/articles/view/1823348853/6cae1875020018jxl