樹莓派部署syncthing實現私有云 | 樹莓派小無相系列
手機上存著不少照片,自己又時常折騰手機,總有資料丟失的問題,又對市面上的雲盤不怎麼放心,所以打算在家裡利用樹莓派搭建一個私有云。一番查詢之後,發現了 syncthing。Syncthing 是一個跨平臺,開源且免費的基於 P2P 的檔案同步解決方案,支援 Windows,Mac,Linux,Android,syncthing 官方暫不支援iOS平臺,但在 AppStore 有可用的第三方客戶端。
安裝 syncthing
接下來通過 SSH 連線到樹莓派,並獲取檔案,命令列如下:
cd ~
wget https://github.com/syncthing/syncthing/releases/download/v0.14.49-rc.2/syncthing-linux-arm-v0.14.49-rc.2.tar.gz
tar -zxvf syncthing-linux-arm-v0.14.49-rc.2.tar.gz
命令執行完成後,檔案便下載解壓完成了,為了便於操作,我們重新命名下資料夾:
mv syncthing-linux-arm-v0.14.49-rc.2 syncthing
chmod +x ~/syncthing/syncthing
部署 syncthing
安裝完成後,我們先執行一下:
~/syncthing/syncthing
這時會輸出一些提示資訊,我們可以等待兩分鐘讓它自行初始化。
接著,我們開始修改配置檔案以便區域網訪問:
nano ~/.config/syncthing/config.xml
找到如下內容:
<gui enabled="true" tls="false">
<address>127.0.0.1:8384</address>
<apikey>XXXXXX</apikey>
</gui>
將 127.0.0.1:8384 修改為 0.0.0.0:8384,之後 ctrl+o 回車儲存,ctrl+x 退出編輯。
開機自啟
樹莓派上執行命令:
sudo nano /etc/init.d/syncthing
貼上如下內容:
#!/bin/sh
### BEGIN INIT INFO
# Provides: Syncthing
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Syncthing
# Description: Syncthing is for backups
### END INIT INFO
# Documentation available at
# http://refspecs.linuxfoundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html
# Debian provides some extra functions though
. /lib/lsb/init-functions
DAEMON_NAME="syncthing"
DAEMON_USER=pi
DAEMON_PATH="/home/pi/syncthing/syncthing"
DAEMON_OPTS=""
DAEMON_PWD="${PWD}"
DAEMON_DESC=$(get_lsb_header_val $0 "Short-Description")
DAEMON_PID="/var/run/${DAEMON_NAME}.pid"
DAEMON_NICE=0
DAEMON_LOG='/var/log/syncthing'
[ -r "/etc/default/${DAEMON_NAME}" ] && . "/etc/default/${DAEMON_NAME}"
do_start() {
local result
pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
if [ $? -eq 0 ]; then
log_warning_msg "${DAEMON_NAME} is already started"
result=0
else
log_daemon_msg "Starting ${DAEMON_DESC}" "${DAEMON_NAME}"
touch "${DAEMON_LOG}"
chown $DAEMON_USER "${DAEMON_LOG}"
chmod u+rw "${DAEMON_LOG}"
if [ -z "${DAEMON_USER}" ]; then
start-stop-daemon --start --quiet --oknodo --background \
--nicelevel $DAEMON_NICE \
--chdir "${DAEMON_PWD}" \
--pidfile "${DAEMON_PID}" --make-pidfile \
--exec "${DAEMON_PATH}" -- $DAEMON_OPTS
result=$?
else
start-stop-daemon --start --quiet --oknodo --background \
--nicelevel $DAEMON_NICE \
--chdir "${DAEMON_PWD}" \
--pidfile "${DAEMON_PID}" --make-pidfile \
--chuid "${DAEMON_USER}" \
--exec "${DAEMON_PATH}" -- $DAEMON_OPTS
result=$?
fi
log_end_msg $result
fi
return $result
}
do_stop() {
local result
pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
if [ $? -ne 0 ]; then
log_warning_msg "${DAEMON_NAME} is not started"
result=0
else
log_daemon_msg "Stopping ${DAEMON_DESC}" "${DAEMON_NAME}"
killproc -p "${DAEMON_PID}" "${DAEMON_PATH}"
result=$?
log_end_msg $result
rm "${DAEMON_PID}"
fi
return $result
}
do_restart() {
local result
do_stop
result=$?
if [ $result = 0 ]; then
do_start
result=$?
fi
return $result
}
do_status() {
local result
status_of_proc -p "${DAEMON_PID}" "${DAEMON_PATH}" "${DAEMON_NAME}"
result=$?
return $result
}
do_usage() {
echo $"Usage: $0 {start | stop | restart | status}"
exit 1
}
case "$1" in
start) do_start; exit $? ;;
stop) do_stop; exit $? ;;
restart) do_restart; exit $? ;;
status) do_status; exit $? ;;
*) do_usage; exit 1 ;;
esac
之後 ctrl+o 回車儲存,ctrl+x 退出。執行命令:
#新增執行許可權
sudo chmod +x /etc/init.d/syncthing
#新增自啟啟動
sudo update-rc.d syncthing defaults
現在還可以通過如下命令操作 syncthing:
sudo service syncthing start
sudo service syncthing stop
sudo service syncthing restart
sudo service syncthing status
配置 syncthing
樹莓派上執行啟動命令:
~/syncthing/syncthing
啟動 syncthing 之後,開啟 syncthing 的 web 圖形介面,地址為:http://樹莓派的IP地址:8384,我們可以通過 web 介面進行一些配置。
點選右上角「操作」,選擇「設定」,點選第二個標籤「圖形使用者介面」,填寫「圖形管理介面使用者名稱」及「圖形管理介面密碼」,之後點選「儲存」。
因為我的樹莓派是在區域網中使用,所以我關閉了全球發現,開啟設定的第三個標籤「連線」,取消勾選「全球發現」。
接著為了實現備份的目的,開始配置資料夾,這裡我把預設的資料夾移除了,新增了一個資料夾,點選主介面的「新增資料夾」,填入配置。
資料夾路徑填寫希望儲存在樹莓派的路徑即可。
同步配置
以上完成後,我們就可以開始進行手機端的配置啦。首先在手機上安裝 syncthing 客戶端。Syncthing 的 Android 客戶端開源專案地址給出了在F-Droid的下載連結。
安裝完成後,開啟應用。初始化之後,同樣刪除預設資料夾,再點選右上角加號按鈕新建一個。
填寫完成後,點選右上角勾號儲存。
開啟樹莓派的 syncthing 後臺(http://樹莓派ip:8384),點選主介面「新增遠端裝置」,填寫裝置 ID(在 Android 應用側邊欄顯示裝置 ID 選項)及裝置名。之後開啟 Android 應用,滑動側邊欄,開啟「網頁管理頁面」,網頁頂端會有個請求新增的提示,點選新增即可,如果沒有就手動新增。
至此,就實現了樹莓派和手機資料夾同步的功能,不論在手機上拍攝照片,或是修圖刪除圖片,開啟 syncthing Android 應用之後,就會自動上傳改動到樹莓派,保證了兩端資料夾的一致。
高階配置
如果需要實現即使手機上刪除了照片,樹莓派依舊有存檔該如何實現呢?
首先,在 Android 應用中,點選資料夾,勾選「僅傳送」。
之後,開啟樹莓派 web 後臺,點選右上角「操作」,選擇「高階」,點開「資料夾”xxx”」,勾選「Ignore Delete」即可。
系列說明
小無相功是小說《天龍八部》中「逍遙派」的一門內功,講究不著形相,無跡可尋,熟悉後再瞭解其他武功招式便可依仗威力習得,甚至青出於藍而勝於藍。而樹莓派形似小無相功,同具無限可能,瞭解一些基礎便可輕鬆上手,去探尋其他更多未知。因此,系列以此為題,帶來一系列樹莓派相關的教程,同時也是對個人長期折騰樹莓派以來的一個歸檔整理。