Docker系列 基于Joplin+Joplin Server搭建私人云笔记
一、前言
随着工作积累,随手记录了很多笔记或者零散的知识点,这些笔记都没有进行系统的整理,所以最近想对这些笔记进行一个系统性的整理。
在之前较长一段时间里,都是使用有道云软件来记录笔记,但是从2023年6月份开始,有道云笔记开始限制免费用户同时登录的数量,同时软件的广告也较多,所以想换一款笔记软件。刚好最近在鼓捣服务器,所以想着是不是可以搭建一个私人的云笔记。
经过网上冲浪后,发现Joplin和obsidian都较为符合我的要求。最后选择了部署较为简单的Joplin。
Joplin是一个开源笔记应用,有Windows/macOS/Linux/iOS/Android/等版本的客户端,同时支持多端同步。其同步方式也有多种,例如OneDrive、Nextcloud、WebDav、Joplin Cloud,也可以使用自建Joplin Server作为同步服务器。
刚开始使用时,是用Nextcloud作为同步服务器,但是发现了一个问题:如果在Nextcloud上不小心编辑了Joplin同步上来的文件,即使没有修改,仅仅是进行了保存操作,就有可能因为文件冲突(修改时间冲突)而造成Joplin同步失败。所以改用官方提供的Joplin Server作为同步服务器。
二、安装Joplin Server
(一)配置文件
采用docker方式部署,首先准备docker-compose配置文件。如下所示:
version: '3'
services:
joplin-db:
image: postgres:16.0
container_name: joplin-db
restart: unless-stopped
volumes:
- ./data/postgres:/var/lib/postgresql/data
expose:
- "5432"
environment:
- POSTGRES_PASSWORD="Joplin"
- POSTGRES_USER=joplin
- POSTGRES_DB=joplin
joplin-app:
image: joplin/server:2.12.1-beta
container_name: joplin-app
restart: unless-stopped
ports:
- "8885:22300" # 根据自己情况修改
environment:
- APP_PORT=22300
- APP_BASE_URL=https://example.com # 填自己的域名
- DB_CLIENT=pg
- POSTGRES_PASSWORD="Joplin"
- POSTGRES_DATABASE=joplin
- POSTGRES_USER=joplin
- POSTGRES_PORT=5432
- POSTGRES_HOST=joplin-db
- TZ=Asia/Shanghai
depends_on:
- joplin-db
说明:
上述大部分配置都和官方示例相同,只有端口和域名需要修改。
- ports:访问服务的端口,按照自己的要求修改
- APP_BASE_URL:访问服务的域名,填写自己的域名。这里需要注意:要指定http或者https。没有域名的情况也使用ip+端口的方式访问。
官方参考配置:https://github.com/laurent22/joplin/blob/dev/docker-compose.server.yml
(二)nginx配置
我的服务器是使用Nginx Proxy Manager配置nginx的,所以直接登录Nginx Proxy Manager进行配置。如果是通过IP的方式直接访问的,可以直接跳过这个步骤。
在Nginx Proxy Manager中添加一条配置,将域名访问反向代理到docker的IP+端口。docker的IP可以通过ifconfig -a
查看,一般是172.17.0.1。端口即配置文件中配置的端口。
所以代理配置中IP填172.17.0.1,端口填8885
SSL配置中,配置https访问。这里需要注意,要打开HTTP/2 Support功能,否则Joplin Server会出现界面排版混乱,且无法登录的问题。
(三)启动和配置
输入指令docker-compose up -d
启动容器,浏览器登录配置文件中填写的域名,即可进入如下界面:
使用默认账户名/密码登录后台,将默认账户改为自己想要的。
- 默认账户:admin@localhost
- 默认密码:admin
Joplin Sever支持多个用户使用,在后台中添加多个账户就可以实现多人使用。
Joplin Sever只是一个管理数据的平台,配置好账户后,后续基本不会在访问。平时面对主要还是客户端。
(四)备份&恢复
由于是使用自建的同步服务器,所有也需要考虑数据的备份和恢复。Joplin Sever数据是存储在Postgres数据库的,所以备份和恢复只依赖Postgres数据库。
这里有两种备份方法,一种是备份宿主机上的data目录,一种是将数据库从容器中导出。第一种方法较为简单,所以只验证了第一种方法。
(1)备份宿主机中data目录
- 备份
在容器配置文件中,将数据映射到了宿主机上,即- ./data/postgres:/var/lib/postgresql/data
;所以数据库数据均存储在data目录中,备份data目录,就是备份数据库数据。
- 恢复
恢复时,先将停止容器,将备份数据拷贝到data目录,再重启拉起容器即可。
使用docker-compose down
停止并销毁容器,将备份恢复到data目录,在使用docker-compose up -d
启动容器,新创建的容器就是基于备份启动的。
(2)导出数据库数据(未验证)
在官方社区查询到的资料:
https://discourse.joplinapp.org/t/best-backup-method-server-or-client/17156/6
可以使用pg_dumpall指令备份。
参考:
docker exec postgres-db sh -c 'pg_dumpall -U joplin > /var/lib/postgresql/data/psql-backup/$(date +%Y-%m-%d)\ psql.backup.sql'
find /volume1/docker/joplin/joplin-data/psql-backup* -mtime +7 -exec rm {} \;
pg_dumpall指令说明:
http://www.postgres.cn/docs/9.4/app-pg-dumpall.html
(五)遇到的问题
(1)启动报错“db: Could not connect. Will try again. getaddrinfo EAI_AGAIN joplin-db”
docker-compose配置文件中,如果修改了数据库服务的名字,则POSTGRES_HOST也要改为一样的。
三、安装Joplin Client
这里只介绍Windows平台,其他平台配置基本相同。
(一)安装
在官网下载客户端:https://joplinapp.org/download/,直接安装即可。
(二)配置
安装完成后,首先启动客户端,设置同步配置。
打开客户端“工具->选项->同步”界面,配置一下信息:
- 同步目标:选“Joplin Server(Bate)”
- Joplin服务器URL: 填APP_BASE_URL中配置的域名
- Joplin服务器邮箱:登录Server端的账户
- Joplin服务器密码:对应账户的密码
配置完成后,点击检查同步配置,若无报错,则配置完成。
配置完成后,就可以记录笔记了。
四、相关资料
官方网站:https://joplinapp.org/
Docker系列 用Joplin系统地组织和记录笔记:https://blognas.hwb0307.com/other/5456