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

其它說明:

到剛才儲存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安装命令 ```bash 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 服務做了內網穿透,實現了外部資料同步。