Syncthing 部署与配置指南:实现本地与远程文件同步 【syncthing】本地与远程部署引言dbt项目准备上线需要在DS中调度执行更新数据。目前DS设备是n台机子调度执行意味着我需要把dbt文件同步到n台机子上。手动更新非常麻烦并且可能会有遗漏且存在拦截机制无法使用git拉取代码因此部署syncthing完成同步环节。1. 安装从官网下载。我下载没有需要魔法。分不清架构版本参考大佬的方法具体看1.3 版本下载。1.1.本地安装下载后完成解压进入文件夹双击syncthing.exe即可。隐藏黑窗口通过浏览器打开前端UI。有时候没有自动弹出可以自行登入http://localhost:8384。1.2.远程安装有教程通过命令行完成安装。# 命令行安装sudoaptinstallsyncthing我的系统不支持通过本地下载文件上传远程端完成安装。我下载的是这个syncthing-linux-amd64-v2.1.0.tar.gz后续执行账户非root账户建议上传在/home下后用root执行安装。不用非root是因为权限不够# 进入下载目录假设在 /rootcd/root# 解压tarxzf syncthing-linux-amd64-*.tar.gz# 进入解压后的文件夹cdsyncthing-linux-amd64-*# 把主程序复制到系统路径# 这一步用非root账号没法完成要么加权限要么切回root执行建议root执行再加执行权限。cpsyncthing /usr/local/bin/# 给执行权限chmodx /usr/local/bin/syncthing# 测试是否成功syncthing version正常输出版本即安装成功。2.卸载我真的太难过了搞半天调度平台用的是另外一个账号。尝试方法一root账户为调度平台default账号修改权限。以失败告终因为每次更新以root账号更新除非每次更新后都执行一次修改。尝试方法二卸载后su default账号重装。卸载方法# 1. 停止并禁用服务systemctl stop syncthing systemctl disable syncthing# 2. 删除 systemd 服务文件rm-f/etc/systemd/system/syncthing.service systemctl daemon-reload# 3. 删除主程序rm-f/usr/local/bin/syncthing# 4. 删除配置、数据库和缓存重要rm-rf~/.config/syncthing# 5. 删除当前目录下的安装包如果你还在 syncthing-linux-amd64-v2.1.0 目录# 注意要进入到对应目录下cd~rm-rfsyncthing-linux-amd64-v*echoSyncthing 已卸载完成因为default没有访问root的权限因此在home下面建文件夹syncthing。如果是用root建的文件夹记得开放权限否则无法完成解压、安装等操作。具体在各步骤的引用中说明。3.连接3.1.本地设置主要是页面上的操作后面 3.前端操作 会详细说明。3.1.1.获取设备ID用于与远程连接本地ID从这里取直接复制即可。3.2.远程设置3.2.1.运行syncthing如果后续不是用root账户这一步可以用非root账户执行。配置文件就不会再/root下而/home下。# 前台执行一次生成配置syncthing serve --no-browser--home~/.config/syncthing# 前台运行不用执行这个syncthing# 后台运行不用执行这个nohupsyncthing serve --no-browsersyncthing.log213.2.2.设置开机自启动root执行即可注意这里看需求调整user并且用其他账户执行会提示权限不足。我是把group也加上去了。# 创建服务文件cat/etc/systemd/system/syncthing.serviceEOF [Unit] DescriptionSyncthing - Continuous File Synchronization Afternetwork.target [Service] Userroot ExecStart/usr/local/bin/syncthing serve --no-browser --no-restart --logflags0 Restartalways RestartSec5 [Install] WantedBymulti-user.target EOF# 设置开机自启这个也是需要root执行systemctlenablesyncthing3.2.3.常用命令常用方法查看状态进行调整启动/重启/停止等排查问题。# 这个最常用# 查看状态systemctl status syncthing# 重新加载服务systemctl daemon-reload# 启动服务systemctl start syncthing# 停止服务systemctl stop syncthing# 确认执行的syncthingpsaux|grepsyncthing# 杀死进程pkill-9syncthing# 重启服务systemctl restart syncthing3.2.4. 开启监听确定以及成功安装及运行syncthing。但是无法在本地浏览器连接远程。需要打开监听。Syncthing 的 Web 界面只监听本地127.0.0.1所以远程电脑无法访问。编辑配置文件让它接受外部连接# 停止服务systemctl stop syncthing# 编辑配置nano~/.config/syncthing/config.xml# 我用的是MobaXterm可以直接作为文本打开。找到这一行大概在 gui 这一段把address127.0.0.1:8384/address改成address0.0.0.0:8384/address保存后退出。# 重启服务systemctl restart syncthing# 检查是否修改成功ss-ltnp|grep8384现在就可以在本地打开远程的前端UI。步骤与本地打开一样在浏览器通过http://host:8384 登入。后续执行账户非root账户使用root执行第一条后需要将配置文件复制到/home下否则无法正常读取。已经在/home下有就不用复制# 确保 default 用户的配置目录存在并有权限# 注意组别sudomkdir-p/home/default/.config/syncthingsudochown-Rdefault:default /home/default/.config/syncthing# 把当前root的配置复制给 default 用户sudocp-a/root/.config/syncthing/* /home/default/.config/syncthing/2/dev/null||echoNo root config to copy# 再次确保权限sudochown-Rdefault:default /home/default/.config/syncthing后面执行还是报错还需要调整一下sudosetfacl-R-b/home/chatkbi/target# 删除所有 ACLsudochown-Rdefault:default /home/chatkbi/targetsudochmod-R755/home/chatkbi/target3.2.5.获取设备ID用于与本地连接syncthing cli show system|grepmyID先复制下来一会儿有用。因为我的/etc/systemd/system/syncthing.service配置文件用的是default所以需要用default查询。4.前端操作这个页面是一样的所以不需要可以区分本地和远程。具体按照需求调整就可以。4.1.初始操作4.1.1.首次登录弹窗这个我选择否。4.1.2.账密安全设置点击设置。设置密码建议本地、远程都设置。设置密码后会跳转进入登录页面。4.2.同步文件操作4.2.1.添加远程设备其中一边连接后另外一边也会收到提醒。点击添加设备即可。实际上两边都需要有互相的设备连接才能进行文件同步。其中一边未连接是这样的成功连接展示如下4.2.2.本地添加同步文件4.2.2.1.填写文件夹路径这个操作本地填写一次即可。完成连接后远程会有提示。新增设备后同步文件夹编辑添加新增设备即可。本地完成同步设备添加远程前端收到提醒完成添加即可。4.2.2.2.同步设置勾选本地。高级中可以按照需求进行调整。我这里是远程仅接收本地仅发送。4.2.2.3.操作同步我的四个机子上都已有dbt项目文件夹但因为以本地为准所以进行覆盖。