美文网首页我爱编程树莓派小无相系列
树莓派部署syncthing实现私有云 | 树莓派小无相系列

树莓派部署syncthing实现私有云 | 树莓派小无相系列

作者: 涂涂涂w | 来源:发表于2018-06-25 19:02 被阅读17次

    手机上存着不少照片,自己又时常折腾手机,总有数据丢失的问题,又对市面上的云盘不怎么放心,所以打算在家里利用树莓派搭建一个私有云。一番查找之后,发现了 syncthing。Syncthing 是一个跨平台,开源且免费的基于 P2P 的文件同步解决方案,支持 Windows,Mac,Linux,Android,syncthing 官方暂不支持iOS平台,但在 AppStore 有可用的第三方客户端。

    安装 syncthing

    首先需要获取最新版本的下载链接,打开官方 Github 项目的发布页。因为树莓派的 CPU 是 ARM 架构,所以我们需要文件名类似 syncthing-linux-arm-xxxxx.tar.gz 的下载链接,右键复制链接即可。笔者撰写文章时,链接为:https://github.com/syncthing/syncthing/releases/download/v0.14.49-rc.2/syncthing-linux-arm-v0.14.49-rc.2.tar.gz

    接下来通过 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 退出编辑。

    开机自启

    这里参考了在树莓派上用 Syncthing 自建私有云盘的实现。

    树莓派上执行命令:

    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 未本地化版本许可协议进行许可。

    相关文章

      网友评论

        本文标题:树莓派部署syncthing实现私有云 | 树莓派小无相系列

        本文链接:https://www.haomeiwen.com/subject/fyfuyftx.html