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

[ad_1]

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

它是流行的开源替代品 弹性同步 (原名 BitTorrent 同步) 应用。 在一台机器上创建、修改或删除文件将自动复制到您的其他设备。 Syncthing 不会将您的文件上传到中央服务器,例如 下云,但直接在您的设备之间交换您的数据。 您的所有数据都经过加密 TLS 在您的设备之间传输时。

通过官方 Deb 存储库在 Debian 上安装 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

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

sudo apt-get update

sudo apt-get install syncthing

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

官方的 Syncthing deb 包附带了所需的 systemd 服务文件。 在下面 /lib/systemd/system/ 目录,你会发现一个 [email protected] 文件。 通过运行以下命令启用同步以在启动时自动启动。 代替 username 使用您的实际用户名。

sudo systemctl enable [email protected]username.service

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

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

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

sudo systemctl start [email protected]username.service

检查状态

systemctl status [email protected]username.service

输出:

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

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

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 allow 22000/tcp

访问 Debian Syncthing Web 界面

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

如果您在远程 Debian 服务器上安装 Syncthing,您可以通过编辑配置文件启用对 Syncthing Web 界面的远程访问。

nano /home/username/.config/syncthing/config.xml

找到以下两行。

    <gui enabled="true" tls="false" debugging="false">
        <address>127.0.0.1:8384</address>

改变 tls="false"tls="true",因此 HTTP 流量将被加密。 并改变 127.0.0.1 到 Debian 服务器的公共 IP 地址。 Save 和 close 文件。 重新启动 Syncthing 以使更改生效。

sudo systemctl start [email protected]username.service

现在输入 server-ip-address:8384 在 Web 浏览器中访问 Syncthing Web 界面。 显然您需要使用 Debian 服务器的真实 IP 地址。 您将被要求设置用户名和密码以保护 Syncthing Web 界面。

您还可以使用 Nginx 或 Apache 以便访问 Web UI,本教程稍后将对此进行说明。

开始在您的设备之间同步文件

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

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

同步设备 ID

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

同步添加远程设备

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

同步添加设备

现在这两个设备已连接。

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

同步添加新文件夹

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

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 选项卡,选择您的其他 Syncthing 设备。

同步共享设备

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

同步高级共享设置

点击 Save 按钮开始同步。 另一台设备的 Web 界面中将出现一条消息。 点击 添加 接收文件。

同步添加共享文件夹

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

同步检查同步进度

设置反向代理

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

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 https://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;
  }
}

Save 和 close 文件。 测试 Nginx 配置并重新加载 Nginx。

sudo nginx -t

sudo systemctl reload nginx

将您的域名指向 Debian 的 IP 地址后,在浏览器地址栏中输入您的域名,您应该会看到 Syncthing Web 界面。

同步网页界面

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

sudo ufw allow 80/tcp

Apache

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

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

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 / https://127.0.0.1:8384/
   ProxyPassReverse / https://127.0.0.1:8384/

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

</VirtualHost>

Save 和 close 文件。 然后启用这个虚拟主机。

sudo a2ensite syncthing.conf

重新开始 Apache

sudo systemctl restart apache2

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

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

sudo ufw allow 80/tcp

使用 HTTPS 保护 Syncthing Web UI

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

sudo ufw allow 443/tcp

然后运行以下命令安装 Let’s Encrypt 客户端(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 界面。 我们可以启用用户身份验证来限制访问。 点击 行动 右上角的按钮,然后选择 设置 -> 图形用户界面。

在 Debian 8 上安装同步

Enter 一个用户名 GUI认证用户 字段,输入密码 GUI 认证密码字段. 然后保存您的设置。

同步 gui 用户认证

请注意,您不需要勾选 为 GUI 使用 HTTPS 框,它使 Syncthing 能够使用自签名证书。 我们已经安装了一个有效的证书 Apache/Nginx 主流浏览器信任。

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

sudo systemctl restart [email protected]username.service

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

仅发送和仅接收文件夹

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

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

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

同步文件夹类型

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

通过中继服务器同步

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

同步

它们无法相互连接的一个常见原因是其中一个位于 NAT 设备后面并且没有配置端口转发。 配置端口转发后,您可以禁用中继服务器。 就是这样。 点击 Edit 按钮并选择 Advanced 选项卡,更改地址 dynamictcp://ip-address:22000. 当然你需要使用你的真实IP地址。

同步禁用中继服务器

故障排除

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

sudo ss -lnpt | grep syncthing

从下面的屏幕截图中可以看出,我的 Syncthing 正在侦听端口 8384(Web 界面)和 22000(点对点连接)。

debian syncthing 监听 tcp 端口 22000

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

nano ~/.config/syncthing/config.xml

找到以下行。

<listenAddress>default</listenAddress>

改变 defaulttcp://your-IP-address.

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

Save 和 close 文件。 然后重新启动 Syncthing。

sudo systemctl restart [email protected]username.service

缺少 .stfoler 文件

.stfoler 文件需要 Syncthing 才能工作。 这是一个空文件。 您无需向其中添加任何内容。 如果 .stfolder 同步文件夹下缺少文件,则同步将停止。 您可以创建以下 Cron 作业来自动创建文件。

@hourly touch /path/to/sync/folder/.stfolder

如果文件丢失,touch 命令将创建该文件。 如果文件已经存在,它将更新文件时间戳。

包起来

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

[ad_2]

Related Posts