自由職業(yè)者的樹莓派:私有網(wǎng)盤篇

摘要:本篇主要講解如何使用開源軟件 Syncthing,并在樹莓派設(shè)備上搭建自己的私有網(wǎng)盤,從此容量想要多大都自己做主。內(nèi)容涉及安裝同步軟件、配置樹莓派和電腦端的同步,以及可選搭建自己的發(fā)現(xiàn)和中繼服務(wù)等。

閱讀本篇之前,建議您先了解 基礎(chǔ)準(zhǔn)備篇 的內(nèi)容。

不知道您有沒(méi)有跟我一樣的困惑,每天總有很多需要處理的工作,背著個(gè)電腦進(jìn)進(jìn)出出,從家里到公司上班,下班后再回家,總感覺(jué)自己的身體和大腦沒(méi)得到一絲閑暇。所以我分享給大家的想法很簡(jiǎn)單,就是想通過(guò)打造一個(gè)自己的個(gè)人云網(wǎng)盤,在家、在公司或隨時(shí)隨地,都可以同步自己的工作成果、照片、文檔等。
作為未來(lái)工作的自由職業(yè)者,我們大量的電子書、技術(shù)學(xué)習(xí)視頻、各項(xiàng)目的設(shè)計(jì)、開發(fā)文檔,都需要妥善的保存,隨時(shí)隨地獲取和同步更新。而不僅僅是像第三方的云網(wǎng)盤那樣只能上傳下載,容量稍微想要大一點(diǎn),還得包年包月的不停繳費(fèi)。
而我們自己有了這樣的免費(fèi)自主控制的私有網(wǎng)盤后,就不用再繳費(fèi)了。當(dāng)然,放在公司的電腦,也就不用再天天背著上下班了。

下面,我們就開始來(lái)親手打造吧。

  1. 準(zhǔn)備工作
  2. 安裝 Syncthing 同步工具
  3. 配置樹莓派設(shè)備端同步目錄
  4. 配置電腦端同步目錄
  5. 搭建發(fā)現(xiàn)和中繼服務(wù)(可選)

準(zhǔn)備工作

基本的準(zhǔn)備工作完成后,就可以開始最主要的搭建云盤了。在動(dòng)手之前,先規(guī)劃一下自己的云盤方案。針對(duì) 我們平常的使用,一般來(lái)說(shuō),可以按照存儲(chǔ)工作資料、個(gè)人資料、公共資源或其它興趣專題資料分別創(chuàng)建幾個(gè)云盤。例如:

  • company - 工作資料
  • my - 個(gè)人資料
  • resource - 資源(照片、音樂(lè)、視頻、文檔等)
  • works - 作品

為了將云同步的東西與其它分開,我是將這些數(shù)據(jù)統(tǒng)一放在 [cloud] 目錄中的,方便識(shí)別。

# 進(jìn)入移動(dòng)硬盤
cd /volumes/mydisk

# 創(chuàng)建用作云盤的目錄
mkdir [cloud]
cd [cloud]
mkdir company
mkdir my
mkdir resource
mkdir works

現(xiàn)在想好這個(gè)規(guī)劃后,就開始動(dòng)手搭建吧。

安裝 Syncthing 同步工具

接下來(lái),就安裝云盤軟件,這里主要介紹開源的 Syncthing 方案。

類似的方案,國(guó)內(nèi)還有 微力同步 也不錯(cuò),可以試試(不過(guò)它是非開源軟件)。

在 ssh 遠(yuǎn)程連接的樹莓派系統(tǒng)上安裝 Syncthing:

# 添加發(fā)布 PGP key
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -

# 添加穩(wěn)定版的 APT 源
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list

然后:

# 更新并安裝 syncthing
sudo apt update
sudo apt install syncthing

更多幫助,參見(jiàn) https://apt.syncthing.net/。

下面再配置一下,使用 system service 來(lái)支持開機(jī)自啟動(dòng)。

