Syncthingとは?VPSでファイル同期を設定する方法

読了時間 6分
Tropic
Syncthingとは?VPSでファイル同期を設定する方法

Syncthing:第三者のクラウドを使わずにデバイス間でファイルを同期する

朝、ノートPCで文書を編集して電源を切りました。夕方、自宅のPCを開くと、最新版がすでにあります。そのファイルはGoogle DriveやDropboxを経由せず、自分のSyncthingノードが受け取ったものです。

Syncthingは、信頼したデバイス間で指定したフォルダーを直接同期し、データの保存場所はユーザー自身が管理します。中央サーバーは必須ではありません。

ただし、2台のコンピューターが同時にオンラインになることがほとんどない場合、変更内容を交換しにくくなります。常時稼働するVPSを使えば、一方のデバイスからファイルを受け取り、後からもう一方へ渡せます。

用途を正しく理解することが重要です。Syncthingはネットワークドライブでも、ブラウザー上のファイルマネージャーでもありません。指定したフォルダーを自動的に複製するためのツールです。

5ステップで始めるSyncthing

最小構成は次のとおりです。

  1. 必要なコンピューターにSyncthingをインストールする。
  2. VPSでもう1つのSyncthingインスタンスを起動する。
  3. SSHトンネル経由でサーバーの管理画面を開く。
  4. デバイス識別子を交換し、接続を承認する。
  5. 共有フォルダーを追加し、同期モードを選び、ファイルのバージョン履歴を有効にする。

Syncthingとは何か、どのように動作するのか

Syncthingは、継続的なファイル同期を行う無料のオープンソースソフトウェアです。Windows、macOS、Linuxのほか、さまざまなデスクトップOSやサーバーOSで動作します。

各インストールには、暗号学的な識別子である固有のDevice IDが割り当てられます。2つのノードがデータ交換を始めるには、互いを追加し、特定のフォルダーへのアクセスを明示的に許可する必要があります。デバイスやファイルを一括管理する共通のSyncthingアカウントはありません。

ファイルが変更されると、Syncthingはファイルをブロックに分割し、チェックサムを比較して、不足している部分だけを転送します。そのため、大きなファイルの一部を少し編集しただけなら、ファイル全体を送り直さずに済むことがあります。

検出サービスはデバイス同士が互いを見つけるために使われますが、ファイルは保存しません。直接接続できない場合、暗号化された通信が、速度の遅いリレーを経由することがあります。

VPSを追加すると何が変わるのか

サーバーがなくても、ノートPCと自宅のPCは直接同期できます。ただし、両方のデバイスが短時間でも同時にオンラインになる必要があります。VPSを追加すると、常に利用できる中継地点を用意できます。

たとえば、朝にノートPCからプロジェクトをサーバーへ送信して電源を切ります。夕方になると、自宅のPCがVPSから新しいバージョンを受け取ります。

Syncthingは、文書、Obsidianのノート、ソースコード、写真、家族用フォルダーの同期に向いています。キャッシュ、node_modules、ビルド成果物は.stignoreで除外するのがおすすめです。稼働中のデータベースや仮想マシンイメージは同期しないほうが安全です。

VPSには、自宅外にデータのコピーを置けるという利点もあります。ただし、それが本格的なバックアップになるのは、バージョン管理と独立したバックアップアーカイブを組み合わせた場合だけです。誤って削除した内容も、すべてのデバイスに広がる可能性があります。

SyncthingとNextcloudのどちらを選ぶべきか

この2つはよく比較されますが、解決する問題は異なります。

比較項目SyncthingNextcloud
モデルフォルダーをデバイス間でコピーするファイルを中央サーバーに保存する
サーバーの必要性不要。VPSは任意必要
ブラウザーでのファイル操作完全なWebドライブはない可能
公開リンクなしあり
共同編集非対応追加可能
最適な用途自分のデバイスで同じフォルダーを維持する個人またはチーム向けクラウド

