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

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

这是流行的开源替代方案 Resilio同步 (原名 BitTorrent同步)应用程序。 一台计算机上文件的创建,修改或删除将自动复制到其他设备上。 同步不会将您的文件上传到中央服务器,例如 Nextcloud,但直接在设备之间交换数据。 您的所有数据都使用 TLS 在设备之间传输时。

同步功能

  • 免费和开源。
  • 同步速度快。
  • 支持单向同步。
  • 如果两个对等点无法相互连接,则可以使用中继服务器。
  • 支持LDAP认证。

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

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

使用 curl 下载GPG密钥,然后使用 apt-key

sudo apt-get install curl

curl -s https://syncthing.net/release-key.txt | sudo apt-key add -

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

echo "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 install apt-transport-https

更新本地软件包索引并在Ubuntu上安装同步。

sudo apt-get update

sudo apt-get install syncthing

使用Systemd将同步设置为系统服务

官方的Syncthing deb软件包随附了所需的systemd服务文件。 下 /lib/systemd/system/ 目录,您将找到一个 [email protected] 文件。 通过运行以下命令,启用同步以在启动时自动启动。 更换 username 使用您的实际用户名。

sudo systemctl enable [email protected]

上面的命令将创建一个符号链接,指向 [email protected] 文件。

Created symlink from /etc/systemd/system/multi-user.target.wants/[email protected] to /lib/systemd/system/[email protected]

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

sudo systemctl start [email protected]

检查状态

systemctl status [email protected]

输出:

提示:如果上述命令没有立即退出,请按 获得对终端的控制权。

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

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

在其他操作系统上安装Syncthing

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

在防火墙中打开端口22000

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

sudo ufw allow 22000/tcp

访问Ubuntu Syncthing Web界面

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

Debian同步Web界面

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

开始在设备之间同步文件

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

在同步网络界面中,点击 动作 > 显示编号 在右上角。 您将看到设备ID,它是由字母和数字组成的长字符串。 QR码(也是设备ID)用于在智能手机上配置同步。

同步设备ID

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

同步添加远程设备

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

同步添加设备

现在,两个设备已连接。

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

同步添加新文件夹

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

2020-06-21 20:05:49: Failed to create folder marker: mkdir .stfolder: read-only file system

您可以通过以下方式授予写权限 setfacl

sudo apt install acl
sudo setfacl -R -m u:username:rx /folder/path/

在里面 Sharing 标签,选择其他同步设备。

同步共享设备

在里面 Advanced 标签,您可以选择文件夹类型,重新扫描间隔等。

sycnthing高级共享设置

单击保存按钮开始同步。 一条消息将出现在另一台设备的Web界面中。 请点击 接收文件。

同步添加共享文件夹

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

同步检查同步进度

设置反向代理

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

Nginx的

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

sudo apt install nginx

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

sudo nano /etc/nginx/conf.d/syncthing.conf

将以下内容添加到此文件。 更换 syncthing.example.com 与您的首选域名。 您还应该为此子域添加DNS A记录。 如果您没有真实域名,建议您到NameCheap购买。 价格低廉,终身免费提供Whois隐私保护。

server {
  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_pass http://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界面。

同步Web界面

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

sudo ufw allow 80/tcp

阿帕奇

Apache是​​众所周知的Web服务器,也可以用作反向代理。 如果您喜欢Apache而不是Nginx,请使用以下命令进行安装:

sudo apt install apache2

启动Apache并启用自动启动。

sudo systemctl start apache2

sudo systemctl enable apache2

要将Apache用作反向代理,我们需要启用 proxy 模块和标头模块。

sudo a2enmod proxy proxy_http headers proxy_wstunnel

现在创建一个用于同步的虚拟主机文件。

sudo nano /etc/apache2/sites-available/syncthing.conf

将以下行复制并粘贴到文件中。 更换 syncthing.example.com 您的真实域名。 您还应该为此子域添加DNS A记录。 如果您没有真实域名,建议您到NameCheap购买。 价格低廉,终身免费提供Whois隐私保护。

<VirtualHost *:80>
   ServerName syncthing.example.com
   ErrorDocument 404 /404.html

   ProxyPass / http://127.0.0.1:8384/
   ProxyPassReverse / http://127.0.0.1:8384/

   ErrorLog ${APACHE_LOG_DIR}/syncthing_error.log
   CustomLog ${APACHE_LOG_DIR}/syncthing_access.log combined

</VirtualHost>

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

sudo a2ensite syncthing.conf

重新启动Apache

sudo systemctl restart apache2

现在您可以通过访问Web UI syncthing.example.com

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

sudo ufw allow 80/tcp

使用HTTPS保护同步Web UI

当您通过域名访问Syncthing Web UI时,要对HTTP通信进行加密,我们可以通过安装由Let’s Encrypt颁发的免费TLS证书来启用HTTPS。 首先,在防火墙中打开端口443。

sudo ufw allow 443/tcp

然后运行以下命令来安装“让我们加密客户端”(certbot)。

sudo apt install certbot

如果使用Nginx,则还需要安装Certbot Nginx插件。

sudo apt install python3-certbot-nginx

接下来,运行以下命令以获取并安装TLS证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d syncthing.example.com

如果使用Apache,请安装Certbot Apache插件。

sudo apt install python3-certbot-apache

并运行此命令以获取并安装TLS证书。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d syncthing.example.com

哪里

  • --nginx:使用nginx插件。
  • --apache:使用Apache插件。
  • --agree-tos:同意服务条款。
  • --redirect:通过301重定向强制HTTPS。
  • --hsts:将Strict-Transport-Security标头添加到每个HTTP响应。 强制浏览器始终对域使用TLS。 防御SSL / TLS剥离。
  • --staple-ocsp:启用OCSP装订。 有效的OCSP响应被装订到服务器在TLS期间提供的证书。

现在应该获得证书并自动安装。同步ubuntu https certbot
刷新Syncthing Web GUI,您会发现HTTP连接自动重定向到HTTPS安全连接。

启用用户认证

默认情况下,设置反向代理后,任何人都可以访问您的Syncthing Web界面。 我们可以启用用户身份验证来限制访问。 点击 动作 右上角的按钮,然后选择 设定值 -> GUI。

在Debian 8上安装同步

在输入用户名 GUI验证用户 字段中输入密码 GUI身份验证密码字段。 然后保存您的设置。

同步gui用户身份验证

请注意,您无需在 使用HTTPS进行GUI 框,使Syncthing可以使用自签名证书。 我们已经在Apache / Nginx中安装了有效的证书,该证书受到主流Web浏览器的信任。

保存更改后,请重新启动Syncthing systemd服务,否则在重新加载页面时可能会看到502错误的网关错误。

sudo systemctl restart [email protected]

现在,使用您的新用户名和密码登录到Syncthing Web界面。

如何使用自签名TLS证书

如果您不想使用域名和有效的TLS证书来访问Syncthing Web界面。 您可以使用自签名证书。 编辑同步配置文件。

nano ~/.config/syncthing/config.xml

找到以下几行。

    <gui enabled="true" tls="false" debugging="false">
        <address>127.0.0.1:8384</address>
        <apikey>P4sYoeq2CNQRdfq33dq823dakE2</apikey>
        <theme>default</theme>

要使用自签名证书,只需更改 tls="false"tls="true"。 如果要从远程计算机访问Syncthing Web界面,请更改 127.0.0.10.0.0.0

保存并关闭文件。 然后重新启动同步,以使更改生效。

sudo systemctl restart [email protected]

仅发送和仅接收文件夹

在Syncthing中共享文件夹时,可以转到“高级”选项卡并选择以下三种文件夹类型之一:

  • 发送和接收(默认)
  • 仅发送
  • 仅接收

您可能要选择仅发送或仅接收。 例如,如果您有3台计算机:A,B和C,并且要将计算机A和B上的文件夹聚合到计算机C上的单个文件夹。则可以将文件夹类型设置为在计算机C上仅接收。这样,计算机C将所有文件放在一个文件夹中。 计算机A和B仍具有原始文件。 不多也不少。

同步文件夹类型

当您在计算机C上使用相同的文件夹路径时,Syncthing可能会警告您“此路径是现有文件夹的子目录”。 您可以忽略此警告,因为您有一个仅接收文件夹。 文件夹中的现有文件不会被删除。

通过中继服务器同步

如果两个Syncthing实例无法相互连接,则Syncthing将尝试使用中继服务器来传输文件。

同步

同步大量小文件

同步不适用于同步诸如osm tile文件之类的大量小文件,因为它会很快达到Linux文件系统inotify的极限。 如果两个设备都运行Linux,则可以使用 rsync (远程同步)工具来同步大量小文件,如下所示:

rsync -aP /path/to/source/folder/  [email protected]:/path/to/destination/folder

故障排除

如果您的Syncthing实例无法相互连接,则可以使用 ss (套接字统计信息)实用程序,以检查Syncthing是否正在侦听TCP端口22000。

sudo ss -lnpt | grep syncthing

从下面的屏幕快照中可以看到,我的Syncthing正在侦听端口8384(Web界面)和22000(对等连接)。

ubuntu同步监听端口22000

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

nano ~/.config/syncthing/config.xml

找到以下行。

<listenAddress>default</listenAddress>

更改 defaulttcp://your-IP-address

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

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

sudo systemctl restart [email protected]

包起来

我希望本教程可以帮助您在Ubuntu上安装和使用Syncthing。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar