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。端口即配置文件中配置的端口。

1a45ca5fd0dd46b87868b55acac8599f.png
所以代理配置中IP填172.17.0.1,端口填8885
050cd49b738acd57a6cdd8a91e2657b9.png
SSL配置中,配置https访问。这里需要注意,要打开HTTP/2 Support功能,否则Joplin Server会出现界面排版混乱,且无法登录的问题。
56042867744634050b5477f1e534b2e8.png

(三)启动和配置

输入指令docker-compose up -d启动容器,浏览器登录配置文件中填写的域名,即可进入如下界面:
83f97c5e4e9ec4741158ab1235ca2875.png
使用默认账户名/密码登录后台,将默认账户改为自己想要的。

  • 默认账户:admin@localhost
  • 默认密码:admin

Joplin Sever支持多个用户使用,在后台中添加多个账户就可以实现多人使用。
Joplin Sever只是一个管理数据的平台,配置好账户后,后续基本不会在访问。平时面对主要还是客户端。

(四)备份&恢复

由于是使用自建的同步服务器,所有也需要考虑数据的备份和恢复。Joplin Sever数据是存储在Postgres数据库的,所以备份和恢复只依赖Postgres数据库。

这里有两种备份方法,一种是备份宿主机上的data目录,一种是将数据库从容器中导出。第一种方法较为简单,所以只验证了第一种方法。

(1)备份宿主机中data目录

  • 备份
    在容器配置文件中,将数据映射到了宿主机上,即- ./data/postgres:/var/lib/postgresql/data;所以数据库数据均存储在data目录中,备份data目录,就是备份数据库数据。
    f314e797d46ea434cc88f3710f1105e5.png
  • 恢复
    恢复时,先将停止容器,将备份数据拷贝到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指令备份。
83980d5fa9c8c0f26bf15d69b545c93e.png

参考:
36b50aef603937d0a8404aab2799c83c.png

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”
bdfd6b1d14e911ea5e20303d779b22eb.png

docker-compose配置文件中,如果修改了数据库服务的名字,则POSTGRES_HOST也要改为一样的。
27aa16eab1c3b6c06eda0250c6c984c6.png

三、安装Joplin Client

这里只介绍Windows平台,其他平台配置基本相同。

(一)安装

在官网下载客户端:https://joplinapp.org/download/,直接安装即可。

(二)配置

安装完成后,首先启动客户端,设置同步配置。

打开客户端“工具->选项->同步”界面,配置一下信息:

  • 同步目标:选“Joplin Server(Bate)”
  • Joplin服务器URL: 填APP_BASE_URL中配置的域名
  • Joplin服务器邮箱:登录Server端的账户
  • Joplin服务器密码:对应账户的密码

配置完成后,点击检查同步配置,若无报错,则配置完成。
9b4bd2d338e128efe5825e080ab7a412.png

配置完成后,就可以记录笔记了。

四、相关资料

官方网站:https://joplinapp.org/
Docker系列 用Joplin系统地组织和记录笔记:https://blognas.hwb0307.com/other/5456

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息