如何在Ubuntu桌面/服务器上安装Syncthing

  • 技术文档
  • 2022.03.23
  • 浏览:129

本教程将向您展示如何在Ubuntu上安装SyncthingSyncthing是一个免费的点对点连续文件同步程序,允许您跨多个设备同步文件,可用于Linux、BSD、macOS、Windows、Android和Solaris。

它是流行的Resilio Sync(以前称为BitTorrent Sync)应用程序的开源替代方案。在一台机器上创建、修改或删除文件将自动复制到其他设备。Syncthing不会将文件上传到Nextcloud这样的中央服务器,而是直接在设备之间交换数据。在设备之间传输时,所有数据都会使用TLS加密。

同步功能

  • 免费&;开源。
  • 快速同步速度。
  • 支持单向同步。
  • 选择性同步(忽略模式)。
  • 如果两个对等方无法相互连接,它可以使用中继服务器。
  • 支持LDAP身份验证。

通过官方Deb存储库在Ubuntu上安装Syncthing

自18.04 Bionic Beaver以来,Syncthing已包含在默认的Ubuntu存储库中。但是,建议您从上游官方存储库安装Syncthing,这样您将获得最新版本。

使用curl下载GPG密钥,然后使用apt密钥导入密钥。

sudo apt get安装curl-shttps://syncthing.net/release-key.txt| sudo apt按键添加-

如果在终端中看到OK,则表示GPG密钥已成功导入。然后使用以下命令添加正式的deb存储库。

回声“黛布”https://apt.syncthing.net/syncthing stable“| sudo tee/etc/apt/sources.list.d/syncthing.list

由于该存储库使用https,我们需要安装apt transport https包,以便apt包管理器可以与该存储库建立https连接。

sudo apt get安装apt传输https

更新本地包索引并在Ubuntu上安装syncthing。

sudo-apt-get-update sudo-apt-get-install-syncthing

使用Systemd将Syncthing设置为系统服务

官方Syncthing deb包附带所需的systemd服务文件。在/lib/systemd/system/directory下,您将找到一个[email ;protected]文件。通过运行以下命令,使syncthing在启动时自动启动。用实际用户名替换用户名。

