Syncthing シリーズ目次
- Syncthing の使い方:デバイスのペアリングからファイル同期までの実用メモ
- Docker で Syncthing をデプロイする:Compose、ポート、ディレクトリマッピングの注意点
- Syncthing で複数デバイスを構成する方法:ピアネットワーク、スター型トポロジー、Introducer
- Android で Syncthing を使う方法:Syncthing-Fork の設定と写真バックアップ
- Syncthing の複数デバイス・複数フォルダ管理:トポロジー、命名、バージョン管理
- Syncthing で iPhone の写真をコンピューターや NAS に同期する方法
Docker で Syncthing をデプロイする構成は、NAS、家庭用サーバー、VPS によく合います。24 時間稼働する同期ノードとして、写真、文書、Markdown ノート、ダウンロードディレクトリなどを継続的に同期できます。
Docker で Syncthing を動かすときに重要なのは、「コンテナが起動するか」だけではありません。特に次の三点が重要です。
- 設定ディレクトリを永続化すること。
- 同期したいデータディレクトリをホストからコンテナにマッピングすること。
- ポートと権限を事前に整理しておくこと。
ここを曖昧にすると、コンテナ更新後に設定が消えたり、Web UI に入力したパスが実際のホストディレクトリを指していなかったり、同期時に Permission denied が出たりします。
ディレクトリ設計
まずサーバーまたは NAS 上に専用ディレクトリを用意します。
|
|
このディレクトリに docker-compose.yml を置き、Syncthing の設定はサブディレクトリに保存します。
|
|
同期対象のデータディレクトリは、NAS やホスト上の既存パスを使えます。
|
|
設定ディレクトリとデータディレクトリは分けてください。config には Syncthing 自身の設定、鍵、インデックスデータベースが入ります。downloads や photos のようなディレクトリが、実際に同期したいデータです。
方法 1:Docker Compose
長期運用では Docker Compose を使う方が、更新、再起動、移行の見通しがよくなります。
~/syncthing/docker-compose.yml に次の内容を書きます。
|
|
起動します。
|
|
状態を確認します。
|
|
Web UI を開きます。
|
|
初回アクセス後は、まず GUI のユーザー名とパスワードを設定してください。
方法 2:docker run
短時間の検証であれば、docker run でも起動できます。
|
|
/path/to/config と /path/to/data1 は、実際のホストパスに置き換えてください。
例:
|
|
長期的に使うなら Compose に移行しておくと、コンテナを作り直すたびに長いコマンドを組み立て直す必要がありません。
コンテナ内パスとホストパス
Docker で最も混乱しやすいのがパスです。
たとえば Compose に次のように書いたとします。
|
|
左側の /volume1/photos はホストパスです。右側の /var/syncthing/photos はコンテナ内パスです。
Syncthing の Web UI で同期フォルダを追加するときは、フォルダパスにコンテナ内パスを入力します。
|
|
これにより Syncthing が実際に操作するのは、ホスト側の次のディレクトリになります。
|
|
Web UI に /volume1/photos と入力しても、通常そのパスはコンテナ内には存在しません。エラーになるか、意図しない新しいディレクトリがコンテナファイルシステム内に作られる可能性があります。
設定ディレクトリは必ず永続化する
次の行は非常に重要です。
|
|
Syncthing の設定ファイル、デバイス鍵、インデックスデータベースは設定ディレクトリに保存されます。これをホストにマウントしないと、コンテナの削除や再作成でデバイス ID が変わり、既存のペアリング関係が失効することがあります。
設定ディレクトリは、次のような安定したパスに置くのがおすすめです。
|
|
一時ディレクトリには置かず、同期データのディレクトリとも混在させないでください。
ポートとファイアウォール
よく使うポートは次の通りです。
|
|
Syncthing を家庭用 NAS にデプロイする場合は、通常次を確認します。
- NAS のファイアウォールでこれらのポートが許可されているか。
- Docker ブリッジのポートマッピングが正しいか。
- ルーターが Wi-Fi と有線ネットワークを分離していないか。
- スマートフォンとコンピューターが同じサブネットにいるか。
クラウドサーバーにデプロイする場合は、クラウド事業者のセキュリティグループも確認します。特に 22000/TCP と 22000/UDP が許可されていないと、他のデバイスは relay 経由でしか接続できず、速度が大きく低下します。
8384 は管理画面のポートです。インターネットに直接公開するのは避けてください。どうしてもリモート管理が必要な場合は、少なくとも強いパスワードを設定し、できればリバースプロキシ、HTTPS、アクセス制御、VPN と組み合わせます。
権限問題:PUID と PGID
Syncthing の Web UI は開けるのに、同期ディレクトリで次のようなエラーが出る場合があります。
|
|
多くの場合、コンテナプロセスにホストディレクトリの読み書き権限がありません。
まずホストで現在のユーザーの UID と GID を確認します。
|
|
出力例:
|
|
Compose の環境変数を対応する値にします。
|
|
同時に、ホスト側ディレクトリ自体がそのユーザーに読み書きを許可しているか確認します。
|
|
必要であれば所有者や権限を調整します。
|
|
NAS では、共有ディレクトリ全体に対して安易に再帰的な権限変更をしないでください。複数人で使っている共有では特に危険です。Syncthing 専用の同期ディレクトリを用意するか、NAS の権限管理画面で該当ユーザーに権限を付与する方が安全です。
Web UI の初回セキュリティ設定
コンテナ起動後、次にアクセスします。
|
|
初回アクセス時、Syncthing は通常 GUI のユーザー名とパスワード設定を促します。この手順は省略しないでください。
推奨設定:
- すぐに GUI ユーザー名と強いパスワードを設定する。
8384をインターネットに公開しない。- リモートアクセスは VPN、SSH トンネル、制御されたリバースプロキシを優先する。
- リバースプロキシを使う場合は Web UI のみを代理し、不要なポートを誤って開放しない。
管理画面を第三者に操作されると、デバイスの追加、共有フォルダの変更、同期関係の変更が可能になります。Syncthing の同期データ転送は暗号化されていますが、管理入口そのものは別途保護が必要です。
Web UI で同期ディレクトリを追加する
写真ディレクトリを例にします。Compose ではすでに次のようにマウントしています。
|
|
Web UI でフォルダを追加するときは、次のように設定します。
- Folder Label:
Photosなど。 - Folder ID:
photosのような安定した英数字 ID。 - Folder Path:
/var/syncthing/photos。 - Sharing:共有先のデバイスを選択。
- Folder Type:用途に応じて
Send & Receive、Send Only、Receive Onlyを選択。
この Docker ノードが NAS の中心ノードであれば、よくある設定は次の通りです。
- 通常の文書:
Send & Receive - スマートフォン写真の集約:NAS 側で
Receive Only - 配布用ディレクトリ:NAS 側で
Send Only
どれを選ぶかはデータの流れで決めます。すべてのフォルダを何も考えず双方向同期にするのは避けましょう。
コンテナの更新
Compose を使っている場合、更新は通常次のように行います。
|
|
設定ディレクトリとデータディレクトリが正しくマウントされていれば、コンテナを更新してもデバイス ID、ペアリング関係、同期フォルダ設定は失われません。
更新前に設定ディレクトリをバックアップしておくこともできます。
|
|
設定ディレクトリにはデバイス秘密鍵が含まれます。バックアップファイルを公共の場所へ安易にアップロードしないでください。
よくある問題
Web UI が開けない
まずコンテナが動作しているか確認します。
|
|
次にポートマッピングを確認します。
|
|
コンテナが正常でも開けない場合は、ホストのファイアウォール、NAS のファイアウォール、クラウドサーバーのセキュリティグループを確認します。
追加したディレクトリが存在しないと言われる
Web UI に入力したパスがコンテナ内パスか確認してください。
たとえばホストパスが次の場合:
|
|
コンテナ内パスが次の場合:
|
|
Web UI には後者を入力します。
Relay 経由のみで速度が遅い
まず次を確認します。
22000/TCPが許可されているか。22000/UDPが許可されているか。- ルーターのポート転送が正しいか。
- クラウドサーバーのセキュリティグループが TCP と UDP の両方を許可しているか。
- ローカルファイアウォールが Docker のマッピングポートをブロックしていないか。
Relay は接続性を高めますが、大量の同期トラフィックを長期的に任せる用途には向きません。
同期後のファイル権限がおかしい
まずコンテナの実行ユーザーが正しいか確認し、次にホストディレクトリの権限を確認します。Linux、NAS、Windows 共有フォルダでは権限モデルが異なります。Syncthing を権限修復ツールとして使わないでください。
複数 OS 間で同期する場合は、通常のファイルとディレクトリを対象にし、複雑な ACL、所有者、拡張属性に依存するシステムディレクトリは避けるのが無難です。
より安定した使い方
NAS やサーバーを中心ノードとして使うなら、次のように設計できます。
- NAS 上で Docker により Syncthing を実行する。
- 設定ディレクトリを
/volume1/docker/syncthing/configにマウントする。 - データ種別ごとに個別にマウントする。例:
/volume1/photos、/volume1/notes。 - スマートフォンやコンピューターから NAS のデバイス ID を追加する。
- 重要なディレクトリでは NAS 側でファイルバージョン管理を有効にする。
- Web UI は LAN または VPN 内からのみアクセスする。
- NAS 自体にも独立したバックアップを用意し、同期を唯一のバックアップにしない。
この構成では、Syncthing がデバイス間同期を担当し、NAS が常時稼働とバージョンの緩衝役を担います。本当のバックアップは、スナップショット、外付けディスク、オフサイトバックアップに任せます。
まとめ
Docker で Syncthing をデプロイするときの要点は、「コンテナのライフサイクル」と「同期データのライフサイクル」を分離することです。
コンテナはいつでも更新、再作成、移行できます。しかし設定ディレクトリとデータディレクトリは、ホスト上に安定して保持する必要があります。Web UI ではコンテナ内パスを入力し、ホスト側の権限は PUID、PGID、ディレクトリ権限で処理し、ポートは実際のネットワーク環境に合わせて開放します。
このあたりを明確にしておけば、Syncthing は NAS、サーバー、個人デバイス間の軽量な同期レイヤーとして非常に使いやすくなります。