您可以打開源代碼 https://github.com/syncthing/syncthing/tree/main/etc/linux-systemd/system,找到目錄下的服務(wù)文件,將其復(fù)制到梅莓派的 /etc/systemd/system 下;也可以采用更簡(jiǎn)單的手動(dòng)創(chuàng)建。具體包括下面2個(gè)文件:
syncthing@.service

[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %I
Documentation=man:syncthing(1)
After=network.target

[Service]
User=%i
ExecStart=/usr/bin/syncthing -no-browser -no-restart -logflags=0
Restart=on-failure
RestartSec=5
SuccessExitStatus=3 4
RestartForceExitStatus=3 4

# Hardening
ProtectSystem=full
PrivateTmp=true
SystemCallArchitectures=native
MemoryDenyWriteExecute=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

syncthing-resume.service

[Unit]
Description=Restart Syncthing after resume
Documentation=man:syncthing(1)
After=sleep.target

[Service]
Type=oneshot
ExecStart=-/usr/bin/pkill -HUP -x syncthing

[Install]
WantedBy=sleep.target

然后,啟用服務(wù)。因?yàn)闃漭傻?Ubuntu 系統(tǒng)默認(rèn)用戶是 ubuntu,所以按以下命令操作即可。

systemctl enable syncthing@ubuntu.service
systemctl start syncthing@ubuntu.service

如果要檢查是否成功或者是想看下日志,可以使用:

systemctl status syncthing@ubuntu.service
journalctl -e -u syncthing@ubuntu.service

更多幫助 ,參見(jiàn)相關(guān)的官方文檔 https://docs.syncthing.net/users/autostart.html#using-systemd。

因?yàn)?,要從電腦上訪問(wèn)樹莓派上運(yùn)行的 syncthing 的控制臺(tái)網(wǎng)頁(yè),還需要改一下其配置文件。

sudo nano ~/.config/syncthing/config.xml

找到其中的訪問(wèn)地址:

<gui enabled="true" tls="false" debugging="false">
<address>127.0.0.1:8384</address>

將其改為:

<gui enabled="true" tls="true" debugging="false">
<address>0.0.0.0:8384</address>

以便其它主機(jī)也可以遠(yuǎn)程訪問(wèn)。然后重啟一下服務(wù):

systemctl restart syncthing@ubuntu.service

稍等片刻就重啟好了。

配置樹莓派設(shè)備端同步目錄

現(xiàn)在我們就可以用桌面電腦瀏覽器訪問(wèn)控制臺(tái)網(wǎng)頁(yè),輕松的配置云盤目錄。

https://192.168.31.199:8384/

程序默認(rèn)創(chuàng)建了一個(gè) Default Folder,目錄位置在 ~/Sync 下。我們?nèi)绻幌胗玫脑?,可以刪除它,然后點(diǎn)擊 [添加文件夾] 創(chuàng)建自己的云盤目錄。

比如,我的新移動(dòng)硬盤掛在 /volumes/slash 下的,里面創(chuàng)建了 /[cloud]/works/ 目錄用來(lái)作為一個(gè)云盤的根目錄。

需要特別注意的是,為了防止將來(lái)文件被意外刪除和同步,導(dǎo)致文件丟失,請(qǐng)?jiān)?[版本控制] 標(biāo)簽頁(yè)中,選上 [回收站式版本控制],保存 3 天左右。

配置電腦端同步目錄

創(chuàng)建好云盤后,接下來(lái)就是最關(guān)鍵的,同步云盤數(shù)據(jù)了,我們?cè)谛枰烂骐娔X上同樣安裝 Syncthing 軟件。比較方便的是官網(wǎng)提供了好用的小工具軟件,可以自己到 https://syncthing.net/downloads/ 進(jìn)行下載,對(duì) Windows、macOS、Linux 和 Android 都提供了支持,只是暫時(shí)還沒(méi)有 iOS 版本,不過(guò)我一般都是使用 macOS 系統(tǒng)。

安裝好后,與樹莓派是類似的,打開瀏覽器,訪問(wèn)控制臺(tái)界面:

http://localhost:8384/

