Joplin是一個開源(mianfei)筆記應用,支援 markdown 語法,橫跨 mac/ios 等各個平臺。通常 Joplin 有三種同步方式:
| 方式 | 優點 | 缺點 |
|---|---|---|
| Joplin官方雲 | 省心,穩定 | 資料不安全,要付錢 |
| 公網S3/網盤同步 | 省心,穩定 | 資料不安全,可能要付錢 |
| Joplin自建雲同步 | 資料相安全,成本較低 | 操作複雜 |
這裡就選擇了第三種看起來比較複雜的方式。藉助 docker,服務安裝門檻已經大大降低;cloudflare,則可以更加方便地進行網路埠對映。
0. 準備工作
- 一張 visa/mastercard 的信用卡,用於購買下面三種服務
- 一臺 linux 伺服器,可以是執行在自己家裡的 linux 伺服器,也可以是從雲服務廠商購買的雲主機
- 自己的域名,可以從常見域名服務商處購買(假定已買好了域名 example.com)
- cloudflare 域名解析和內網穿透服務
- 基本的 linux 操作
- terminal 的簡單使用
- copy & paste 技能
1. Joplin 用戶端的安裝
Joplin 支援 iOS/OSX 等平臺:
- 電腦端 https://joplinapp.org/download/
- iOS端,在 App Store 中搜尋 Joplin

2. 在伺服器上執行 Joplin Server
2.1 伺服器選擇
這裡需要一個linux伺服器,它可以是:
- 本地安裝linux的電腦
- Windows也可以,使用WSL:https://learn.microsoft.com/en-us/windows/wsl/install
- 雲端計算廠商(如amazon/google/azure)提供的雲伺服器
這裡推薦vultr提供的雲伺服器:
- 價格實惠,最低可以到$2.5 / 月
- 按時計費
- 支援支付寶/微信付款
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購買域名

要使用cloudflare的話,需要一個cloudflare的賬戶。註冊時候要用到visa或者mastercard的信用卡了。
3.2 cloudflare 解析域名
買好域名之後,還要做一個域名解析。其實就是在域名解析伺服器上登記一下。
啥是域名解析
解析的意思是说让域名和某个IP对应起来,实际上,整个互联网上机器的连接是用IP地址作为地址的,但是IP地址实在不好给出更多的便于人类记忆的意义,所以就需要域名解析这一过程,将IP地址和域名联系起来。比如我说我在这个地方,22.3193° N, 114.1694° E。嗯,你要用飞弹来打我,那肯定是足够了。但是单单这个经纬度实际上给不了太多的信息,如果我告诉你这是香港,你就会自然的到更多信息了。这里这个经纬度就是IP地址,而香港就是域名。显然,域名和IP的对应关系是可以更改的。比如说在晚清,香港被割让,就要英属香港;而1997年之后就叫香港特别行政区。
這裡可以看到cloudflare的計劃,0元計劃已經能夠滿足我們大部分需求。

需要到域名提供商上修改域名伺服器為cloudflare。修改完成之後,等一會解析就會生效了。
3.3 cloudflare zerotrust做內網穿透
用cloudflare還有一個好處就是白嫖它的內網穿透,用 cloudflare 的 zerotrust 做內網穿透,讓整個網際網路都能訪問到你的服務。這個免費的內網穿透服務,比市面上那些收費的內網穿透盒子什麼的不知道高到哪裡去了。
1 在控制台上找到 zerotrust 部分,或者直接點開這裡

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

3 新建tunnel

4 伺服器安裝用戶端
這裡選擇用 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 的網頁上新建一個內網穿透隧道:

6 填寫相關資訊

- 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。

此時還是預設賬戶名和密碼:
- 賬戶名:admin@localhost
- 密碼:admin
登陸後需要修改賬戶名和密碼!登陸後需要修改賬戶名和密碼!登陸後需要修改賬戶名和密碼!
4. 用戶端連線
4.1 mac 用戶端同步
在這裡下載用戶端進行安裝。
可以看到這裡有多種連線方式,這裡選擇 Joplin Server:
4.2 iOS 用戶端同步
開啟 Joplin 應用後,找到
,輸入:
- 同步目標 Joplin Server
- Joplin 主機 URL 在
.env中APP_BASE_URL的值 - Joplin 主機 email 一般是 admin@localhost
- Joplin 主機密碼 預設密碼是 admin,需要登陸後修改
設定完成之後,則可以點檢查同步設定,檢視設定結果。

這裡顯示同步設定成功了,以後開啟 Joplin 時候就會自動同步。
總結
本文介紹了用 docker-compose 自建 Joplin Server 的方式,實現了 mac 和 ios 上 Joplin 筆記的同步。為了能夠在公網訪問,則用 cloudflare 的 zerotrust 服務做了內網穿透,實現了外部資料同步。