目立たないバックグラウンド同期が必要ならSyncthingが向いています。Webアクセス、共有リンク、ユーザーアカウント、カレンダー、共同作業が必要ならNextcloudを選びます。

Docker ComposeでSyncthingをVPSにインストールする方法

以下はUbuntu 24.04を搭載したVPS向けの手順です。管理画面はサーバーのローカルアドレスだけで待ち受け、SSHトンネル経由で接続します。

1. Dockerをインストールする

sudo apt update
sudo apt install -y docker.io docker-compose-v2
sudo systemctl enable --now docker

2. ディレクトリとComposeファイルを作成する

sudo mkdir -p /opt/syncthing/data
sudo chown -R 1000:1000 /opt/syncthing/data
cd /opt/syncthing
sudo nano compose.yaml

次の内容を貼り付けます。

services:
  syncthing:
    image: syncthing/syncthing:latest
    container_name: syncthing
    hostname: syncthing-vps
    environment:
      - PUID=1000
      - PGID=1000
      - STGUIADDRESS=
    volumes:
      - ./data:/var/syncthing
    network_mode: host
    restart: unless-stopped

Syncthingの公式イメージを使用しています。hostネットワークモードは直接接続を確立しやすくし、STGUIADDRESSを空にすることで管理画面を127.0.0.1:8384に限定できます。

コンテナを起動します。

sudo docker compose up -d
sudo docker compose ps

3. 同期接続を許可する

アクセスできなくならないよう、最初にSSHを許可します。

sudo ufw allow OpenSSH
sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw enable

22000/TCPは主な同期プロトコル、22000/UDPはQUICで使用されます。管理画面のポート8384を公開する必要はありません。ローカル検出用の21027/UDPも、公開VPSでは通常不要です。

4. SSH経由で管理画面を開く

自分のコンピューターで次のコマンドを実行します。

ssh -L 9999:127.0.0.1:8384 root@SERVER_IP

ターミナルを閉じずに、次のアドレスを開きます。

http://127.0.0.1:9999

画面を開いたら、Actions → Settings → GUIへ進み、ユーザー名とパスワードを設定します。後からドメイン経由で管理画面を利用する場合は、HTTPSリバースプロキシの背後に配置し、認証を無効にしないでください。

5. デバイスとフォルダーを追加する

コンピューターにSyncthingをインストールしてから、次の操作を行います。

  1. コンピューターとVPSの両方でActions → Show IDを選ぶ。
  2. 各ノードのDevice IDを、もう一方のデバイスに追加する。
  3. コンピューターでAdd Folderをクリックし、ディレクトリを選び、サーバーへのアクセスを許可する。
  4. VPSでフォルダーを承認し、たとえば/var/syncthing/Filesのようなパスを指定する。

コンピューターでは、双方向同期のためにSend & Receiveを維持します。VPSではReceive Onlyが便利です。サーバーは引き続き変更を受信し、ノード間で転送できますが、VPS上で誤って行ったローカル変更がネットワーク全体に広がることはありません。

Syncthingがバックアップの代わりにならない理由

1台のデバイスでファイルを削除したり暗号化したりすると、その変更がほかのデバイスにも伝わる可能性があります。そのため、VPSでフォルダー設定を開き、File Versioningを有効にします。

実用的なのは、保存期間を30〜90日に設定したStaggered File Versioningです。リモートノードがファイルを置き換えたり削除したりすると、以前のバージョンが.stversionsへ移動します。古いコピーはディスク容量を消費するため、保存期間を制限してください。

信頼性の高い構成は、次の3層で成り立ちます。

  1. Syncthingが作業用コピーを最新の状態に保つ。
  2. バージョン管理によって、一部の誤操作を元に戻せる。
  3. Syncthingとは独立した場所に、定期バックアップを保存する。

VPSは内容を見ずにファイルを保存できるのか

Syncthingには、信頼されていないデバイス向けのモードがあります。メインのコンピューターでフォルダーにパスワードを設定し、VPS側でReceive Encryptedを選びます。サーバーは暗号化されたデータを保存し、同じパスワードを持つ別の信頼済みデバイスへ転送できます。