然后,點(diǎn)擊 [添加遠(yuǎn)程設(shè)備],先將樹莓派添加到里面來(lái)。因?yàn)闃漭珊妥烂骐娔X在同一個(gè)局域網(wǎng)內(nèi),通常是會(huì)自動(dòng)發(fā)現(xiàn)樹莓派的設(shè)備 ID,點(diǎn)選確定即可。

如果因?yàn)榫W(wǎng)絡(luò)特殊,也可以在上一步樹莓派的控制臺(tái)網(wǎng)頁(yè),其右上角的操作下拉菜單,點(diǎn)擊 [顯示 ID] 來(lái)獲取樹莓派設(shè)備 ID,并填入要添加的遠(yuǎn)程設(shè)備 ID,同時(shí)取個(gè)容易記住的設(shè)備名,比如:樹莓派 raspi

這時(shí),打開樹莓派的控制臺(tái)網(wǎng)頁(yè),將會(huì)收到共享請(qǐng)求,確認(rèn) [添加設(shè)備] 即可。

接下來(lái),就在展開 works,點(diǎn)擊 [選項(xiàng)] 按鈕,切換至共享標(biāo)簽頁(yè),勾選上桌面電腦設(shè)備,保存即可發(fā)起共享文件夾的請(qǐng)求。

共享操作是雙向的,隨便哪邊發(fā)起共享都是一樣的。

再次打開桌面電腦的控制臺(tái)網(wǎng)頁(yè),將會(huì)收到共享過(guò)來(lái)的請(qǐng)求,以進(jìn)行確認(rèn)添加。

點(diǎn)擊 [添加] ,選擇電腦本地的文件夾路徑,保存即可完成云盤同步設(shè)備。

在電腦上同步的文件夾,我就沒(méi)有再使用回收站式版本控制了,有一邊支持就行。

現(xiàn)在,您就可以在電腦上存放您的文檔,Syncthing 將會(huì)自動(dòng)幫您把文件同步到樹莓派的移動(dòng)硬盤上了。兩邊都有同樣的文檔,就不用那么擔(dān)心電腦或移動(dòng)硬盤某一邊壞了的情況了。

恭喜您,已完成整個(gè)云盤的搭建。如果您還想搭建更多的云盤,與更多的設(shè)備同步的話,繼續(xù)添加遠(yuǎn)程設(shè)備和共享文件夾就可以了。


搭建發(fā)現(xiàn)和中繼服務(wù)(可選)

因?yàn)槭褂萌值陌l(fā)現(xiàn)和中繼服務(wù)可能會(huì)受到可用性和穩(wěn)定性的影響,所以我們條件允許的話,最好有臺(tái)自己的、帶公網(wǎng) IP 的云主機(jī),搭建自己的同步發(fā)現(xiàn)和中繼服務(wù)。

小秘密:購(gòu)買云主機(jī)的話,上半年關(guān)注 6/18 活動(dòng),下半年關(guān)注 11/11 活動(dòng)。我買的 1核2GB 配置,加上公網(wǎng) IP 和 2MB 帶寬,優(yōu)惠下來(lái)也就 100 多元/年,還不錯(cuò)。除了用于搭建網(wǎng)盤同步的發(fā)現(xiàn)和中繼服務(wù)外,還可以多用途使用,比如以后做域名備案、內(nèi)網(wǎng)穿透、工具軟件安裝等,看您怎么選擇咯。

首先,登錄有公網(wǎng) IP 的服務(wù)器,下載相關(guān)軟件。

