序章

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

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

前提条件と目標

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

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

  • serverone
  • servertwo

これらは対等なパートナーになるため、一次/二次関係はありません。 これらのそれぞれに通常のユーザーアカウントを設定する必要があります(Ubuntu 14.04 初期サーバーセットアップガイドの手順1〜4に従って方法を確認できます)。

このガイドの通常のユーザーアカウントは demouser、ただし、任意のユーザー名を使用する必要があります。 これは、通常の非rootアカウントとは別にする必要はありません。

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

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

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

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

最新のパッケージバージョンを見つけるには、GitHubリリースページにアクセスしてください。 下部には、オペレーティングシステムの種類ごとにボタンがあります。

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

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

cd ~
wget https://github.com/calmh/syncthing/releases/download/v0.8.15/syncthing-linux-amd64-v0.8.15.tar.gz

これで、次のように入力して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

The 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>

行う必要がある唯一の変更は、ローカルホストアドレスを置き換えることです(127.0.0.1) と 0.0.0.0、すべてのネットワークインターフェイスを表します。 終了すると、このセクションは次のようになります。

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

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

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

サービス状態を処理するためのアップスタートスクリプトを作成する

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

使用するUpstartスクリプトは、Syncthingディスカッション掲示板投稿から取得されます。 次のように入力して、エディタでroot権限で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/demouser
setuid "demouser"
setgid "demouser"

exec /usr/local/bin/syncthing

respawn

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

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

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

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

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

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

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

sudo initctl start syncthing

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

WebUIでのセキュリティの設定

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

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

http://server1_public_IP:8080
http://server2_public_IP:8080

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

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

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

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

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

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

変更を正しくリロードするには、おそらくページを更新する必要があります。 これを行うと、次のようなSSL警告が発生する可能性があります。

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

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

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

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

2台のサーバーを接続してディレクトリを共有する

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

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

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

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

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

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

この同じプロセスを逆の順序で実行して、両方のサーバーの構成に反対のサーバーが含まれるようにします。 最初にさらにいくつかの追加の変更を行うため、当面は、サービスを再起動する要求を無視してください。

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

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

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

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

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

結論

この時点で、2つのサーバーが接続され、1つのディレクトリの内容が同期されているはずです。 これは、リポジトリ(ディレクトリ)を追加するか、同期するノードを追加することで簡単に拡張できます。

通常のユーザーが書き込みアクセス権を持たないディレクトリにシステムファイルを同期することを計画している場合は、Upstartファイルを変更して root アカウントまたは必要なアクションを実行するために必要なその他のユーザーアカウント。