このチュートリアルでは、 Syncthingをインストールする方法を説明します Ubuntuで。 Syncthingは、無料のピアツーピア連続ファイル同期プログラムであり、Linux、BSD、macOS、Windows、Android、Solarisで利用可能な複数のデバイス間でファイルを同期できます。
これは、人気のある Resilio Syncのオープンソースの代替手段です。 (以前は BitTorrent Syncと呼ばれていました ) 応用。 1台のマシンでのファイルの作成、変更、または削除は、他のデバイスに自動的に複製されます。 SyncthingはファイルをNextcloudのような中央サーバーにアップロードしません 、ただし、デバイス間で直接データを交換します。すべてのデータはTLSで暗号化されています デバイス間で送信する場合。
同期機能
- 無料でオープンソース。
- 高速同期速度。
- 一方向の同期をサポートします。
- 選択的同期(パターンを無視)
- 2つのピアが相互に接続できない場合は、リレーサーバーを使用できます。
- LDAP認証をサポートします。
公式Debリポジトリを介してUbuntuにSyncthingをインストールする
Syncthingは、18.04BionicBeaver以降のデフォルトのUbuntuリポジトリに含まれています。ただし、最新バージョンを入手できるように、アップストリームの公式リポジトリから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にsyncthingをインストールします。
sudo apt-get update sudo apt-get install syncthing
Systemdを使用してSyncthingをシステムサービスとして設定する
公式のSyncthingdebパッケージには、必要な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
出力:
ヒント:上記のコマンドがすぐに終了しない場合は、 Qを押してください ターミナルの制御を取り戻すため。
Syncthingの自動起動が有効になっていて、実行されていることがわかります。
syncthing systemdサービスは、/home/username/.config/syncthing/
の下に構成ファイルを作成します およびフォルダ/home / username / Sync
デフォルトの同期フォルダとして。メインの設定ファイルは/home/username/.config/syncthing/config.xml
です。 。
他のOSにSyncthingをインストールする
Syncthingのダウンロードページに移動し、Windows、macOS、BSD、Androidなどの他のオペレーティングシステムにSyncthingをインストールします。
ファイアウォールでポート22000を開く
Syncthingはポート22000を使用してピアと通信します。コンピューターまたはサーバーでUFWファイアウォールが有効になっている場合は、次のコマンドでポート22000を許可する必要があります。
sudo ufw allow 22000/tcp
UbuntuSyncthingWebインターフェースへのアクセス
デフォルトでは、Syncthingサービスは127.0.0.1:8384でリッスンします。次に、Webブラウザのアドレスバーに「 127.0.0.1:8384
」と入力します。 SyncthingWebインターフェイスにアクセスします。他のSyncthingデバイスを追加して、それらとフォルダーを共有できます。
SyncthingをリモートUbuntuサーバーにインストールする場合、Web UIにアクセスするには、NginxまたはApacheでリバースプロキシを設定する必要があります。これについては、このチュートリアルの後半で説明します。
デバイス間でファイルの同期を開始
Syncthingを実行している2つのデバイスがあれば、それらの間でファイルの同期を開始できます。
Syncthing Webインターフェイスで、アクションをクリックします>IDを表示 右上隅にあります。文字と数字の長い文字列であるデバイスIDが表示されます。デバイスIDでもあるQRコードは、スマートフォンでSyncthingを構成するために使用されます。
デバイスIDをコピーし、2番目のデバイスのSyncthing Webインターフェイスを開き、リモートデバイスの追加をクリックします 右下隅にあります。次に、デバイスIDを貼り付けて、デバイスに名前を付けます。 [保存]ボタンをクリックします。
これで、2番目のデバイスが最初のデバイスに接続しようとします。最初のデバイスのWebインターフェイスを更新すると、次のメッセージが表示されます。 デバイスの追加をクリックします 2番目のデバイスを最初のデバイスのデバイスリストに追加します。
これで2つのデバイスが接続されました。
Webインターフェイスの左側のペインには、デフォルトの同期フォルダー( / home / username / Sync
)があります。 )。 フォルダの追加
をクリックします ボタンをクリックして、新しいフォルダを追加します。このフォルダにわかりやすいラベルを付けて、フォルダのパスを設定します。
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:rwx /folder/path/
注 :それでも問題が解決しない場合は、この記事の最後にあるトラブルシューティングのヒントをご覧ください。
共有
で タブで、他のSyncthingデバイスを選択します。
Ignore Pattens
で タブで、同期してはならないファイルの名前パターンを入力できます。
Advanced
タブで、フォルダタイプ、再スキャン間隔などを選択できます。
[保存]ボタンをクリックして同期を開始します。他のデバイスのWebインターフェイスにメッセージが表示されます。 追加をクリックします ファイルを受信します。
これで、2つのデバイスがファイルを同期しています。右側には、ダウンロードレート、アップロードレート、ローカルフォルダのサイズなどが表示されます。
リバースプロキシの設定
127.0.0.1:8384でリッスンするため、SyncthingWebインターフェイスは同じコンピューターからの接続でのみ使用できます。リモートコンピューターからSyncthingWebインターフェイスにアクセスできるようにするために、SyncthingwithNginxまたはApacheのリバースプロキシを設定できます。
Nginx
Nginxは、非常に人気のあるWebサーバーおよびリバースプロキシです。 Nginxを使用する場合は、次のコマンドを実行してインストールします。
sudo apt install nginx
次に、サーバー構成ファイルを作成します。
sudo nano /etc/nginx/conf.d/syncthing.conf
このファイルに次のコンテンツを追加します。 syncthing.example.com
を置き換えます ご希望のドメイン名で。このサブドメインのDNSAレコードも追加する必要があります。実際のドメイン名をお持ちでない場合は、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アドレスを指定したら、ブラウザのアドレスバーにドメイン名を入力すると、SyncthingWebインターフェイスが表示されます。
ブラウザがSyncthingWebインターフェイスに接続できない場合は、ファイアウォールでポート80を開く必要があります。たとえば、UFWを使用する場合は、次のコマンドを実行します。
sudo ufw allow 80/tcp
Apache
Apacheは、リバースプロキシとしても使用できる有名なWebサーバーです。 NginxよりもApacheを使用する場合は、次のコマンドを使用してインストールします。
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
を置き換えます あなたの本当のドメイン名で。このサブドメインのDNSAレコードも追加する必要があります。実際のドメイン名をお持ちでない場合は、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
これで、 syncthing.example.com
を介してWebUIにアクセスできます。 。
ブラウザがSyncthingWebインターフェイスに接続できない場合は、ファイアウォールでポート80を開く必要があります。たとえば、UFWを使用する場合は、次のコマンドを実行します。
sudo ufw allow 80/tcp
SyncthingWebUIをHTTPSで保護する
ドメイン名を介してSyncthingWebUIにアクセスしたときにHTTPトラフィックを暗号化するには、Let’sEncryptから発行された無料のTLS証明書をインストールしてHTTPSを有効にします。まず、ファイアウォールでポート443を開きます。
sudo ufw allow 443/tcp
次に、次のコマンドを実行してLet’s Encryptクライアント(certbot)をインストールします。
sudo apt install certbot
Nginxを使用する場合は、CertbotNginxプラグインもインストールする必要があります。
sudo apt install python3-certbot-nginx
次に、次のコマンドを実行してTLS証明書を取得してインストールします。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d syncthing.example.com
Apacheを使用する場合は、CertbotApacheプラグインをインストールしてください。
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
:利用規約に同意します。 -リダイレクト
:301リダイレクトでHTTPSを強制します。-
-hsts
:すべてのHTTP応答にStrict-Transport-Securityヘッダーを追加します。ドメインに常にTLSを使用するようにブラウザを強制します。 SSL/TLSストリッピングから防御します。 -
-staple-ocsp
:OCSPステープリングを有効にします。有効なOCSP応答は、TLS中にサーバーが提供する証明書にホチキス止めされます。
これで、証明書が取得され、自動的にインストールされます。
Syncthing Web GUIを更新すると、HTTP接続がHTTPSセキュア接続に自動的にリダイレクトされます。
ユーザー認証を有効にする
デフォルトでは、リバースプロキシが設定された後、誰でもSyncthingWebインターフェイスにアクセスできます。ユーザー認証を有効にしてアクセスを制限できます。 アクションをクリックします 右上隅のボタンをクリックし、[設定]を選択します ->GUI。
GUI認証ユーザーにユーザー名を入力します フィールドで、GUI認証パスワードフィールドにパスワードを入力します 。次に、設定を保存します。
GUIにHTTPSを使用するにチェックマークを付ける必要はないことに注意してください ボックス。Syncthingが自己署名証明書を使用できるようにします。主流のWebブラウザによって信頼されている有効な証明書をApache/Nginxにすでにインストールしています。
変更を保存したら、Syncthing systemdサービスを再起動します。そうしないと、ページの再読み込み時に502badgatewayエラーが表示される場合があります。
sudo systemctl restart [email protected]username.service
次に、新しいユーザー名とパスワードを使用してSyncthingWebインターフェイスにログインします。
自己署名TLS証明書の使用方法
ドメイン名と有効なTLS証明書を使用してSyncthingWebインターフェイスにアクセスしたくない場合。自己署名証明書を使用できます。 Syncthing構成ファイルを編集します。
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.1
を変更します。 0.0.0.0
へ 。
ファイルを保存して閉じます。次に、Syncthingを再起動して、変更を有効にします。
sudo systemctl restart [email protected]username.service
送信専用および受信専用フォルダ
Syncthingでフォルダを共有する場合は、[詳細設定]タブに移動して、次の3つのフォルダタイプのいずれかを選択できます。
- 送受信(デフォルト)
- 送信のみ
- 受信のみ
送信専用または受信専用を選択することをお勧めします。たとえば、A、B、Cの3台のコンピューターがあり、コンピューターAとBのフォルダーをコンピューターCの1つのフォルダーに集約する場合は、フォルダーの種類をコンピューターCの受信専用に設定できます。このようにして、コンピューターCはすべてのファイルを1つのフォルダーに入れます。コンピューターAとBにはまだ元のファイルがあります。これ以上でもそれ以下でもありません。
コンピューターCで同じフォルダーパスを使用すると、Syncthingは「このパスは既存のフォルダーのサブディレクトリです」と警告する場合があります。受信専用フォルダがあるため、この警告は無視してかまいません。フォルダ内の既存のファイルは削除されません。
リレーサーバーを介した同期
2つのSyncthingインスタンスが相互に接続できない場合、Syncthingはリレーサーバーを使用してファイルを転送しようとします。
それらが相互に接続できない一般的な理由は、それらの1つがNATデバイスの背後にあり、ポート転送を構成しなかったことです。ポート転送を構成すると、リレーサーバーを無効にできます。方法は次のとおりです。 編集コード>をクリックします ボタンをクリックして、
Advanced
を選択します タブで、アドレスを dynamic
から変更します tcp:// ip-address:22000
へ 。もちろん、実際のIPアドレスを使用する必要があります。
大量の小さなファイルを同期する
Syncthingは、Linuxファイルシステムのinotifyの制限にすぐに達するため、osmタイルファイルなどの大量の小さなファイルの同期には適していません。 2つのデバイスが両方ともLinuxを実行している場合は、 rsync
を使用できます (リモート同期)ツールは、次のように大量の小さなファイルを同期します:
rsync -aP /path/to/source/folder/ [email protected]:/path/to/destination/folder
Syncthingの複数のインスタンスの実行
異なるユーザーに属する複数の共有フォルダーがある場合は、ユーザーごとにSyncthingの複数のインスタンスを実行することをお勧めします。
sudo systemctl start [email protected] sudo systemctl start [email protected]
Syncthingをuser1として実行し、user2に属するフォルダーを共有すると、Syncthingが実行するユーザーとファイルを作成するため、非同期/許可が拒否される問題が発生します。
各インスタンスには、一意のGUIポートと同期ポートが必要です。これらは、ホームディレクトリの下にあるユーザーのsyncthing構成ファイルで構成できます。
nano ~/.config/syncthing/config.xml
GUIポートの構成は
<address>127.0.0.1:8384</address>
デフォルトの同期ポート構成は
です。<listenAddress>default</listenAddress>
次のように変更できます
<listenAddress>tcp://0.0.0.0:22001</listenAddress>
Syncthingインスタンスごとにサブドメインを作成したくない場合は、ドメイン名にサブディレクトリを作成できます。たとえば、SyncthingのNginxサブディレクトリ構成は次のとおりです。
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; }
私はuser2をサブディレクトリとして使用しています。お好きな名前をお選びいただけます。 proxy_pass http://127.0.0.1:8385/;
に注意してください 、末尾のスラッシュ /
が必要です。削除すると機能しなくなります。
トラブルシューティングのヒント
接続できません
Syncthingインスタンスが相互に接続できない場合は、 ss
を使用できます (ソケット統計)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>
ファイルを保存して閉じます。次に、Syncthingを再起動します。
sudo systemctl restart [email protected]username.service
フォルダマーカーの作成に失敗しました
/ etc /
などのシステムフォルダを同期する場合 、おそらく次のエラーメッセージが表示されます:
Failed to create folder marker, read-only file system
これは、syncthing systemdサービス( / lib / systemd / system / [email protected]
)には次の ProtectSystem
があります systemdフォルダー(/ usr /、/ boot /、/ etc /)での書き込み操作を禁止する変数。
ProtectSystem=full
除外を追加できるので、Syncthingはフォルダーに書き込むことができます。カスタムsystemd構成を保存するフォルダーを作成します。
sudo mkdir /etc/systemd/system/[email protected]username.service.d/
次に、このディレクトリの下にファイルを作成します。
sudo nano /etc/systemd/system/[email protected]username.service.d/permission.conf
このファイルに次の行を追加します。
[Service] ReadWritePaths=/shared/foler/one/ /shared/foler/two/
フォルダは空のスペースで区切られます。フォルダはいくつでも追加できます。フォルダがシステムに存在している必要があります。存在していないと、Syncthingは再起動に失敗します。
ファイルを保存して閉じます。次に、systemdをリロードします。
sudo systemctl daemon-reload
そしてSyncthingを再起動します。
sudo systemctl restart [email protected]username.service
グローバル状態のフォルダサイズが不正確です
これは、フォルダを複数のデバイスと共有している場合に発生する可能性があります。デバイス1からデバイス2にフォルダーを共有するとします。デバイス2でファイルの同期が完了しておらず、デバイス2からデバイス3にフォルダーを共有すると、デバイス3に表示されるグローバルフォルダーサイズは実際のサイズよりも小さくなります。 。
フォルダの同期が停止します
Syncthingログをチェックして、同期が停止した理由を確認してください。
sudo journalctl -eu [email protected]
問題処理リクエスト
次のエラーが表示された場合は、Nginxエラーログ( /var/log/nginx/syncthing.error.log
)を確認できます。 )またはApacheエラーログ( /var/log/apache/syncthing_error.log
)この問題の原因を突き止めます。
Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.
私の場合、ModSecurityWebアプリケーションファイアウォールを有効にしたためです。
非同期レプリケーション
Syncthingは非同期方式を使用するため、1つのノードで行われた変更が、他のノードに複製されるまでに時間がかかることに注意してください。アプリケーションが同期遅延の影響を受けやすい場合は、ノードをマスターノードとして指定することをお勧めします。マスターノードでのみ変更を加え、スレーブノードをバックアップとして使用します。