sudo systemctl启用[电子邮件和#160;受保护]用户名。服务

上述命令将创建指向[email ;protected]文件的符号链接。

从/etc/systemd/system/multi-user创建符号链接。目标想要/到/lib/systemd/system/

现在,我们可以使用以下命令启动Syncthing服务。

sudo systemctl start[电子邮件和#160;受保护]用户名。服务

检查状态

systemctl状态[电子邮件和#160;受保护]用户名。服务

输出:

syncthing ubuntu

提示:如果上述命令没有立即退出,请按Q键重新控制终端。

我们可以看到Syncthing autostart已启用并且正在运行。

syncthing systemd服务在/home/username/下创建配置文件。config/syncthing/和一个文件夹/home/username/Sync作为默认的同步文件夹。主配置文件是/home/username/。config/syncthing/config。xml。

在其他操作系统上安装Syncthing

转到Syncthing下载页面,在Windows、macOS、BSD、Android等其他操作系统上安装Syncthing。

打开防火墙中的端口22000

Syncthing使用端口22000与对等方通信。如果您的计算机或服务器启用了UFW防火墙,则需要使用以下命令允许端口22000。

sudo ufw允许22000/tcp

访问Ubuntu Syncthing Web界面

默认情况下,Syncthing服务监听127.0.0.1:8384。现在,在Web浏览器的地址栏中,键入127.0.0.1:8384以访问Syncthing Web界面。您可以添加其他同步设备并与它们共享文件夹。

debian syncthing web interface

如果在远程Ubuntu服务器上安装Syncthing,则需要使用Nginx或Apache设置反向代理才能访问web UI,本教程稍后将对此进行解释。

开始在设备之间同步文件

一旦有两台设备运行Syncthing,我们就可以开始在它们之间同步文件了。

在Syncthing web界面中,单击操作>;在右上角显示ID。您将看到设备ID,它是一长串字母和数字。QR码也是设备ID,用于在智能手机上配置Syncthing。

Syncthing Device ID

复制设备ID,然后打开第二台设备的Syncthing Web界面,单击右下角的添加远程设备。然后粘贴设备ID并为设备命名。点击保存按钮。

Syncthing add remote device

现在,第二台设备将尝试连接到第一台设备。在第一台设备上刷新Web界面,您将看到以下消息。单击“添加设备”将第二个设备添加到第一个设备的设备列表中。

Syncthing add device

现在,这两个设备已连接。

在Web界面的左窗格中是默认的同步文件夹(/home/username/sync)。单击“添加文件夹”按钮添加新文件夹。为此文件夹指定一个描述性标签,并设置文件夹路径。

syncthing add new folder

Syncthing作为您自己的用户帐户运行,因此您需要对共享文件夹具有写入权限。如果在共享文件夹时看到以下错误消息,则表示您没有该文件夹的写入权限。

2020-06-21 20:05:49:无法创建文件夹标记:mkdir。stfolder:只读文件系统

您可以使用setfacl授予写入权限。

sudo apt安装acl
sudo setfacl-R-mu:username:rwx/folder/path/

注意:如果问题仍然存在,请参阅本文末尾的故障排除提示。

在共享选项卡中,选择其他同步设备。

syncthing sharing devices

在“忽略模式”选项卡中,可以输入不应同步的文件的名称模式。

在“高级”选项卡中,可以选择文件夹类型、重新扫描间隔等。

sycnthing advanced sharing settings

单击“保存”按钮开始同步。另一台设备的Web界面上将显示一条消息。单击“添加”以接收文件。

syncthing add share folder

现在这两台设备正在同步文件。在右边,你可以看到下载速率、上传速率、本地文件夹大小等。

syncthing check sycning progress

设置反向代理

由于它监听127.0.0.1:8384,Syncthing Web界面仅对来自同一台计算机的连接可用。为了能够从远程计算机访问Syncthing Web界面,我们可以使用Nginx或Apache为Syncthing设置反向代理。

Nginx

Nginx是一个非常流行的web服务器和反向代理。如果您更喜欢使用Nginx,请运行以下命令进行安装。

sudo apt安装nginx

然后创建一个服务器配置文件。

sudo nano/etc/nginx/conf.d/syncthing。形态

将以下内容添加到此文件。更换同步器。实例com与您首选的域名。您还应该为此子域添加DNS a记录。如果你没有一个真正的域名,我建议你去买一个便宜的域名。价格低廉,而且他们终身免费为whois提供隐私保护。

服务器{listen 80;server_name syncthing.example.com;access_log/var/log/nginx/syncthing.access.log;error_log/var/log/nginx/syncthing.error.log;location/{proxy_passhttp://127.0.0.1:8384;     proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_X_Forwarded_For;proxy_set_header X-Forwarded-Proto$scheme;}

保存并关闭文件。测试Nginx配置并重新加载Nginx。

sudo nginx-t sudo systemctl reload nginx

将域名指向Ubuntu的IP地址后,在浏览器地址栏中键入域名,就会看到Syncthing Web界面。

syncthing web interface

如果浏览器无法连接到Syncthing web界面,可能需要在防火墙中打开端口80。例如,如果使用UFW,则运行以下命令。

sudo ufw允许80/tcp

阿帕奇

Apache是众所周知的web服务器,也可以用作反向代理。如果您更喜欢Apache而不是Nginx,请使用以下软件安装:

sudo apt安装apache2

启动Apache并启用自动启动。

sudo systemctl启动apache2 sudo systemctl启用apache2

要使用Apache作为反向代理,我们需要启用代理模块和头模块。

sudo a2enmod代理u http头代理u wstunnel

现在为Syncthing创建一个虚拟主机文件。

sudo nano/etc/apache2/网站可用/同步。形态

将以下行复制并粘贴到文件中。更换同步器。实例使用你的真实域名。您还应该为此子域添加DNS a记录。如果你没有一个真正的域名,我建议你去买一个便宜的域名。价格低廉,而且他们终身免费为whois提供隐私保护。

<;虚拟主机*:80>;服务器名同步。实例com错误文件404/404。html ProxyPass/http://127.0.0.1:8384/ProxyPassReverse/http://127.0.0.1:8384/ErrorLog${APACHE_LOG_DIR}/syncthing_错误。log CustomLog${APACHE_log_DIR}/syncthing_访问。日志合并</VirtualHost>;

保存并关闭文件。然后启用这个虚拟主机。

sudo是一个敏感的东西。形态

重新启动Apache

sudo systemctl重启apache2

现在,您可以通过syncthing访问Web UI。实例通用域名格式。

如果浏览器无法连接到Syncthing web界面,可能需要在防火墙中打开端口80。例如,如果使用UFW,则运行以下命令。

sudo ufw允许80/tcp

使用HTTPS保护Syncthing Web UI

如果以用户1的身份运行Syncthing并共享属于用户2的文件夹,则会出现不同步/权限被拒绝的问题,因为Syncthing将以其运行的用户的身份创建文件。

每个实例都需要有一个唯一的GUI端口和同步端口,可以在主目录下的用户同步配置文件中进行配置。

纳米~/。config/syncthing/config。xml

GUI端口配置为

<;地址>;127.0.0.1:8384</地址>;

默认的同步端口配置为

<;listenAddress>;违约</listenAddress>;

你可以把它改成

<;listenAddress>;tcp://0.0.0.0:22001</listenAddress>;

如果不想为每个Syncthing实例创建子域,可以在域名中创建子目录。例如,Syncthing的Nginx子目录配置如下。

位置/user2/{proxy_passhttp://127.0.0.1:8385/; proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_X_Forwarded_For;proxy_set_header X-Forwarded-Proto$scheme;}

我使用user2作为子目录。你可以选择任何你喜欢的名字。请注意,在proxy_pass中http://127.0.0.1:8385/;, 后面的斜杠/是必需的。如果你删除它,它将无法工作。

故障排除提示

  • --nginx:使用nginx插件。
  • --apache:使用apache插件。
  • --同意:同意服务条款。
  • --重定向:通过301重定向强制HTTPS。
  • --hsts:为每个HTTP响应添加严格的传输安全头。强制浏览器始终对域使用TLS。防止SSL/TLS剥离。
  • --装订ocsp:启用ocsp装订。有效的OCSP响应被绑定到服务器在TLS期间提供的证书上。

无法连接

如果Syncthing实例无法相互连接,可以使用ss(socket stats)实用程序检查Syncthing是否正在TCP端口22000上侦听。

sudo ss-lnpt | grep syncthing

从下面的屏幕截图可以看到,我的Syncthing正在监听端口8384(web界面)和22000(对等连接)。

ubuntu syncthing listen port 22000

如果没有,您可以编辑配置文件。

纳米~/。config/syncthing/config。xml

找到下面这行。

<;listenAddress>;违约</listenAddress>;

将默认值更改为tcp://your-IP-address.

<;listenAddress>;tcp://12.34.56.78</listenAddress>;

保存并关闭文件。然后重启同步。

sudo systemctl restart用户名。服务

无法创建文件夹标记

如果要同步/etc/等系统文件夹,可能会看到以下错误消息:

无法创建文件夹标记,只读文件系统

这是因为syncthing systemd服务(/lib/systemd/system/)具有以下ProtectSystem变量,该变量禁止对systemd文件夹进行写入操作(/usr/,/boot/,/etc/)。

ProtectSystem=已满

我们可以添加排除,以便Syncthing可以写入文件夹。创建一个文件夹来存储自定义systemd配置。

sudo mkdir/etc/systemd/system/用户名。服务d/

  • 发送&;接收(默认)
  • 只发送
  • 只收

然后在这个目录下创建一个文件。

sudo nano/etc/systemd/system/用户名。服务d.允许。形态

在此文件中添加以下行。

[Service]readwritePath=/shared/foler/one//shared/foler/two/

文件夹之间用空格隔开。您可以添加任意多个文件夹。系统上必须存在该文件夹,否则Syncthing将无法重新启动。

保存并关闭文件。然后重新加载系统D。

sudo systemctl后台程序重新加载

然后重启同步。

sudo systemctl restart用户名。服务

全局状态下的文件夹大小不准确

如果您与多台设备共享文件夹,则可能会发生这种情况。假设您在设备1和设备2之间共享一个文件夹。如果设备2尚未完成文件同步,并且您将文件夹从设备2共享到设备3,则设备3上显示的全局文件夹大小将小于实际大小。

文件夹同步停止

查看Syncthing日志,找出它停止同步的原因。

sudo journalctl-欧盟[电子邮件和#160;受保护]

处理请求时出现问题

如果看到以下错误,可以查看Nginx错误日志(/var/log/Nginx/syncthing.error.log)或Apache错误日志(/var/log/Apache/syncthing_error.log),以找出导致此问题的原因。

Syncthing似乎在处理您的请求时遇到问题。如果问题仍然存在,请刷新页面或重新启动Syncthing。

就我而言,这是因为我启用了ModSecurity web应用程序防火墙。

异步复制

请注意,Syncthing使用异步方法,因此在一个节点上所做的更改需要一些时间才能复制到其他节点。如果应用程序对同步延迟敏感,建议将一个节点指定为主节点。仅在主节点上进行更改,并将从属节点用作备份。

收尾

我希望本教程能帮助你在Ubuntu上安装和使用Syncthing。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

如何在Ubuntu桌面/服务器上安装Syncthing

If you don’t want to create a sub-domain for each Syncthing instance, you can create a subdirectory in your domain name. For example, the Nginx subdirectory configuration for Syncthing is as follows.

 location /user2/ {     proxy_pass ;     proxy_set_header X-Real-IP $remote_addr;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     proxy_set_header X-Forwarded-Proto $scheme;   } 

I use user2 as the subdirectory. You can choose whatever name you like. Note that in proxy_pass ;, the trailing slash / is needed. If you delete it, it won’t work.

Troubleshooting Tips

Unable to connect

If your Syncthing instances can’t connect to each other, you can use the ss (socket stats) utility to check if Syncthing is listening on TCP port 22000.

sudo ss -lnpt | grep syncthing

As you can see from the screenshot below, my Syncthing is listening on port 8384 (web interface) and 22000 (peer-to-peer connection).

ubuntu syncthing listen port 22000

If not, you can edit the configuration file.

nano ~/.config/syncthing/config.xml

Find the following line.

<listenAddress>default</listenAddress>

Change default to tcp://your-IP-address.

<listenAddress>tcp://12.34.56.78</listenAddress>

Save and close the file. Then restart Syncthing.

sudo systemctl restart username.service

Failed to Create Folder Marker

If you want to sync a system folder such as /etc/, you will probably see the following error message:

Failed to create folder marker, read-only file system

This is because the syncthing systemd service (/lib/systemd/system/) has the following ProtectSystem variable that forbids write operation on systemd folders (/usr/, /boot/, /etc/).

ProtectSystem=full

We can add exclusions, so Syncthing can write to the folder. Create a folder to store our custom systemd configurations.

sudo mkdir /etc/systemd/system/username.service.d/

Then create a file under this directory.

sudo nano /etc/systemd/system/username.service.d/permission.conf

Add the following lines in this file.

[Service] ReadWritePaths=/shared/foler/one/ /shared/foler/two/

Folders are separated by empty space. You can add as many folders as you like. The folder must exist on your system, or Syncthing will fail to restart.

Save and close the file. Then reload systemd.

sudo systemctl daemon-reload

And restart Syncthing.

sudo systemctl restart username.service

The Folder Size in Global State is inaccurate

This can happen if you share folders with multiple devices. Let’s say you share a folder from device 1 to device 2. If device 2 isn’t finished syncing files and you share the folder from device 2 to device 3, then the global folder size displayed on device 3 will be smaller than the actual size.

Folder Synchronization Stops

Check the Syncthing logs to find out why it stopped syncing.

sudo journalctl -eu 

Problem Processing Requests

If you see the following error, you can check the Nginx error log (/var/log/nginx/syncthing.error.log) or the Apache error log (/var/log/apache/syncthing_error.log) to find out what caused this problem.

Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.

In my case, it’s because I enabled ModSecurity web application firewall.

Asynchronous Replication

Note that Syncthing uses the asynchronous method, so changes made on one node will take some time to replicate to other nodes. If your application is sensitive to sync delay, it’s recommended to designate a node as the master node. Make changes on the master node only and use the slave nodes as a backup.

Wrapping Up

I hope this tutorial helped you install and use Syncthing on Ubuntu. As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks. Take care ?