前言

在筆記軟體盛行的時代,我們有許多記筆記的方式,大部分軟體會保存使用者的資料在伺服器上面。若是輕度使用不會有太大影響,但長期或重度的使用者會衍伸出一些問題:

  1. 資料沒有隱私:無法保障資料不會被其他人查看。
  2. 資料儲存格式不統一:軟體公司會使用自家的格式保存檔案,有可能會遇到用其他筆記軟體無法開啟或編輯。
  3. 軟體營運決策:開公司會想要賺錢,隨時都有可能被養套殺,會因大量筆記搬家很累而無奈繼續使用他們的軟體。

此系統優點是,同步快速穩定,圖片可以正常顯示,且圖片不是放在公開的網址上,也可以把 WebDAV 當作私人硬碟,隨時上傳任何檔案。一切的一切都由你主導控制。只需要維護系統就好。

本篇實現如標題所講的功能,可以在多平台查看和編輯 Markdown 筆記。主要原理是透過 WebDAV 的方式來同步,需要的軟體技術如下:

所需軟體:

部落格文章 Typora 介紹:Markdown 編輯器推薦:Typora + 開源插件使用心得

  • 手機端(iOS):1Writer,付費軟體。支援 Markdown 渲染及 WebDAV,推薦使用

  • 手機端(Android):Zettel Notes,免費軟體。支援 Markdown 渲染及 WebDAV,推薦使用

  • 個人網域 + SSL 認證:iOS 必要,連線需要 https

  • DockerDocker Compose:安裝 WebDAV、Nginx Proxy Manager

  • Rclone WebDAV:透過 Rclone 架設 WebDAV

  • Nginx Proxy Manager:實現反向代理

安裝 Docker、Docker Compose 請參考部落格這篇文章:快速上手 Docker 和 Docker Compose

如果要在內網使用 SSL 憑證請參考部落格這篇文章:如何在內網服務中使用 SSL 憑證

安裝 Nginx Proxy Manager

Nginx Proxy Manager 以下簡稱 NPM,可以更輕鬆設定反向代理,以及 SSL 認證。

mkdir -p docker/npm #在 docker 資料夾底下建立 npm 資料夾
cd docker/npm
nano docker-compose.yml

設定 NPM docker-compose.yml

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

設定 Port Forwarding

開啟 8081443

Set_Port_Forwarding

啟動 Nginx Proxy Manger

設定好 docker-compose.yml 和防火牆後,啟動 Docker。

docker compose up -d

同目錄會產生 dataletsencrypt 資料夾不要刪掉。

網址輸入:http://內網IP:81/ 進入 NPM 管理介面,輸入帳號 admin@example.com 和密碼 changeme 來修改日後登入帳密。

NPM_login

架設 Rclone WebDAV

安裝 Rclone

sudo -v ; curl https://rclone.org/install.sh | sudo bash

調整資料夾架構

關於資料夾選用,我的建議是 Docker 相關的腳本歸在一類,與自用的存筆記資料夾分開,避免誤刪。

示範將筆記資料存在 notes 資料夾。

home
├── dockers
│   ├── npm
│   └── rclone
└── notes

設定 WebDAV docker-compose.yml

cd .. #回到 Home 目錄
mkdir docker/rclone
cd docker/rclone
nano docker-compose.yml
version: '3'
services:
  webdav:
    image: rclone/rclone:latest
    restart: always
    command: ["serve", "webdav", "--addr", ":7000", "--user", "web_ac", "--pass", "web_pwd", "--read-only=false", "/home/note/"]
    ports:
      - "7000:7000"
    volumes:
      - /home/note:/home/note

command 中:

  • :7000:Port 號,如果 7000 使已用的話,請自行更改。

    注意:webdav 的 ports 冒號兩邊都要更改成一樣。

  • web_ac:WebDAV 登入帳號

  • web_pwd:WebDAV 登入密碼

  • /home/note/:筆記存放目錄,如果要修改的話 volumes 冒號兩邊都要修改成一樣。

啟動 Rclone WebDAV

設定好 docker-compose.yml 和規劃筆記資料夾後,啟動 Docker。

docker compose up -d

設定 WebDAV 網址

此步驟選用,如果要在 iOS 上使用 WebDAV,網址需要有 SSL 認證。

網域供應商新增 DNS

Cloudflare

確認使用者已加入 sudo 群組

sudo usermod -aG sudo user # 將 user 加入 sudo 群組
groups

NPM 新增反向代理、SSL 證書

登入 NPM,點選「ADD Proxy Host」。 注意:不要勾選 Cache AssetsBlock Common Exploits,否則無法正常運作。

Edit Proxy Host

SSL 設定

點選 Request a new SSL Certificate

SSL_Settings

開啟 Force SSL

Force_SSL

登入 WebDAV

以上設定好後,接下來在各個平台來驗證看看。

瀏覽器

連線 WebDAV 網址,可以帳號密碼登入就代表 WebDAV 架設成功。

WebDAV_Web

Windwos 網路磁碟機

檔案總管右鍵,新增網路位置,輸入帳號密碼。

WebDAV_Windows

Typora

剛安裝完 Typora 可以讓你試用 14 天,到期再選擇購買授權碼啟用。

開啟側邊欄(Ctrl+/),點下方按鈕選擇開啟資料夾 。

Typora

iOS

開啟 1Writer,點選 新增資料夾,選擇 WebDAV,輸入 WebDAV 網址以及帳號密碼。

iOS 的 WebDAV 網址要有 SSL 認證,若擔心公開至網路上,可以參考 這一篇文章 架設內網 SSL 憑證。

1Writer

Android

開啟 Zettel Notes 進入儲存庫管理介面,編輯儲存庫同步選擇 WebDAV。

Zettel_Notes

結語

以上是透過 WebDAV 實現多平台同步筆記內容,透過自架的方式我們可以掌握資料在手中。未來如果要換筆記軟體或儲存位置也可以無腦搬家。

除此之外定期備份也不能馬虎,Rclone 也提供上傳至雲端硬碟的功能。

參考連結

rclone serve webdav

快速上手 Docker 和 Docker Compose

如何在內網服務中使用 SSL 憑證