樹莓派部署syncthing實現私有云 | 樹莓派小無相系列

手機上存着很多照片,本身又時常折騰手機,總有數據丟失的問題,又對市面上的雲盤不怎麼放心,因此打算在家裏利用樹莓派搭建一個私有云。一番查找以後,發現了 syncthing。Syncthing 是一個跨平臺,開源且免費的基於 P2P 的文件同步解決方案,支持 Windows,Mac,Linux,Android,syncthing 官方暫不支持iOS平臺,但在 AppStore 有可用的第三方客戶端。html

安裝 syncthing

首先須要獲取最新版本的下載連接,打開官方 Github 項目的發佈頁。由於樹莓派的 CPU 是 ARM 架構,因此咱們須要文件名相似 syncthing-linux-arm-xxxxx.tar.gz 的下載連接,右鍵複製連接便可。筆者撰寫文章時,連接爲:https://github.com/syncthing/...linux

接下來經過 SSH 鏈接到樹莓派,並獲取文件,命令行以下:android

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

命令執行完成後,文件便下載解壓完成了,爲了便於操做,咱們重命名下文件夾:git

mv syncthing-linux-arm-v0.14.49-rc.2 syncthing
chmod +x ~/syncthing/syncthing

部署 syncthing

安裝完成後,咱們先運行一下:github

~/syncthing/syncthing

這時會輸出一些提示信息,咱們能夠等待兩分鐘讓它自行初始化。web

接着,咱們開始修改配置文件以便局域網訪問:api

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 退出編輯。ide

開機自啓

這裏參考了在樹莓派上用 Syncthing 自建私有云盤的實現。ui

樹莓派上執行命令:

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」便可。

系列說明

小無相功是小說《天龍八部》中「逍遙派」的一門內功,講究不着形相,無跡可尋,熟悉後再瞭解其餘武功招式即可依仗威力習得,甚至青出於藍而勝於藍。而樹莓派形似小無相功,同具無限可能,瞭解一些基礎即可輕鬆上手,去探尋其餘更多未知。所以,系列以此爲題,帶來一系列樹莓派相關的教程,同時也是對我的長期折騰樹莓派以來的一個歸檔整理。

注:本做品採用知識共享署名-非商業性使用-禁止演繹 3.0 未本地化版本許可協議進行許可。

相關文章
相關標籤/搜索