ファイルの内容、ファイル名、タイムスタンプ、ディレクトリ構造は隠されます。一方で、共有フォルダーに関する情報と、おおよそのファイルサイズは見える状態です。

開発者は現在もこの機能を実験的なものとしています。パスワードとFolder IDは別の場所に保管してください。失うと、暗号化されたフォルダーを復元できなくなる可能性があります。

Syncthingに必要なVPS構成

負荷はデータ量だけでなく、ファイル数、変更頻度、初回インデックス作成にも左右されます。文書と数十GB程度のデータを扱う個人用ノードなら、通常は次の初期構成で十分です。

  • 1 vCPU;
  • 1 GB RAM;
  • SSDまたはNVMe;
  • ファイルと.stversionsのための余裕を持ったディスク容量;
  • 安定したネットワーク接続。

大規模な写真コレクションや数十万件のファイルを扱う場合は、より多くのリソースが必要です。負荷が最も高くなりやすいのは、初回スキャンとハッシュ計算のときです。

この用途には、tropic.hostの基本的なUbuntu VPSが適しています。小さな構成から始め、コレクションの増加に合わせてリソースを増やせます。ディスク容量を選ぶ際は、現在のフォルダーだけでなく、将来追加されるファイル、一時データ、バージョン履歴も考慮してください。

避けるべき5つのミス

  • ポート8384をインターネット全体に公開する。 初期設定にはSSHトンネルを使い、常時Webアクセスが必要な場合はHTTPS、パスワード、リバースプロキシを使用します。
  • サーバー上のコピーを完全なバックアップだと考える。 バージョン管理を有効にし、独立したバックアップアーカイブを作成します。
  • キャッシュや依存関係を同期する。 不要なディレクトリは.stignoreで除外します。
  • ディスク使用量を監視しない。 .stversionsディレクトリは、時間の経過とともに大きな容量を占めることがあります。
  • 紛失したデバイスを信頼済みのままにする。 ほかのノードから削除し、デバイスキーを含むSyncthingの設定を保護します。

スマートフォンについて知っておくべきこと

公式Androidアプリは2024年末にサポートを終了しましたが、コミュニティ製クライアントは存在します。iOSにも公式クライアントはありません。バックグラウンド動作の制限により、継続的な同期が難しいためです。メインの写真ライブラリを接続する前に、小さなテストフォルダーで選んだモバイルアプリを確認してください。

まとめ

Syncthingは、必須のクラウド仲介サービスに頼らず、複数のデバイスで同じフォルダーを維持したい人に向いています。VPSを追加すると、コンピューターを同時にオンラインにする必要がなくなり、自宅外に常時利用できるコピーも置けます。

安全に設定するには、管理画面を直接公開せず、バージョン管理を有効にし、同期とは独立したバックアップを追加してください。

FAQ

SyncthingにVPSは必要ですか?

いいえ。デバイス同士で直接同期できます。VPSは常時稼働するノードとして、異なる時間にオンラインになるデバイス間の変更交換を可能にします。

Syncthingのファイルをブラウザーで開けますか?

Web管理画面は設定用であり、Google Driveのように文書を閲覧するためのものではありません。Webドライブが必要ならNextcloudのほうが適しています。

Syncthingはバックアップですか?

いいえ。削除や破損がほかのデバイスへ広がる可能性があります。バージョン管理は役立ちますが、独立したバックアップの代わりにはなりません。

ポート8384を開く必要はありますか?

いいえ。管理画面は127.0.0.1:8384のままにして、SSHトンネル経由で接続します。同期には22000/TCP22000/UDPを開放してください。

VPSの所有者はファイルを読めますか?

通常の設定では、読める可能性があります。Receive Encryptedを使えば暗号化された状態で保存できますが、まだ実験的な機能とされており、パスワードとFolder IDを安全に保管する必要があります。