本教程将向您展示如何安装 同步 在 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,然后打开第二台设备的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 期间提供的证书。
现在应该获得并自动安装证书。
刷新您的 Syncthing Web GUI,您会发现 HTTP 连接自动重定向到 HTTPS 安全连接。
启用用户身份验证
默认情况下,任何人都可以在设置反向代理后访问您的 Syncthing Web 界面。 我们可以启用用户身份验证来限制访问。 点击 行动 右上角的按钮,然后选择 设置 -> 图形用户界面。
Enter 一个用户名 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
选项卡,更改地址 dynamic
到 tcp://ip-address:22000
. 当然你需要使用你的真实IP地址。
故障排除
如果您的 Syncthing 实例无法相互连接,您可以使用 ss
(socket stats) 实用程序,用于检查 Syncthing 是否正在侦听 TCP 端口 22000。
sudo ss -lnpt | grep syncthing
从下面的屏幕截图中可以看出,我的 Syncthing 正在侦听端口 8384(Web 界面)和 22000(点对点连接)。
如果没有,您可以编辑配置文件。
nano ~/.config/syncthing/config.xml
找到以下行。
<listenAddress>default</listenAddress>
改变 default
到 tcp://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。 与往常一样,如果您发现这篇文章有用,请订阅我们的免费时事通讯以获取更多提示和技巧。 保重?