ST_DISCOSRV_VER=1.18.6
sudo wget https://github.com/syncthing/discosrv/releases/download/v${ST_DISCOSRV_VER}/stdiscosrv-linux-amd64-v${ST_DISCOSRV_VER}.tar.gz
sudo tar -zxvf stdiscosrv-linux-amd64-v${ST_DISCOSRV_VER}.tar.gz
sudo mv stdiscosrv-linux-amd64-v${ST_DISCOSRV_VER} stdiscosrv
sudo cp stdiscosrv/stdiscosrv /usr/local/bin/
ST_RELAYSRV_VER=1.18.6
sudo wget https://github.com/syncthing/relaysrv/releases/download/v${ST_RELAYSRV_VER}/strelaysrv-linux-amd64-v${ST_RELAYSRV_VER}.tar.gz
sudo tar -zxvf strelaysrv-linux-amd64-v${ST_RELAYSRV_VER}.tar.gz
sudo mv strelaysrv-linux-amd64-v${ST_RELAYSRV_VER} strelaysrv
sudo cp strelaysrv/strelaysrv /usr/local/bin/

需要使用最新的版本,請(qǐng)更新一下 ST_DISCOSRV_VER 和 ST_RELAYSRV_VER 的值。

如果服務(wù)器是 Ubuntu 系統(tǒng),可以更簡(jiǎn)單地通過(guò) APT 進(jìn)行安裝。

sudo apt-get update
sudo apt-get install syncthing-discosrv
sudo apt-get install syncthing-relaysrv

具體步驟參見(jiàn)文檔:https://apt.syncthing.net/

接下來(lái),啟動(dòng)發(fā)現(xiàn)服務(wù):

stdiscosrv -listen ":8443"
# 其它可選參數(shù)
-cert="/path/to/cert.pem" -key="/path/to/key.pem"
# ...
Server device ID is 7DDRT7J-UICR4PM-...-G3EUPQA

備注
-cert 和 -key:證書和私鑰默認(rèn)會(huì)自動(dòng)生成;如果有自己購(gòu)買的 CA 簽名證書,可以手動(dòng)追加相應(yīng)啟動(dòng)參數(shù)。

對(duì)于 Syncthing 客戶端配置來(lái)說(shuō):

  • 如果您使用的是 CA 簽名證書,發(fā)現(xiàn)服務(wù)器 URL (示例)為:
https://disco.example.com:8443/
  • 如果是非 CA 簽名證書,則必須追加設(shè)備 ID(指紋)提供給客戶端配置,發(fā)現(xiàn)服務(wù)器 URL (示例)為:
https://disco.example.com:8443/?id=7DDRT7J-UICR4PM-...-G3EUPQA
https://11.22.33.44:8443/?id=7DDRT7J-UICR4PM-...-G3EUPQA
  • 如果是域名主機(jī)方式,請(qǐng)將示例中disco.example.com 修改為您的域名主機(jī)。
  • 如果是 IP 地址方式,請(qǐng)將示例中 11.22.33.44 修改為您的公網(wǎng) IP。

其中,id 值修改為您啟動(dòng)時(shí)收到的 Server device ID。

詳細(xì)的配置參見(jiàn)幫助文檔:https://docs.syncthing.net/users/stdiscosrv.html

再啟動(dòng)中繼服務(wù):

strelaysrv -pools=""
# 其它可選參數(shù)
-listen=":22067" -status-srv=":22070"
-keys "/path/to/keys"
-provided-by="Foo"
# ...
URI: relay://0.0.0.0:22067/?id=YBQOVTD-LCXFTSW-...-VKML6AN&pingInterval=1m0s&networkTimeout=2m0s&sessionLimitBps=0&globalLimitBps=0&statusAddr=:22070&providedBy=Foo

備注
-pools:當(dāng)不想共享給其它人使用時(shí),一定要加上 -pools=""。
-listen:協(xié)議偵聽端口,默認(rèn)端口為 22067。
-status-srv:狀態(tài)服務(wù)的監(jiān)聽端口,默認(rèn)端口為 22070(-status-srv="" 為禁用)。
-keys:證書和私鑰默認(rèn)會(huì)自動(dòng)生成;如果有自己購(gòu)買的 CA 簽名證書,可以手動(dòng)追加相應(yīng)啟動(dòng)參數(shù),存放的文件名為 cert.pem 和 key.pem。

詳細(xì)的配置參見(jiàn)幫助文檔:https://docs.syncthing.net/users/strelaysrv.html

當(dāng)然,您也可以使用 docker 或 containerd(nerd) 容器方式來(lái)安裝:

  • 發(fā)現(xiàn)服務(wù)
sudo nerdctl run -d --name syncthing-discovery --restart always \
  -p 8443:8443 \
  -v /volumes/data/app/syncthing-discovery:/var/stdiscosrv \
  syncthing/discosrv:1.18.6

# 可選參數(shù)
  -p 19200:19200 \
  -v /volumes/data/app/cert/syncthing-discovery:/etc/stdiscosrv \
# 可選參數(shù)(discosrv 應(yīng)用)
  -key "/etc/stdiscosrv/key.pem" \
  -cert "/etc/stdiscosrv/cert.pem" \

通過(guò)容器日志查看 Server device ID:

sudo nerdctl logs syncthing-discovery
# ...
Server device ID is TW4S6ES-4EZK2NL-...-LH5EQA5

文檔參見(jiàn):https://docs.syncthing.net/users/stdiscosrv.html

  • 中繼服務(wù)
sudo nerdctl run -d --name syncthing-relay --restart always \
  -p 22067:22067 -p 22070:22070 \
  -v /volumes/data/app/syncthing-relay:/var/strelaysrv \
  syncthing/relaysrv:1.18.6 \
  -pools="" -provided-by="Foo"

# 可選參數(shù)
  -v /volumes/data/app/cert/syncthing-relay:/etc/strelaysrv \
# 可選參數(shù)(discosrv 應(yīng)用)
  -keys /etc/strelaysrv

通過(guò)容器日志查看 URI:

sudo nerdctl logs syncthing-relay
# ...
URI: relay://0.0.0.0:22067/?id=YBQOVTD-LCXFTSW-...-VKML6AN&pingInterval=1m0s&networkTimeout=2m0s&sessionLimitBps=0&globalLimitBps=0&statusAddr=:22070&providedBy=Foo

文檔參見(jiàn):https://docs.syncthing.net/users/strelaysrv.html

具體的啟動(dòng)參數(shù)與前面一致,就不再重復(fù)描述。另外,關(guān)于 Syncthing 客戶端的容器啟動(dòng),文檔參見(jiàn):https://github.com/syncthing/syncthing/blob/main/README-Docker.md。

現(xiàn)在,您已成功啟動(dòng)發(fā)現(xiàn)和中繼服務(wù)器。
接下來(lái),就可以在各個(gè)需要同步的 Syncthing 客戶端網(wǎng)站右上角,點(diǎn)擊『操作 > 設(shè)備 > 連接』標(biāo)簽頁(yè),配置相關(guān)地址:


配置發(fā)現(xiàn)服務(wù)器和中繼地址

其中,

  • 協(xié)議監(jiān)控地址:根據(jù)啟動(dòng)中繼服務(wù)時(shí)返回的 URI 地址,摘取相關(guān)部分,并替換 0.0.0.0為自己的公網(wǎng) IP 即可,示例:tcp://0.0.0.0:22000, quic://0.0.0.0:22000, relay://11.22.33.44:22067/?id=YBQOVTD-LCXFTSW-...-VKML6AN ,多個(gè)地址以逗號(hào)分隔。
    詳細(xì)的配置參見(jiàn)幫助文檔:listenAddressglobalAnnounceServer 。
  • 全局發(fā)現(xiàn)服務(wù)器:根據(jù)啟動(dòng)發(fā)現(xiàn)服務(wù)時(shí)返回的 Server device ID,并結(jié)合自己的公網(wǎng) IP 和端口進(jìn)行相應(yīng)拼接,示例:https://11.22.33.44:8443/?id=TW4S6ES-4EZK2NL-...-LH5EQA5

配置后,稍等一下,就可以看到運(yùn)行狀態(tài),以及是否能同步文件了。


Syncthing 客戶端狀態(tài)

我是幾昆蟲,一個(gè)追求終身成長(zhǎng)的努力者。感謝您完整閱讀這篇文章,期待與您的思想相遇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容