本地配置Joplin Server用于Joplin笔记同步

在本地安装配置Joplin Server,供Joplin笔记在不同设备之间进行同步。用cloudflare做内网穿透,让这个服务能够被公网访问。 Modified: 2023-07-04 20:24:23 Created: 2023-02-11 11:41:41 Tags: #joplin #linux #docker #cloudflare

Joplin是一个开源(mianfei)笔记应用,支持 markdown 语法,横跨 mac/ios 等各个平台。通常 Joplin 有三种同步方式:

方式 优点 缺点
Joplin官方云 省心,稳定 数据不安全,要付钱
公网S3/网盘同步 省心,稳定 数据不安全,可能要付钱
Joplin自建云同步 数据相安全,成本较低 操作复杂

这里就选择了第三种看起来比较复杂的方式。借助 docker,服务安装门槛已经大大降低;cloudflare,则可以更加方便地进行网络端口映射。

0. 准备工作

  1. 一张 visa/mastercard 的信用卡,用于购买下面三种服务
    1. 一台 linux 服务器,可以是运行在自己家里的 linux 服务器,也可以是从云服务厂商购买的云主机
    2. 自己的域名,可以从常见域名服务商处购买(假定已买好了域名 example.com)
    3. cloudflare 域名解析和内网穿透服务
  2. 基本的 linux 操作
    1. terminal 的简单使用
    2. copy & paste 技能

1. Joplin 客户端的安装

Joplin 支持 iOS/OSX 等平台:

2. 在服务器上运行 Joplin Server

2.1 服务器选择

这里需要一个linux服务器,它可以是:

  1. 本地安装linux的电脑
  2. Windows也可以,使用WSL:https://learn.microsoft.com/en-us/windows/wsl/install
  3. 云计算厂商(如amazon/google/azure)提供的云服务器

这里推荐vultr提供的云服务器:

  1. 价格实惠,最低可以到$2.5 / 月
  2. 按时计费
  3. 支持支付宝/微信付款

2.2 docker-compose 运行Joplin Server

Joplin Server的安装配置比较麻烦,这里使用 docker-compose 来简化安装配置过程。可以参考docker 安装教程来安装docker-compose。用docker-compose来运行Joplin Server服务,对应的 docker-compose.yaml 配置文件如下:

version: "3"

services:
  database:
    image: postgres:13.1
    container_name: postgres_joplin
    volumes:
      - ./postgres:/var/lib/postgresql/data
    ports:
      - "$POSTGRES_PORT:$POSTGRES_PORT"
    restart: unless-stopped
    environment:
      - POSTGRES_PASSWORD=$POSTGRES_PASSWORD
      - POSTGRES_USER=$POSTGRES_USER
      - POSTGRES_DB=$POSTGRES_DATABASE
  joplin:
    image: joplin/server:latest
    container_name: joplin
    depends_on:
      - database
    ports:
      - "$APP_PORT:$APP_PORT"
    restart: unless-stopped
    environment:
      - APP_BASE_URL=$APP_BASE_URL
      - APP_PORT=$APP_PORT
      - DB_CLIENT=$DB_CLIENT
      - POSTGRES_PASSWORD=$POSTGRES_PASSWORD
      - POSTGRES_DATABASE=$POSTGRES_DATABASE
      - POSTGRES_USER=$POSTGRES_USER
      - POSTGRES_PORT=$POSTGRES_PORT
      - POSTGRES_HOST=$POSTGRES_HOST

docker-compose.yaml文件中有一些外部环境变量,如$POSTGRES_PORT等,它们的值来自于docker-compose.yaml同目录下的.env文件。

POSTGRES_PASSWORD=joplin
POSTGRES_USER=joplin
POSTGRES_DATABASE=joplin
POSTGRES_PORT=5432
POSTGRES_HOST=database
APP_PORT=8087
APP_BASE_URL=https://joplin.example.com
DB_CLIENT=pg

其它说明:

  • postgres一定要选择 13.1 版本的,用 latest 可能会导致无法登录。
  • APP_BASE_URL应该配置为https://joplin.example.com,它是你最终外网访问的地址。

到刚才保存docker-compose.yml的文件夹,运行:

docker-compose up # 直接运行,会打印log,退出terminal就会停掉
docker-compose up -d # 后台运行,不打印log,退出terminal后继续运行
docker-compose down # 关闭Joplin Server和postgres服务

3. 外网访问配置

