Tính năng đồng bộ hóa
- Nguồn mở và miễn phí.
- Tốc độ đồng bộ nhanh.
- Hỗ trợ đồng bộ một chiều.
- Đồng bộ hóa có chọn lọc (Bỏ qua các mẫu).
- Nó có thể sử dụng máy chủ chuyển tiếp nếu hai máy ngang hàng không thể kết nối với nhau.
- Hỗ trợ xác thực LDAP.
Cài đặt Syncthing trên Ubuntu thông qua Kho lưu trữ Deb chính thức
Syncthing được bao gồm trong kho lưu trữ Ubuntu mặc định kể từ 18.04 Bionic Beaver. Tuy nhiên, bạn nên cài đặt Syncthing từ kho lưu trữ chính thức có được phiên bản mới nhất.
Sử dụng curl
để tải key GPG sau đó import key có đuôi apt-key
.
sudo apt-get install curl
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
Nếu bạn thấy OK
trong terminal, điều đó có nghĩa là khóa GPG đã được nhập thành công. Sau đó thêm kho deb chính thức bằng lệnh sau:
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
Vì kho lưu trữ này sử dụng https nên chúng ta cần cài đặt apt-transport-https
gói nên trình quản lý gói APT có thể thiết lập kết nối https với kho lưu trữ này.
sudo apt-get install apt-transport-https
Cập nhật chỉ mục gói cục bộ và cài đặt đồng bộ hóa trên Ubuntu.
sudo apt-get update
sudo apt-get install syncthing
Sử dụng Systemd để thiết lập Syncthing làm dịch vụ hệ thống
Gói deb Syncthing chính thức đi kèm với tệp dịch vụ systemd cần thiết. Trong /lib/systemd/system/
thư mục, bạn sẽ tìm thấy một [email protected]
tập tin. Kích hoạt tính năng đồng bộ hóa để tự động bắt đầu khi khởi động bằng cách chạy lệnh bên dưới. Thay thế username
bằng tên người dùng thực tế của bạn.
sudo systemctl enable syncthing@username.service
Lệnh trên sẽ tạo một symbolic link trỏ đến tệp [email protected]
.
Created symlink from /etc/systemd/system/multi-user.target.wants/[email protected] to /lib/systemd/system/[email protected].
Bây giờ chúng ta có thể khởi động dịch vụ Syncthing bằng lệnh sau.
sudo systemctl bắt đầu syncthing@ tên người dùng .service
Kiểm tra trạng thái
sudo systemctl start syncthing@username.service
Output
Chúng ta có thể thấy tính năng tự khởi động Syncthing đã được bật và nó đang chạy.
Dịch vụ systemd syncthing tạo các tệp cấu hình trong /home/username/.config/syncthing/ và một thư mục /home/username/Sync làm thư mục đồng bộ hóa mặc định. Tệp cấu hình chính là /home/username/.config/syncthing/config.xml.
Cài đặt Syncthing trên hệ điều hành khác
Truy cập trang tải xuống Syncthing và cài đặt Syncthing trên các hệ điều hành khác như Windows, macOS, BSD, Android.
Mở cổng 22000 trong tường lửa
Syncthing sử dụng cổng 22000 để liên lạc với các đồng nghiệp. Nếu máy tính hoặc máy chủ của bạn đã bật tường lửa UFW thì bạn cần cho phép cổng 22000 bằng lệnh sau.
sudo ufw allow 22000/tcp
Truy cập giao diện web đồng bộ hóa Ubuntu
Theo mặc định, dịch vụ Syncthing lắng nghe trên 127.0.0.1:8384. Bây giờ, trên thanh địa chỉ trình duyệt Web của bạn, hãy nhập 127.0.0.1:8384
để truy cập vào giao diện Syncthing Web. Bạn có thể thêm các thiết bị Syncthing khác và chia sẻ thư mục với chúng.
Nếu bạn cài đặt Syncthing trên máy chủ Ubuntu từ xa, bạn cần thiết lập Reverse Proxy với Nginx hoặc Apache để truy cập giao diện người dùng web, điều này sẽ được giải thích sau trong hướng dẫn này.
Bắt đầu đồng bộ hóa tệp giữa các thiết bị của bạn
Khi có hai thiết bị chạy Syncthing, chúng ta có thể bắt đầu đồng bộ hóa các tệp giữa chúng.
Trong giao diện web Syncthing, nhấp vào Actions > Show ID ở góc trên bên phải. Bạn sẽ thấy ID thiết bị là một chuỗi dài gồm các chữ cái và số. Mã QR, cũng là ID thiết bị, được sử dụng để định cấu hình Syncthing trên điện thoại thông minh.
Sao chép ID thiết bị, sau đó mở giao diện Syncthing Web của thiết bị thứ hai, nhấp vào Add Remote Device ở góc dưới bên phải. Sau đó dán ID thiết bị và đặt tên cho thiết bị. Nhấp vào nút Lưu.
Bây giờ thiết bị thứ hai sẽ cố gắng kết nối với thiết bị thứ nhất. Refresh lại giao diện Web trên thiết bị đầu tiên, bạn sẽ thấy thông báo sau. Bấm vào Thêm thiết bị để thêm thiết bị thứ hai vào danh sách thiết bị của thiết bị thứ nhất.
Bây giờ hai thiết bị đã được kết nối.
Ở khung bên trái giao diện Web là thư mục đồng bộ mặc định ( /home/username/Sync
). Bấm vào Add Folder
nút để thêm một thư mục mới. Đặt nhãn mô tả cho thư mục này và đặt đường dẫn thư mục.
Syncthing chạy dưới dạng tài khoản người dùng của riêng bạn, vì vậy bạn cần có quyền ghi vào thư mục dùng chung. Nếu bạn thấy thông báo lỗi sau khi chia sẻ thư mục, điều đó có nghĩa là bạn không có quyền ghi trên thư mục đó.
2020-06-21 20:05:49: Failed to create folder marker: mkdir .stfolder: read-only file system
Bạn có thể cấp quyền ghi bằng setfacl
.
sudo apt install acl
sudo setfacl -R -m u:username:rwx /folder/path/
Lưu ý : Nếu sự cố vẫn tiếp diễn, vui lòng xem các mẹo khắc phục sự cố ở cuối bài viết này.
Trong Sharing
tab, chọn thiết bị Syncthing khác của bạn.
Trong Ignore Pattens
tab này, bạn có thể nhập mẫu tên cho các tệp không được đồng bộ hóa.
Trong Advanced
tab, bạn có thể chọn loại thư mục, khoảng thời gian quét lại, v.v. Khoảng thời gian quét toàn bộ mặc định là 3600 giây (60 phút). Bạn có thể đặt khoảng thời gian nhỏ hơn như 360 giây (6 phút), nhưng đừng đặt quá nhỏ (dưới 2 phút), nếu không Syncthing sẽ sử dụng nhiều tài nguyên CPU.
Nhấp vào nút Lưu để bắt đầu đồng bộ hóa. Một thông báo sẽ xuất hiện trên giao diện Web của thiết bị kia. Bấm Thêm để nhận file.
Bây giờ hai thiết bị đang đồng bộ hóa các tập tin. Ở bên phải, bạn có thể thấy tốc độ tải xuống, tốc độ tải lên, kích thước thư mục cục bộ, v.v.
Thiết lập Reverse Proxy
Vì nó hoạt động trên địa chỉ 127.0.0.1:8384 nên giao diện Web Syncthing chỉ khả dụng đối với các kết nối từ cùng một máy tính. Để có thể truy cập giao diện Web Syncthing từ máy tính từ xa, chúng ta có thể thiết lập reverse proxy cho Syncthing với Nginx hoặc Apache.
Nginx
Nginx là một máy chủ web và reverse proxy rất phổ biến. Nếu bạn thích sử dụng Nginx, hãy chạy lệnh sau để cài đặt nó.
sudo apt install nginx
Sau đó tạo một tập tin cấu hình máy chủ.
sudo nano /etc/nginx/conf.d/syncthing.conf
Thêm nội dung sau vào tập tin này. Thay thế syncthing.example.com
bằng tên miền ưa thích của bạn. Bạn cũng nên thêm bản ghi DNS A cho tên miền phụ này.
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;
}
}
Lưu và đóng tập tin. Kiểm tra cấu hình Nginx và tải lại Nginx.
sudo nginx -t
sudo systemctl reload nginx
Sau khi bạn trỏ tên miền của mình đến địa chỉ IP của Ubuntu, hãy nhập tên miền của bạn vào thanh địa chỉ trình duyệt và bạn sẽ thấy giao diện Web Syncthing.
Nếu trình duyệt của bạn không thể kết nối với giao diện web Syncthing, có lẽ bạn cần mở port 80 trong Firewall. Ví dụ: nếu bạn sử dụng UFW, hãy chạy lệnh sau.
sudo ufw allow 80/tcp
Apache
Apache là máy chủ web nổi tiếng cũng có thể được sử dụng làm reverse proxy. Nếu bạn thích Apache hơn Nginx, hãy cài đặt nó với:
sudo apt install apache2
Khởi động Apache và bật tự động khởi động.
sudo systemctl start apache2
sudo systemctl enable apache2
Để sử dụng Apache làm reverse proxy, chúng ta cần kích hoạt các proxy
modules và header module.
sudo a2enmod proxy proxy_http headers proxy_wstunnel
Bây giờ hãy tạo một tệp máy chủ ảo cho Syncthing.
sudo nano /etc/apache2/sites-available/syncthing.conf
Sao chép và dán các dòng sau vào tập tin. Thay thế syncthing.example.com
bằng tên miền thực của bạn. Bạn cũng nên thêm bản ghi DNS A cho tên miền phụ này.
<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>
Lưu và đóng tập tin. Sau đó kích hoạt máy chủ ảo này.
sudo a2ensite syncthing.conf
Khởi động lại Apache
sudo systemctl restart apache2
Bây giờ bạn có thể truy cập Giao diện người dùng Web thông qua syncthing.example.com
.
Nếu trình duyệt của bạn không thể kết nối với giao diện web Syncthing, có lẽ bạn cần mở port 80 trong Firewall. Ví dụ: nếu bạn sử dụng UFW, hãy chạy lệnh sau.
sudo ufw allow 80/tcp
Bảo mật giao diện người dùng web Syncthing bằng HTTPS
Để mã hóa lưu lượng HTTP khi bạn truy cập giao diện người dùng web Syncthing thông qua tên miền, chúng tôi có thể bật HTTPS bằng cách cài đặt chứng chỉ TLS miễn phí được cấp từ Let’s Encrypt. Đầu tiên, mở port 443 trong tường lửa.
sudo ufw allow 443/tcp
Sau đó chạy lệnh sau để cài đặt ứng dụng khách Let’s Encrypt (certbot).
sudo apt install certbot
Nếu bạn sử dụng Nginx thì bạn cũng cần cài đặt plugin Certbot Nginx.
sudo apt install python3-certbot-nginx
Tiếp theo, chạy lệnh sau để lấy và cài đặt chứng chỉ TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d syncthing.example.com
Nếu bạn sử dụng Apache, hãy cài đặt plugin Certbot Apache.
sudo apt install python3-certbot-apache
Và chạy lệnh này để lấy và cài đặt chứng chỉ TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d syncthing.example.com
Chú thích
--nginx
: Sử dụng plugin nginx.--apache
: Sử dụng plugin Apache.--agree-tos
: Đồng ý với các điều khoản dịch vụ.--redirect
: Buộc chuyển hướng HTTPS bằng chuyển hướng 301.--hsts
: Thêm tiêu đề Strict-Transport-Security cho mọi phản hồi HTTP. Buộc trình duyệt luôn sử dụng TLS cho tên miền. Bảo vệ chống lại việc tước bỏ SSL/TLS.--staple-ocsp
: Cho phép ghim OCSP. Phản hồi OCSP hợp lệ được ghim vào chứng chỉ mà máy chủ cung cấp trong TLS.
Bây giờ bạn sẽ nhận được chứng chỉ và cài đặt tự động.
Làm mới GUI Web Syncthing của bạn, bạn sẽ thấy kết nối HTTP được tự động chuyển hướng đến kết nối an toàn HTTPS.
Kích hoạt xác thực người dùng
Theo mặc định, bất kỳ ai cũng có thể truy cập giao diện web Syncthing của bạn sau khi thiết lập preverse proxy. Chúng tôi có thể kích hoạt xác thực người dùng để hạn chế quyền truy cập. Nhấp vào nút Actions ở góc trên bên phải, sau đó chọn Settings -> GUI.
Nhập tên người dùng vào trường GUI Authentication User, nhập mật khẩu vào tGUI Authentication Password field. Sau đó lưu cài đặt của bạn.
Xin lưu ý rằng bạn không cần đánh dấu vào ô Use HTTPS for GUI , hộp này cho phép Syncthing sử dụng chứng chỉ tự ký. Chúng tôi đã cài đặt chứng chỉ hợp lệ trong Apache/Nginx được các trình duyệt Web chính thống tin cậy.
Sau khi bạn lưu các thay đổi, hãy khởi động lại dịch vụ Syncthing systemd hoặc bạn có thể thấy lỗi 502 bad gateway error khi tải lại trang.
sudo systemctl restart [email protected]
Bây giờ hãy đăng nhập vào giao diện Web Syncthing bằng tên người dùng và mật khẩu mới của bạn.
Cách sử dụng chứng chỉ TLS tự ký
Nếu bạn không muốn sử dụng tên miền và chứng chỉ TLS hợp lệ để truy cập vào giao diện web Syncthing. Bạn có thể sử dụng chứng chỉ tự ký. Chỉnh sửa tệp cấu hình Syncthing.
nano ~/.config/syncthing/config.xml
Tìm những dòng sau.
<gui enabled="true" tls="false" debugging="false">
<address>127.0.0.1:8384</address>
<apikey>P4sYoeq2CNQRdfq33dq823dakE2</apikey>
<theme>default</theme>
Để sử dụng chứng chỉ tự ký, chỉ cần thay đổi tls="false"
thành tls="true"
. Và nếu bạn định truy cập giao diện web Syncthing từ máy tính từ xa, hãy đổi 127.0.0.1
thành 0.0.0.0
.
Lưu và đóng tập tin. Sau đó khởi động lại Syncthing để thay đổi có hiệu lực.
sudo systemctl restart [email protected]
Thư mục chỉ gửi và chỉ nhận
Khi chia sẻ thư mục trong Syncthing, bạn có thể chuyển đến tab Advanced và chọn một trong ba loại thư mục:
- Send & Receive (default)
- Send Only
- Receive Only
Bạn có thể muốn chọn chỉ gửi hoặc chỉ nhận. Ví dụ: Nếu bạn có 3 máy tính: A, B và C và bạn muốn tổng hợp các thư mục trên máy tính A và B thành một thư mục duy nhất trên máy tính C. Khi đó, bạn có thể đặt loại thư mục thành chỉ nhận trên máy tính C. Bằng cách này, máy tính C sẽ có tất cả các tệp trong một thư mục. Máy tính A và B vẫn còn file gốc. Không hơn không kém.
Khi bạn sử dụng cùng một đường dẫn thư mục trên máy tính C, Syncthing có thể cảnh báo bạn rằng “this path is a subdirectory of an existing folder”. Bạn có thể bỏ qua cảnh báo này vì bạn có thư mục chỉ nhận. Các tập tin hiện có trong thư mục sẽ không bị xóa.
Đồng bộ hóa qua máy chủ chuyển tiếp
Nếu hai phiên bản Syncthing không thể kết nối với nhau thì Syncthing sẽ cố gắng sử dụng máy chủ chuyển tiếp để truyền tệp.
Một lý do phổ biến khiến chúng không thể kết nối với nhau là một trong số chúng sử dụng thiết bị NAT và không định cấu hình chuyển tiếp cổng. Sau khi định cấu hình chuyển tiếp cổng, bạn có thể tắt máy chủ chuyển tiếp. Đây là cách thực hiện. Nhấp vào Edit
nút và chọn Advanced
tab, thay đổi địa chỉ từ dynamic
thành tcp://ip-address:22000
. Tất nhiên bạn cần sử dụng địa chỉ IP thực của mình.
Đồng bộ hóa số lượng lớn các tệp nhỏ
Syncthing không phù hợp để đồng bộ hóa số lượng lớn các tệp nhỏ như tệp osmtile , vì nó sẽ nhanh chóng đạt đến giới hạn inotify của hệ thống tệp Linux. Nếu cả hai thiết bị đều chạy Linux thì bạn có thể sử dụng rsync
công cụ (đồng bộ hóa từ xa) để đồng bộ hóa số lượng lớn các tệp nhỏ, như sau:
rsync -aP /path/to/source/folder/ [email protected]:/path/to/destination/folder
Chạy nhiều phiên bản đồng bộ hóa
Nếu bạn có nhiều thư mục dùng chung thuộc về những người dùng khác nhau thì bạn nên chạy nhiều phiên bản Syncthing cho mỗi người dùng.
sudo systemctl start [email protected]
sudo systemctl start [email protected]
Nếu bạn chạy Syncthing với tư cách user1 và chia sẻ các thư mục thuộc về user2, bạn sẽ gặp phải sự cố không đồng bộ/bị từ chối cấp phép vì Syncthing sẽ tạo các tệp có người dùng mà nó chạy.
Mỗi phiên bản cần có một cổng GUI và cổng đồng bộ hóa duy nhất, có thể được định cấu hình trong tệp cấu hình đồng bộ hóa của người dùng trong thư mục chính.
nano ~/.config/syncthing/config.xml
Cấu hình cổng GUI là
<address>127.0.0.1:8384</address>
Cấu hình cổng đồng bộ mặc định là
<listenAddress>default</listenAddress>
Bạn có thể thay đổi nó thành
<listenAddress>tcp://0.0.0.0:22001</listenAddress>
Nếu không muốn tạo miền phụ cho từng phiên bản Syncthing, bạn có thể tạo thư mục con trong tên miền của mình. Ví dụ: cấu hình thư mục con Nginx cho Syncthing như sau.
location /user2/ {
proxy_pass http://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;
}
Tôi sử dụng user2 làm thư mục con. Bạn có thể chọn bất cứ tên nào bạn thích. Lưu ý rằng trong , cần có proxy_pass http://127.0.0.1:8385/;
dấu gạch chéo ở cuối /
.Nếu bạn xóa nó, nó sẽ không hoạt động.
Những mẹo xử lí sự cố
Unable to connect
Nếu các phiên bản Syncthing của bạn không thể kết nối với nhau, bạn có thể sử dụng ss
(socket stats) để kiểm tra xem Syncthing có đang LISTEN port TCP 22000 hay không.
sudo ss -lnpt | grep syncthing
Như bạn có thể thấy từ ảnh chụp màn hình bên dưới, Syncthing của tôi đang nghe trên cổng 8384 (gweb interface) và 22000 (peer-to-peer connection).
Nếu không, bạn có thể chỉnh sửa tập tin cấu hình.
nano ~/.config/syncthing/config.xml
Tìm dòng sau.
<listenAddress>default</listenAddress>
Thay đổi default
thành tcp://your-IP-address
.
<listenAddress>tcp:// 12.34.56.78 </listenAddress>
Lưu và đóng tập tin. Sau đó khởi động lại Syncthing.
sudo systemctl restart [email protected]
Failed to Create Folder Marker
Nếu bạn muốn đồng bộ một thư mục hệ thống như /etc/
, có thể bạn sẽ thấy thông báo lỗi sau:
Failed to create folder marker, read-only file system
Điều này là do dịch vụ systemd syncthing (/lib/systemd/system/[email protected]) có biến ProtectSystem sau cấm thao tác ghi trên các thư mục systemd (/usr/, /boot/, /etc/).
ProtectSystem=full
Chúng tôi có thể thêm các loại trừ để Syncthing có thể ghi vào thư mục. Tạo một thư mục để lưu trữ cấu hình systemd tùy chỉnh của chúng tôi.
sudo mkdir /etc/systemd/system/[email protected]/
Sau đó tạo một tập tin trong thư mục này.
sudo nano /etc/systemd/system/[email protected]/permission.conf
Thêm các dòng sau vào tập tin này.
[Service]
ReadWritePaths=/shared/foler/one/ /shared/foler/two/
Các thư mục được phân tách bằng khoảng trống. Bạn có thể thêm bao nhiêu thư mục tùy thích. Thư mục phải tồn tại trên hệ thống của bạn, nếu không Syncthing sẽ không khởi động lại được.
Lưu và đóng tập tin. Sau đó tải lại systemd.
sudo systemctl daemon-reload
sudo systemctl restart [email protected]
The Folder Size in Global State is inaccurate
Điều này có thể xảy ra nếu bạn chia sẻ thư mục với nhiều thiết bị. Giả sử bạn chia sẻ thư mục từ thiết bị 1 đến thiết bị 2. Nếu thiết bị 2 chưa hoàn tất đồng bộ hóa tệp và bạn chia sẻ thư mục từ thiết bị 2 sang thiết bị 3 thì kích thước thư mục chung hiển thị trên thiết bị 3 sẽ nhỏ hơn kích thước thực tế .
Folder Synchronization Stops
Kiểm tra logs Syncthing để tìm hiểu lý do tại sao nó ngừng đồng bộ hóa.
sudo journalctl -eu [email protected]
Problem Processing Requests
Nếu bạn thấy lỗi sau, bạn có thể kiểm tra error log Nginx ( /var/log/nginx/syncthing.error.log
) hoặc error log Apache ( /var/log/apache/syncthing_error.log
) để tìm hiểu nguyên nhân gây ra sự cố này.
Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.
Asynchronous Replication
Lưu ý rằng Syncthing sử dụng phương pháp không đồng bộ, do đó, những thay đổi được thực hiện trên một node sẽ mất một thời gian để sao chép sang các node khác. Nếu ứng dụng của bạn nhạy cảm với độ trễ đồng bộ hóa thì bạn nên chỉ định một nút làm node chính. Chỉ thực hiện các thay đổi trên node chính và sử dụng các node phụ làm bản sao lưu.