Z&Mzy&studio


图片展示

搭建私人云笔记应用,使用OpenWrt、群晖搭建私人云笔记Joplin-Server,以及数据的备份还原

产品详情

作者: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:在写这篇文章的过程中,又发现了一个功能更强大的云笔记软件,下一篇文章再介绍吧。

搭建私人云笔记应用,使用OpenWrt、群晖搭建私人云笔记Joplin-Server,以及数据的备份还原
长按识别二维码查看详情
长按图片保存/分享
暂无链接

Z&M网络优化工作室&5ol.cn

工作室地址:江苏省常州市新北区现代城

业务热线:180-1509-6618   合作邮箱:zm2studio@qq.com

 

任何问题可咨询

可以先试后洽谈



添加微信好友,详细了解产品
使用企业微信
“扫一扫”加入群聊
复制成功
添加微信好友,详细了解产品
我知道了
苏ICP备2021050027号