Ubuntu 14.04でディレクトリを同期させるためにSyncthingをインストールして設定する方法
紹介
異なるコンピュータ間でファイルを同期させることができるプログラムはたくさんあります。Syncthing は、クロスプラットフォームで、完全にオープンソースで、非常に柔軟で、使いやすい新しい魅力的なオプションです。
このガイドでは、2つのUbuntu 14.04サーバーインスタンス間でデータを同期するためにSyncthingを使用する方法を示します。これにより、設定された「監視」ディレクトリに基づいて、これらのサーバー間でファイルをシームレスに同期することができます。
前提条件と目標
このガイドを完了するには、2つのUbuntu 14.04サーバーインスタンスへのアクセスが必要です。
このガイドの目的のために、これらのサーバーを次のように呼びます:
- サーバーワン
- サーバー二
これらは対等なパートナーとなるため、主従関係はありません。これらの各システムには、通常のユーザーアカウントが設定されている必要があります(Ubuntu 14.04の初期サーバーセットアップガイドの手順1〜4に従って、設定方法を確認できます)。
このガイドでの通常のユーザーアカウントはdemouserと呼ばれますが、好きなユーザー名を使用しても問題ありません。これは通常の非ルートアカウントと別である必要はありません。
これらの機械のそれぞれにSyncthingをインストールして設定し、ファイルを共有できるようにします。このガイドに示されている手順を完了した後、各々のサーバーには、もう一方のコンピュータに変更をミラーリングするディレクトリがある状態になるはずです。
私たちは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のウェブインターフェースは同じコンピュータからの接続にのみ利用可能です。これでは、リモートサーバーを扱っている私たちの目的には合いません。
これを修正するために、Syncthingの設定ファイルの1行を編集する必要があります。しかし、設定ファイルはまだ作成されていません。
ファイルを自動的に作成するために、サービスを一時的に起動できます。これを実行するには、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>0.0.0.0:8080</address>
</gui>
終了したらファイルを保存して閉じてください。後でウェブインターフェースを通じてより広範な設定を行います。
再度、設定している両方のサーバーでこれらの手順を完了してください。
サービス状態を管理するためのUpstartスクリプトを作成する
次に、プロセスを管理するためのUpstartスクリプトを実装します。これにより、サーバーが起動するときにSyncthingプロセスを自動的に開始することができます。また、セッションを占有することなく、サービスとして実行することもできます。
使用するUpstartスクリプトは、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/demouser
setuid "demouser"
setgid "demouser"
exec /usr/local/bin/syncthing
respawn
これが何を意味するのか見てみましょう。
サービスの一般的な説明から始めます。次に、サービスがいつ開始され、いつ停止されるべきかを定義します。ここでは、ファイルシステムと非ローカルネットワークインターフェースが起動した後にサービスを開始するようにシステムに指示しています。システムが通常のランレベルのいずれかを離れると、サービスは停止します。
次に、Syncthingが自分のメカニズムを使用して再起動しないように指示する環境変数を設定します。これは、実際には古いプロセスをクリーンアップせずに毎回新しいプロセスを生成するためです。これを回避するために、後ほどこのUpstartスクリプト内で再起動機能を実装します。
次の環境変数は、Syncthingが使用するホームディレクトリを設定します。これは、正しい設定ファイルを見つけてGUIのフィールドを事前に入力するために使用されます。また、それぞれsetuidおよびsetgidパラメータを使用してユーザーとグループを指定します。これらの3つの値すべてを変更して、あなたのユーザーの情報を指すようにしてください。
次に、実行するコマンドへのパスを設定します。最後に、respawnを使用して、プロセスが早期に停止した場合にUpstartに自動的にプロセスを再起動するよう指示します。これは、Syncthingプロセスが内部的に自分自身を再起動しようとするときに、プロセスを自動的に(クリーンに)再起動するために使用されます。
終わったら、ファイルを保存して閉じてください。
サービスを開始するには、次のように入力してください:
sudo initctl start syncthing
両方のサーバーで上記の手順を完了してください。
Web UIでのセキュリティ設定
私たちはついにウェブユーザーインターフェースを通じてインスタンスを設定する準備が整いました。
各サーバーのSyncthingインターフェイスにログインするには、それらのパブリックIPアドレスとポート8080にアクセスしてください:
http://server1_public_IP:8080
http://server2_public_IP:8080
メインのSyncthing画面が表示されます。
最初に私たちがすべきことは、インターフェイスにいくつかのセキュリティを追加することです。右上隅の「編集」メニューに移動し、「設定」項目をクリックしてください:
右側では、ウェブインターフェースのユーザー名とパスワードを設定する必要があります。また、トラフィックが転送中に傍受されないように、セッションのためにTLS暗号化を有効にしたいので、「HTTPS」ボックスをチェックします。
完了したら、画面の下にある「保存」ボタンをクリックしてください。
変更を有効にするためにサービスを再起動するよう促すメッセージが表示されます:
「再起動」ボタンをクリックしてください。
おそらく、変更が正しく再読み込みされるようにページをリフレッシュする必要があります。その際、このようなSSL警告に遭遇する可能性が非常に高いです:
これは、SSL証明書に署名したエンティティがあなたのブラウザの信頼された証明書機関のリストにないことをお知らせするものです。これは証明書が自己署名されているため、予想されることです。「それでも続行」をクリックしても安全です。
次に、設定したユーザー名とパスワードの認証プロンプトが表示されます:
適切な値を入力してログインしてください。 あなたのインターフェースは、外部のトラフィックからより安全になりました。
両方のサーバーでこれらの手順を完了してください。
2つのサーバーを接続し、ディレクトリを共有する
コンテンツを共有するために、Syncthingは接続の両端で他のサーバーをノードのリストに追加する必要があります。その後、両方の側は同期するためのリポジトリ(ディレクトリ)も追加する必要があります。
ノードを追加するには、コンパニオンノードのIDが必要です。このIDは、右上隅の「編集」メニューに移動し、「IDを表示」オプションを選択することで取得できます。
これにより、コピーできる長いIDを含むオーバーレイが表示されます。また、スマートフォンアプリを設定している場合に備えてQRコードも表示されます。最初のノードのIDをコピーしてください。
2番目のサーバーで「編集」メニューをクリックし、「ノードを追加」を選択してください。
他のサーバーを追加するために設定する必要があるフィールドのあるオーバーレイが表示されます。「ノードID」フィールドに、最初のサーバーからコピーしたIDを貼り付けます。「ノード名」フィールドでは、他のサーバーに使用したい任意の説明的な名前を選択します。「アドレス」は「動的」のままにしておきます。
完了したら、「保存」をクリックして新しいノードを追加します。
このプロセスを逆の順序で実行して、両方のサーバーがそれぞれのサーバーを構成に持つようにします。今のところ、サービスを再起動するリクエストは無視してください。なぜなら、最初にいくつかの追加の変更を行う予定だからです。
ウェブインターフェースでは、接続されているノードが右側に表示されます。共有しているリポジトリは左側にリストされています。デフォルトでは、ホームディレクトリにSyncという名前のフォルダーが作成され、デフォルトのリポジトリとして機能します。メニューが圧縮されている場合は、その名前をクリックしてリストを展開してください。
リポジトリを設定するには、「編集」ボタンをクリックしてください。下の方に、設定したノードのいずれかとこのリポジトリを共有するオプションがあります。対になるノードに関連付けられたチェックボックスをチェックし、次に「保存」ボタンをクリックしてください:
今、変更を適用するために「再起動」ボタンをクリックできます:
今、~/Sync ディレクトリで行われた変更は、対向サーバーに反映されます。デフォルトでは、これが60秒ごとに同期されますが、「設定」メニューで変更することができます。
ミラーリングしたい追加のディレクトリを、“編集” メニューから “リポジトリの追加” オプションを選択することで追加できます。ディレクトリを関連付けるには、各サーバーで “リポジトリ ID” が同じである必要があります。
結論
この時点で、2台のサーバーが接続されて、単一のディレクトリの内容を同期しているはずです。追加のリポジトリ(ディレクトリ)を追加するか、追加のノードを追加して同期することで、これを簡単に拡張できます。
一般のユーザーが書き込みアクセスを持たないディレクトリにシステムファイルを同期する予定がある場合、必要なアクションを実行するために root アカウントやその他のユーザーアカウントを使用するように Upstart ファイルを修正する必要があるでしょう。











