Skip to content

Commit b50fa56

Browse files
authored
Merge pull request #36 from jay16213/blog-post
add new posts: rclone-pcloud-backup
2 parents 4b514df + 4cfc364 commit b50fa56

4 files changed

Lines changed: 288 additions & 1 deletion

File tree

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
uses: peaceiris/actions-hugo@v3
2828
with:
2929
# The Hugo version to download (if necessary) and use. Example: 0.58.2
30-
hugo-version: 'latest' # optional, default is latest
30+
hugo-version: '0.124.1' # optional, default is latest
3131
# Download (if necessary) and use Hugo extended version. Example: true
3232
extended: true # optional, default is false
3333

23.6 KB
Loading
47 KB
Loading
Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
---
2+
title: "在 Synology NAS 上用 rclone + pCloud 建立加密雲端備份"
3+
summary: "使用 Docker 版 rclone 將 Synology NAS 的資料端對端加密後備份到 pCloud,包含配置、headless 授權、排程與驗證建議。"
4+
tags: ["rclone", "pcloud", "synology", "backup", "docker"]
5+
categories: []
6+
date: 2025-11-22T10:00:00+08:00
7+
lastmod: 2025-11-22T10:00:00+08:00
8+
draft: false
9+
10+
# toha params
11+
menu:
12+
sidebar:
13+
name: 在 Synology NAS 上用 rclone + pCloud 建立加密雲端備份
14+
identifier: rclone-pcloud-backup
15+
parent:
16+
weight: 20
17+
---
18+
19+
## 前言
20+
本文說明如何在 Synology NAS 上使用 `rclone` 這套工具,搭配 pCloud 這個雲端來做到雲端方案的端對端加密備份,讓資料的保障更上一層樓
21+
22+
## 安裝 rclone
23+
這邊以 macOS 為例, 透過 `brew` 安裝 rclone
24+
```sh
25+
brew install rclone
26+
```
27+
28+
Synology NAS 的部分,本文會使用 docker 來執行 rclone, 因此無須在 Synolog 的 host 上面安裝 rclone
29+
30+
## 設定 rclone remote for pCloud
31+
32+
這個步驟是為了讓 rclone 取得存取 pCloud 的權限
33+
34+
ssh 進 Synology, 透過 docker 執行 rclone config
35+
```sh
36+
docker run --rm -it --volume /volume1/docker/rclone/config:/config/rclone --user $(id -u):$(id -g) rclone/rclone config
37+
```
38+
39+
這邊請透過 volume 選項將 rclone 的 `rclone.conf` 設定檔放到你想放的 NAS 位置,如果沒加 volume 的話 `rclone.conf` 會放在 container 內,這樣就沒辦法保存設定給後面的備份設定使用,例如這邊的範例是我將 config 檔保存在 `/volume1/docker/rclone/config` 中,這樣一來在後面的 rclone 備份指令中就可以沿用這個步驟設定完成的 `rclone.conf`
40+
41+
42+
進到 rclone 的互動式介面後,選擇 New remote,接著按照系統提示一步一步設定 pcloud remote (storage type 選擇 42 代表要加入 pcloud)
43+
44+
```
45+
42 / Pcloud
46+
\ (pcloud)
47+
```
48+
49+
範例設定如下 (client_id, client_secret 留空即可)
50+
```
51+
Storage> 42
52+
53+
Option client_id.
54+
OAuth Client Id.
55+
Leave blank normally.
56+
Enter a value. Press Enter to leave empty.
57+
client_id>
58+
59+
Option client_secret.
60+
OAuth Client Secret.
61+
Leave blank normally.
62+
Enter a value. Press Enter to leave empty.
63+
client_secret>
64+
65+
Edit advanced config?
66+
y) Yes
67+
n) No (default)
68+
y/n> n
69+
70+
Use web browser to automatically authenticate rclone with remote?
71+
* Say Y if the machine running rclone has a web browser you can use
72+
* Say N if running rclone on a (remote) machine without web browser access
73+
If not sure try Y. If Y failed, try N.
74+
75+
y) Yes (default)
76+
n) No
77+
y/n> N
78+
79+
Option config_token.
80+
For this to work, you will need rclone available on a machine that has
81+
a web browser available.
82+
For more help and alternate methods see: https://rclone.org/remote_setup/
83+
Execute the following on the machine with the web browser (same rclone
84+
version recommended):
85+
rclone authorize "pcloud"
86+
Then paste the result.
87+
Enter a value.
88+
config_token>
89+
```
90+
91+
<br>
92+
93+
到了 Option config_token 這步,由於 Synology NAS 沒有 Web browser, 因此選擇 `n`,我們回到 macOS, 使用以下指令進行認證
94+
```sh
95+
rclone authorize pcloud
96+
```
97+
98+
瀏覽器會跳轉到 pcloud 的登入頁面,登入成功後瀏覽器會顯示一個 access token,將這個 access token 貼回 Synology 的 rclone config 中就設定完成了
99+
100+
完成後 NAS 的檔案總管上在你指定的 volume 底下的 folder 預期可以得到一份 rclone.conf,請把這個檔案備份好
101+
102+
103+
## 設定 rclone crypt remote pcloud
104+
105+
順利讓 rclone 取得 pcloud 的存取權限後,接下來我們要在 rclone 開一個 crypt remote, 把 pcloud 的指定路徑變成我們的端對端加密備份的路徑
106+
107+
在 Synology 上透過 docker 執行 rclone config
108+
```sh
109+
docker run --rm -it --volume /volume1/docker/rclone/config:/config/rclone --user $(id -u):$(id -g) rclone/rclone config
110+
```
111+
112+
選擇 New remote,remote name 輸入 `pcloud_crypt`,Storage type 選擇 crypt
113+
```
114+
15 / Encrypt/Decrypt a remote
115+
\ (crypt)
116+
```
117+
118+
接著會要你輸入想要 encrypt/decrypt 的 remote 以及 path
119+
```
120+
Storage> 15
121+
122+
Option remote.
123+
Remote to encrypt/decrypt.
124+
Normally should contain a ':' and a path, e.g. "myremote:path/to/dir",
125+
"myremote:bucket" or maybe "myremote:" (not recommended).
126+
Enter a value.
127+
remote>
128+
```
129+
130+
remote 就輸入你前面步驟設定的 pcloud remote (這裡的 remote name 以 `pcloud` 為例),path 的部分,需要指定一個路徑,rclone 會在 pcloud 上面建立這個路徑的 folder, 並將這個 folder 作為 rclone 使用,因此若你平常就有在使用 pcloud 存放檔案的話,強烈建議一定要指定路徑,否則 rclone 會將整個 plcoud 的根目錄都拿來使用
131+
132+
這邊我指定了 `nas_backup` 這個路徑,這樣一來在之後透過這個 remote 操作備份時,rclone 就會在 pcloud 的根目錄建立 nas_backup 這個 folder 並將我們的檔案加密後放進這個 folder 中
133+
```
134+
Option remote.
135+
Remote to encrypt/decrypt.
136+
Normally should contain a ':' and a path, e.g. "myremote:path/to/dir",
137+
"myremote:bucket" or maybe "myremote:" (not recommended).
138+
Enter a value.
139+
remote> pcloud:nas_backup
140+
```
141+
142+
接著設定是否要加密檔案名稱 (預設加密)、是否要加密資料夾名稱(預設不加密),這邊依照個人偏好設定即可
143+
144+
接著最重要的一步:設定你的的加密金鑰 (password)
145+
```
146+
Option password.
147+
Password or pass phrase for encryption.
148+
Choose an alternative below.
149+
y) Yes, type in my own password
150+
g) Generate random password
151+
```
152+
153+
可以選擇自己設定一個或是系統幫忙產一個 random password, 不論選哪一種,都請將這個加密金鑰備份好,否則將來無法解開你的備份檔案
154+
155+
後續還有一些進階保護的設定選項,例如是否要為你的 password 添加一個 salt、是否要加密 `rclone.conf` 等等,可根據個人需求參考官方文件去設定,本文不再贅述。
156+
157+
設定完成儲存後,在 rclone config 就可以看到我們成功新增了一個 crypt remote,至此 remote 的部分已經全數設定完畢,可以開始使用 rclone 備份資料了
158+
159+
## 使用 Docker Compose 執行備份
160+
161+
在這個步驟,我們要設定以下這個 docker-compose.yml 來當作我們的自動備份 task
162+
```sh
163+
version: "3.9"
164+
165+
services:
166+
rclone-foobar:
167+
image: rclone/rclone:latest
168+
container_name: rclone-foobar
169+
environment:
170+
- TZ=Asia/Taipei
171+
volumes:
172+
- /volume1/foobar:/data:ro # backup target
173+
- /volume1/docker/rclone/config:/config/rclone # rclone.conf
174+
- /volume1/docker/rclone/logs:/logs # log files
175+
- /volume1/docker/rclone/scripts:/scripts # backup script
176+
# For Synology NAS, use the following entrypoint to run a custom script
177+
entrypoint: ["/bin/sh", "/scripts/backup-foobar.sh"]
178+
```
179+
180+
有幾個設定的重點,皆透過 docker volume 進行
181+
1. 備份目標資料夾 (e.g. `/volume1/foobar`)
182+
2. `rclone.conf` 位置,把前面步驟設定 pcloud 產生的 rclone.conf 儲存在你要的地方並將 NAS 上的檔案路徑 (e.g. `/volume1/docker/rclone/config`) 正確的 map 到 container 的 `/config/rclone` 這個路徑
183+
3. log file 存放位置:為了日後備份失敗時可以 debug, 因此可以在 NAS 上開一個 log 資料夾給 rclone 使用
184+
4. 備份 script 路徑 (e.g. `/volume1/docker/rclone/scripts`) : 用來執行 `rclone sync` 指令,是備份主要的觸發點,將要執行的備份 script 透過 entrypoint 設定進 compose 中
185+
186+
範例的備份 script (`backup-foobar.sh`) 如下
187+
188+
```sh
189+
#!/bin/sh
190+
# This script is executed every time the container starts
191+
# Can be used with DSM scheduler to start the container daily and trigger automatic backup
192+
193+
LOG_FILE="/logs/rclone.log"
194+
echo "=== Rclone backup started at $(date) ===" >> "$LOG_FILE"
195+
196+
# Upload data to the encrypted remote
197+
rclone sync /data pcloud_crypt:nas_backup \
198+
--transfers=2 \
199+
--checkers=4 \
200+
--exclude-from=/config/exclude_list.txt \
201+
--log-file="$LOG_FILE" \
202+
--log-level=INFO
203+
204+
echo "=== Rclone backup completed at $(date) ===" >> "$LOG_FILE"
205+
```
206+
207+
- script 中的 `/data` 會透過 docker volume 指向你的備份目標資料夾,而 `pcloud_crypt:nas_backup` 就是剛剛我們在建立 crypt remote 時的 remote name 以及路徑
208+
- `--transfers``--checkers` 可以根據個人的網路能力及需求設定,log 稍候可以透過 docker volume 的方式儲存在 NAS 上面以供日後 debug
209+
210+
接著我們設定檔案排除以及 logrotate 兩個功能
211+
212+
#### 設定排除檔案
213+
Synology NAS 的資料夾會有一些 synology 專用的索引檔案可以不用備份,我們可以透過 `--exclude-from` 來設定這些 ignore file list,以下附上我從網路上找到用來 ignore Synology 檔案的清單:
214+
```
215+
@eaDir/**
216+
#recycle/**
217+
Thumbs.db
218+
desktop.ini
219+
.DS_Store
220+
._*
221+
.SynologyWorkingDirectory/**
222+
```
223+
224+
#### 設定 logrotate
225+
上面的 docker-compose.yml 範例,我們將 rclone 產生的 log 存在 `/volume1/docker/rclone/logs/` 中,為了必面日後 log 大小過大,因此我們利用 linux 的 logrotate 來處理 log 檔案的自動 rotate
226+
227+
在 NAS host 上新增一個 logrotate 設定
228+
```sh
229+
sudo vi /etc/logrotate.d/rclone
230+
```
231+
232+
範例設定如下,細部設定可以依照個人需求調整
233+
```
234+
/volume1/docker/rclone/logs/*.log {
235+
daily
236+
rotate 7
237+
compress
238+
delaycompress
239+
missingok
240+
notifempty
241+
copytruncate
242+
size 50M
243+
maxage 14
244+
}
245+
```
246+
247+
測試是否能手動 rotate
248+
```sh
249+
sudo logrotate -f /etc/logrotate.d/rclone
250+
```
251+
252+
### 測試
253+
全部設定完成後,可以 ssh 進 NAS 確認 docker-compose 是否能順利執行:
254+
```sh
255+
docker-compose up
256+
```
257+
258+
執行完畢後,container 會自動 exit,檢查 log 無異狀並且檔案有成功上傳到 pcloud 的話就表示成功了
259+
可以順便在 pcloud 上面看你的檔案有沒有被成功的加密
260+
261+
## 透過 DSM 自動化排程備份
262+
在前面的步驟中,我們已經寫好了一個可以手動進行端對端加密備份的 docker-compose.yml 了,下一步就是要將備份自動化,融入日常的 NAS 任務中,我們要利用 DSM 的 排程任務 (Task Scheduler) 來作這件事情
263+
264+
### 建立 rclone user
265+
首先,為了防止 rclone 的權限過大,因此我們在 NAS 上為 rclone 建立一個獨立的 user, 來限制 rclone 能存取的資料夾以及讀寫權限,目標是只讓 rclone 可以讀我們的備份目標資料夾以及 docker 的執行權限,其他沒有要透過 rclone 備份的資料夾,該 user 無法存取
266+
267+
在 DSM 的控制台新增一個名為 `rclone` 的 user, 並將其加入 `docker` 這個 group,讓這個 user 可以不用透過 sudo 執行 docker (如何在 Synology 上建立 docker group 可以參考我之前寫的這篇[如何在 Synology NAS 使用 non-root user 執行 Docker command](/posts/run-docker-command-without-sudo-on-synology-nas))
268+
269+
資料夾權限、應用程式權限預設全部禁止存取,之後根據個人需求允許個別的資料夾權限就好
270+
271+
### 新增 DSM 排程任務
272+
接著在 DSM 控制台的「任務排程表 (Task Scheduler)」建立一個任務
273+
274+
使用者設定 rclone
275+
![dsm-task-1](dsm-task-1.png)
276+
277+
278+
指令欄位輸入 docker-compose up 指令來執行我們上面步驟寫好的 yaml,範例如下:
279+
280+
```sh
281+
docker-compose -f /path/to/your/docker-compose.yml up
282+
```
283+
284+
![dsm-task-2](dsm-task-2.png)
285+
286+
287+
設定好排程時間後就大功告成了,現在你的 NAS 已經實現了一個端對端加密的雲端異地備份服務

0 commit comments

Comments
 (0)