前書き

異なるコンピューター間でファイルの同期を保つことができる多くのプログラムがあります。 * Syncthing *は、クロスプラットフォーム、完全にオープンソース、非常に柔軟で使いやすい魅力的な新しいオプションです。

このガイドでは、Syncthingを使用して2つのUbuntu 14.04サーバーインスタンス間でデータを同期する方法を説明します。 これにより、設定された「監視」ディレクトリに基づいて、これらのサーバー間でファイルをシームレスに同期できます。

前提条件と目標

このガイドを完了するには、2つのUbuntu 14.04サーバーインスタンスにアクセスする必要があります。

このガイドでは、これらのサーバーを次のように呼びます。

  • * serverone *

  • サーバーツー

これらは対等なパートナーになるため、プライマリ/セカンダリ関係はありません。 これらのそれぞれに通常のユーザーアカウントを構成する必要があります(方法については、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu- 14-04 [Ubuntu 14.04の初期サーバーセットアップガイド]。

このガイドの通常のユーザーアカウントは「++」と呼ばれますが、任意のユーザー名を使用する必要があります。 これは、通常の非ルートアカウントとは別にする必要はありません。

これらの各マシンにSyncthingをインストールして構成し、それらの間でファイルを共有できるようにします。 このガイドで説明されている手順を完了したら、2台のサーバーが必要になります。各サーバーには、他のコンピューターへの変更をミラーリングするディレクトリがあります。

Syncthingをシステムレベルのアプリケーションとしてインストールし、Upstartスクリプトを作成します。 これにより、デフォルトで行うように毎回新しいインスタンスを生成するのではなく、Syncthingインスタンスがブート時に起動して正しく再起動できるようになります。

初期ダウンロードとインストール

最初に行う必要があるのは、Syncthingバイナリを各サーバーにダウンロードすることです。

最新のパッケージバージョンを見つけるには、https://github.com/calmh/syncthing/releases/latest [GitHubのリリースページ]にアクセスしてください。 各オペレーティングシステムタイプ用のボタンが下部にあります。

image:https://assets.digitalocean.com/articles/syncthing_1404/download_buttons.png [同期リリースページ]

Linuxシステムが32ビットの場合、「 + syncthing-linux-386 -…​ +」で始まる選択を選択します。 使用しているサーバーが64ビットの場合、「 + syncthing-linux-amd64 -…​ +」というラベルの付いたサーバーを選択します。 ローカルコンピューターにファイルをダウンロードしないでください。 代わりに、適切なファイルを右クリックして、「リンクアドレスのコピー」または同様のオプションを選択します。

これらのファイルは、各サーバーで `+ wget `コマンドを使用してダウンロードします。 サーバーで、 ` wget +`に続けてスペースを入力し、コピーしたリンクを貼り付けます。 バージョンとシステムアーキテクチャは異なる場合があります。

cd ~
wget

これで、次のように入力してtarballを展開できます。

tar xzvf syncthing*.tar.gz

新しく作成したディレクトリに移動します。

cd syncthing*

ここには、サービスを開始するために使用できる「+ syncthing 」という実行可能ファイルがあります。 これを ` PATH +`の場所にコピーして、通常のアプリケーションのように呼び出すことができるようにします。

次のように入力して、sudo権限でこれを行います。

sudo cp syncthing /usr/local/bin

これで、ホームディレクトリに戻り、残っているSyncthingファイルとディレクトリをすべて安全に削除できます。

cd ~
rm -rf syncthing*

両方のサーバーで上記の手順をすべて完了します。

これでアプリケーションがインストールされましたが、使用する前に行う必要があることがいくつかあります。

GUIオプションを変更してリモート表示を許可する

デフォルトでは、Syncthing Webインターフェイスは同じコンピューターからの接続でのみ使用できます。 リモートサーバーを使用しているため、これは目的には機能しません。

これを修正するには、Syncthing構成ファイルの行を編集する必要があります。 ただし、構成ファイルはまだ作成されていません。

ファイルを自動的に作成するために、簡単にサービスを開始できます。 これを実行するには、 `+ syncthing +`コマンドを入力します:

syncthing

`+ syncthing +`プロセスはデーモンではありません。つまり、現在のシェルセッションで実行されます(Upstartスクリプトを一時的に実装することでこれを回避します)。 プロセスを開始し、いくつかの必要なファイルを作成します。

しばらくすると、ノードIDに関する次のような情報メッセージが表示されます。

[2EQK3] 15:47:15 OK: Ready to synchronize default (read-write)
[2EQK3] 15:47:15 INFO: Node 2EQK3ZR77PTBQGM44KE7VQIQG7ICXJDEOK34TO3SWOVMUL4QFBHA is "server1" at [dynamic]

これが表示される場合、プロセスが正しく初期化されたことを意味します。 次のように入力してプロセスを停止できます。

CTRL-C

これにより、プロセスが停止し、再びターミナルを制御できるようになります。

これで、作成された構成ファイルを編集できます。 テキストエディターでファイルを開きます。

nano ~/.config/syncthing/config.xml

GUIを扱うセクションを探します。 これは次のようになります。

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

必要な変更は、localhostアドレス( + 127.0.0.1 +)をすべてのネットワークインターフェースを表す `+ 0.0.0.0 +`に置き換えることだけです。 終了すると、このセクションは次のようになります。

<gui enabled="true" tls="false">
   <address>:8080</address>
</gui>

完了したら、ファイルを保存して閉じます。 後でWebインターフェースを使用して、より広範な構成を行います。

繰り返しますが、構成している両方のサーバーでこれらの手順を完了してください。

サービス状態を処理するUpstartスクリプトを作成する

次に、プロセスを管理するUpstartスクリプトを実装します。 これにより、サーバーの起動時にSyncthingプロセスを自動的に開始できます。 また、セッションを制御することなく、サービスとして実行できます。

使用するUpstartスクリプトは、http://discourse.syncthing.net/t/keeping-syncthing-running/30 [Syncthingディスカッションボードに投稿]から取得されます。 次のように入力して、エディターでルート権限でUpstartファイルを作成して開きます。

sudo nano /etc/init/syncthing.conf

内部では、次の行を使用してUpstartプロセスを制御します。

description "Syncthing P2P sync service"

start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

env STNORESTART=yes
env HOME=/home/
setuid ""
setgid ""

exec /usr/local/bin/syncthing

respawn

これが何を意味するかを見ていきましょう。

サービスの一般的な説明から始めます。 次に、サービスをいつ開始および停止するかを定義します。 ここでは、ファイルシステムと非ローカルネットワークインターフェイスが起動された後に起動する必要があることをシステムに伝えています。 システムが通常のランレベルのいずれかを離れるたびに停止します。

次に、Syncthingに独自のメカニズムを使用して再起動しないように指示する環境変数を設定します。 これは、古いプロセスをクリーンアップせずに毎回新しいプロセスを実際に生成するためです。 これを回避するには、このUpstartスクリプト内で後で再起動する機能を実装します。

次の環境変数は、Syncthingが使用するホームディレクトリを設定します。 これは、正しい構成ファイルを見つけ、GUIのフィールドに事前入力するために使用されます。 `+ setuid `と ` setgid +`パラメーターをそれぞれ使用して、ユーザーとグループを指定します。 これら3つの値をすべて変更して、ユーザーの情報を指すようにします。

次に、実行する実際のコマンドへのパスを設定します。 最後に、 `+ respawn +`を使用して、Upstartにプロセスが途中で停止した場合に自動的に再起動するように指示します。 これは、Syncthingプロセスが内部で自身を再起動しようとするときに、プロセスを自動的に(クリーンに)再起動するために使用されます。

終了したら、ファイルを保存して閉じます。

次のように入力して、サービスを開始できます。

sudo initctl start syncthing

両方のサーバーで上記の手順を完了します。

Web UIでセキュリティを設定する

これで、Webユーザーインターフェイスを介してインスタンスを構成する準備が整いました。

パブリックIPアドレスとポート「8080」にアクセスして、各サーバーのSyncthingインターフェースにログインします。

http://:8080
http://:8080

Syncthingのメイン画面が表示されます。

image:https://assets.digitalocean.com/articles/syncthing_1404/default.png [メイン画面の同期]

最初に行う必要があるのは、インターフェイスにセキュリティを追加することです。 右上隅の[編集]メニューに移動し、[設定]をクリックします。

image:https://assets.digitalocean.com/articles/syncthing_1404/settings.png [同期設定]

右側では、Webインターフェイスのユーザー名とパスワードを設定する必要があります。 また、セッションのTLS暗号化を有効にして、「HTTPS」ボックスをオンにしてトラフィックが送信中に傍受されないようにします。

image:https://assets.digitalocean.com/articles/syncthing_1404/authentication.png [同期セキュリティ]

終了したら、下部にある[保存]ボタンをクリックします。

変更を有効にするためにサービスを再起動するように促すメッセージが表示されます。

image:https://assets.digitalocean.com/articles/syncthing_1404/restart.png [同期の再開]

「再起動」ボタンをクリックします。

変更を適切にリロードするには、おそらくページを更新する必要があります。 そうすると、次のようなSSL警告が表示される可能性が高くなります。

画像:https://assets.digitalocean.com/articles/syncthing_1404/ssl_warning.png [同期SSL警告]

これは、SSL証明書に署名したエンティティがブラウザの信頼できる認証局のリストにないことを知らせるだけです。 証明書は自己署名されているため、これが予想されます。 [続行]をクリックして続行しても安全です。

次に、構成したユーザー名とパスワードの認証プロンプトが表示されます。

image:https://assets.digitalocean.com/articles/syncthing_1404/auth_required.png [ユーザー名とパスワードを同期する]

適切な値を入力してログインします。 インターフェイスは外部トラフィックからより安全になりました。

両方のサーバーでこれらの手順を完了します。

2つのサーバーの接続とディレクトリの共有

コンテンツを共有するために、Syncthingは接続の両端で他のサーバーをノードのリストに追加する必要があります。 次に、両側で同期するリポジトリ(ディレクトリ)も追加する必要があります。

ノードを追加するには、コンパニオンノードのIDが必要です。 このIDを取得するには、右上隅の[編集]メニューに移動し、[IDを表示]オプションを選択します。

これにより、コピー可能な長いIDのオーバーレイが表示されます。 また、スマートフォンアプリケーションを構成している場合にQRコードを提供します。 最初のノードのIDをコピーします。

image:https://assets.digitalocean.com/articles/syncthing_1404/node_id.png [同期コピーID]

2番目のサーバーで、「編集」メニューをクリックし、「ノードの追加」を選択します。

他のサーバーを追加するために設定する必要があるフィールドを含むオーバーレイが表示されます。 [ノードID]フィールドに、最初のサーバーからコピーしたIDを貼り付けます。 [ノード名]フィールドで、他のサーバーに使用する説明的な名前を選択します。 「アドレス」を「動的」のままにします。

image:https://assets.digitalocean.com/articles/syncthing_1404/add_node.png [同期ノードの追加]

完了したら、「保存」をクリックして新しいノードを追加します。

この同じプロセスを逆の順序で実行して、両方のサーバーの構成に反対のサーバーがあるようにします。 現時点では、サービスを再起動するリクエストは無視してください。最初にさらに追加の変更を行う予定です。

Webインターフェースでは、接続しているノードが右側に表示されます。 共有しているリポジトリが左側に一覧表示されます。 デフォルトでは、ホームディレクトリに「+ Sync +」というフォルダーが作成され、デフォルトのリポジトリとして機能します。 メニューが圧縮されている場合は、名前をクリックしてリストを展開します。

image:https://assets.digitalocean.com/articles/syncthing_1404/repo.png [Syncthing default repo]

「編集」ボタンをクリックして、レポを設定します。 下部に向かって、構成したノードのいずれかとこのリポジトリを共有するオプションがあります。 反対側のノードに関連付けられているボックスをチェックして、「保存」ボタンをクリックします。

image:https://assets.digitalocean.com/articles/syncthing_1404/share_repo.png [ノードとの共有を同期]

これで、「再起動」ボタンをクリックして変更を実装できます。

image:https://assets.digitalocean.com/articles/syncthing_1404/restart.png [同期の再開]

これで、 `+〜/ Sync +`ディレクトリで行われた変更は、反対側のサーバーにミラーリングされます。 デフォルトでは、これは60秒ごとに同期しますが、これは「設定」メニューで変更できます。

「編集」メニューから「リポジトリを追加」オプションを選択して、ミラーリングするディレクトリを追加できます。 ディレクトリを関連付けるには、「リポジトリID」が各サーバーで同じである必要があります。

結論

この時点で、2つのサーバーを接続し、1つのディレクトリのコンテンツを同期する必要があります。 これを簡単に拡張するには、追加のリポジトリ(ディレクトリ)を追加するか、同期するノードを追加します。

通常のユーザーが書き込みアクセスできないディレクトリにシステムファイルを同期する予定がある場合は、Upstartファイルを変更して、 `+ root +`アカウントまたは必要なアクションを実行するために必要な他のユーザーアカウントを使用する必要があります。