前面通过 docker-compose 运行了 Joplin Server 服务。但并不能直接配置客户端进行同步,因为网络还没有配置好,客户端找不到Joplin Server连接的入口。这里还需要将 Joplin Server 同步服务暴露到公网。

3.1 域名购买

域名是我们访问互联网的入口,它能够帮我们方便定位服务器的“位置”。我们的Joplin Server也需要域名作为入口。更简单的理解是,我们的手机、电脑得在互联网上找到我们自建的Joplin Server的地址,此时就需要域名作为互联网上的门牌号了。

域名可以在 namecheap 或者 cloudflare 上购买。

cloudflare_register

要使用cloudflare的话,需要一个cloudflare的账户。注册时候要用到visa或者mastercard的信用卡了。

3.2 cloudflare 解析域名

买好域名之后,还要做一个域名解析。其实就是在域名解析服务器上登记一下。

啥是域名解析 解析的意思是说让域名和某个IP对应起来,实际上,整个互联网上机器的连接是用IP地址作为地址的,但是IP地址实在不好给出更多的便于人类记忆的意义,所以就需要域名解析这一过程,将IP地址和域名联系起来。 比如我说我在这个地方,22.3193° N, 114.1694° E。嗯,你要用飞弹来打我,那肯定是足够了。但是单单这个经纬度实际上给不了太多的信息,如果我告诉你这是香港,你就会自然的到更多信息了。这里这个经纬度就是IP地址,而香港就是域名。显然,域名和IP的对应关系是可以更改的。比如说在晚清,香港被割让,就要英属香港;而1997年之后就叫香港特别行政区。

这里可以看到cloudflare的计划,0元计划已经能够满足我们大部分需求。

cloudflare_plan

需要到域名提供商上修改域名服务器为cloudflare。修改完成之后,等一会解析就会生效了。

3.3 cloudflare zerotrust做内网穿透

用cloudflare还有一个好处就是白嫖它的内网穿透,用 cloudflare 的 zerotrust 做内网穿透,让整个互联网都能访问到你的服务。这个免费的内网穿透服务,比市面上那些收费的内网穿透盒子什么的不知道高到哪里去了。

1 在控制台上找到 zerotrust 部分,或者直接点开这里

zer_trust

2 找到Access -> Tunnels --> Create a tunnel

create_a_tunnel

3 新建tunnel new_tunnel

4 服务器安装客户端

docker_install_cloudflare 这里选择用 docker 的方式进行安装。直接拷贝上面命令:

cloudflare客户端docker安装命令
docker run \
        --name cloudflare \
        --restart always \
        -d \
        cloudflare/cloudflared:latest \
        tunnel \
        --no-autoupdate run \
        --token xxxxxx # copy from the cloudflare website

5 在 cloudflare 的网页上新建一个内网穿透隧道:

add_host

6 填写相关信息

host_details

  • subdomain: joplin
  • domain: example.com # 通过下拉菜单选取
  • service: http # 选择http(而非其它)服务
  • url: 10.10.10.11:8087 # 前面的ip是客户端宿主机IP,后面是8087是端口,参考docker-compose.yaml中APP_PORT的值

2.4 服务端账户密码修改

服务器端、内网穿透配置已经全部完成,在浏览器中访问: https://joplin.example.com。

这里的joplin就是前面的subdomain,example.com就是domain。

login

此时还是默认账户名和密码:

  • 账户名:admin@localhost
  • 密码:admin

登陆后需要修改账户名和密码!登陆后需要修改账户名和密码!登陆后需要修改账户名和密码!

4. 客户端连接

4.1 mac 客户端同步

这里下载客户端进行安装。

可以看到这里有多种连接方式,这里选择 Joplin Server:

4.2 iOS 客户端同步

打开 Joplin 应用后,找到

ios_app_sync,输入:

  • 同步目标 Joplin Server
  • Joplin 主机 URL 在.envAPP_BASE_URL的值
  • Joplin 主机 email 一般是 admin@localhost
  • Joplin 主机密码 默认密码是 admin,需要登陆后修改

配置完成之后,则可以点检查同步设定,查看配置结果。 ios_sync_success

这里显示同步配置成功了,以后打开 Joplin 时候就会自动同步。

总结

本文介绍了用 docker-compose 自建 Joplin Server 的方式,实现了 mac 和 ios 上 Joplin 笔记的同步。为了能够在公网访问,则用 cloudflare 的 zerotrust 服务做了内网穿透,实现了外部数据同步。