なかなか面白いツールを見つけました。Syncthingによって、PC間ファイルの同期を行ってみます。コンテナが用意されているので、こちらをメインで検討します。
Syncthing とは
Syncthing はコンピュータ間でフォルダ・ファイルを同期するソフトウェアです。直接通信可能であれば、他のサーバーを経由することなくファイル同期ができるということで、クラウドストレージにおくことに抵抗がある人でも使えそうです。また直接通信ができない場合でも、リレーサーバーが用意されている(有志が動かしている?)ので、同期が可能となっているところも面白いです。
動作環境
以下の環境に対応しているようです
- Windows
- MacOS
- Linux 各種
- Android
また冒頭にも記載しましたが Dockerコンテナの用意もあるので、Linux系OS使用時にはコンテナを使ってもよさそうです。
コンテナで起動する
今回は Windows – Linux 間でファイルを同期します。Windows環境では Docker Desktopありの状態でセットアップしてみましたが、ファイル検出のところでパフォーマンスが悪いので、Windowsで使う場合には、ネイティブで動作させるほうがよさそうです。
Windows版を使う場合にはこちらからインストーラーを取得するようです。
Dockerでサービスを作っていく場合には、以下の compose.yml ファイルを用意します。Linuxで普段使用しているユーザーのUID/GIDを調べて、下記yamlファイルのPUID/PGIDの部分は適切に変更してください。
services:
syncthing:
image: syncthing/syncthing:1.27
container_name: syncthing
hostname: syncthing-1
environment:
- PUID=1000
- PGID=1000
volumes:
- ./data:/var/syncthing
ports:
- 8384:8384 # Web UI
- 22000:22000/tcp # TCP file transfers
- 22000:22000/udp # QUIC file transfers
- 21027:21027/udp # Receive local discovery broadcasts
network_mode: host
この設定では、composeファイルのある場所の “data” ディレクトリを同期対象とします。そして、コンテナとしてはあまり一般的ではない network_mode: host の設定を使います。これは同一ネットワーク内にある他のPCと直接接続をしたいので、このようにしています。
このComposeファイルを用意して、以下のコマンドで起動します。
docker compose up -d
初期設定
コンテナを起動し、8384ポートで待ち受けしているWebUI にアクセスしましょう。初期状態ではパスワードなしで動いているため、警告画面が表示されていることと思います。設定画面からアカウント情報を更新することをオススメします。
さて、同期をするためには最低でもペアになる他のデバイスが必要です。そのため、ここまでの設定と同じ手順をサブPCで進めて準備しておきます。このとき、ホスト名の箇所「hostname: syncthing-1」のところは別の名前に変更しておくようにしましょう。
デバイスの登録
「このデバイス」の箇所をクリックすると、そのデバイス・PCの情報を表示できます。IDという項目があり、ここをクリックすると完全なIDが表示されます。
このID情報を、もう一方のデバイス側に対応するWeb画面で入力します。そちらのWeb画面にて、「接続先デバイスを追加」のボタンを押して、先ほどコピーしたIDを入力します。
ここで共有タブの設定は次の項目を参照して下さい。
同期フォルダの選択
デバイスの追加画面で見えている共有タブから、同期対象フォルダを選択できます。非共有のフォルダーというところがとても違和感を感じますが、ここに列挙されているフォルダにチェックを入れると同期対象となります。
この画面と同様のものを出すには、フォルダーの編集ボタンを押します。そして、そこに出現する共有タブから設定を行います。
共有元の画面にもどる
共有元の画面では、以下のようなメッセージが出ている(ことがある)ので、これを承認するようにして、同期を開始しましょう。デバイスの追加だけでなく、フォルダの共有のタイミングでもこれと同様の画面が出るようです。
その他の話題
ここではコンテナとして動作させる方法を選択しました。そこで何を犠牲になるかを振り返ってみます。
フォルダの自由度
コンテナ環境にマウントしたディレクトリしか共有対象として意味がない、という状態になっています。syncthingは自由にフォルダを登録できますが、永続化しているのはマウントしているディレクトリになるためです。
直接システムにインストールしている場合には、自由にフォルダを追加・選択できるので便利かもしれません。コンテナで頑張る場合には、マウント箇所を増やす、になるでしょうか。
ネットワークの隔離度
直接ファイル同期をさせるべく、ネットワーク隔離をせずに networkモードに host を使っています。定番の方法でコンテナを起動すると、別ネットワークが割当たるため、LAN内であっても直接通信ができないのです。この場合でも、外部のサーバーを経由して(リレーして)、同期自体はできますが、外のネットワークにデータが出てしまうという点では嬉しくないこともあるでしょう。
ファイル監視について (Windowsのみ
Windows環境でコンテナ経由動作においてフォルダをバインドマウントして共有させている場合の課題です。syncthingの定期的なファイルスキャンではファイル更新が判定されますが、準リアルタイム的な監視は機能しません。Linuxの場合にはこの挙動とならず、理想的に動いています。
この点からもWindowsでは、インストーラー版などのネイティブなものを使った方が幸せになれそうです。上記の画面に示す、「フルスキャンの間隔」について短くするということでもある程度の対応はできそうではあります。
コメント