Cách cài đặt Syncthing trên Desktop/Server Ubuntu

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

đồng bộ hóa Ubuntu

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.

giao diện web đồng bộ hóa debian

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.

ID thiết bị đồng bộ hóa

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.

Đồng bộ hóa thêm thiết bị từ xa

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.

Đồng bộ hóa thêm thiết bị

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.

đồng bộ hóa thêm thư mục mới

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.

đồng bộ hóa thiết bị chia sẻ

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.

đồng bộ hóa cài đặt chia sẻ nâng cao

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.

đồng bộ hóa thêm thư mục chia sẻ

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.

tiến trình đồng bộ hóa kiểm tra đồng bộ hóa

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.

giao diện web đồng bộ hóa

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.

đồng bộ hóa Ubuntu https certbot


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.

cài đặt đồng bộ hóa trên Debian 8

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.

xác thực người dùng gui đồng bộ hóa

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.

loại thư mục đồng bộ hóa

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.

đồng bộ hóa

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 vô hiệu hóa máy chủ chuyển tiếp

Đồ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).

cổng nghe đồng bộ Ubuntu 22000

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.

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *