VPSのファイル同期はSyncthingとNextcloudどちら?
Syncthingはサーバーに権威あるコピーを置かず、Nextcloudはアカウントや共有リンクを備えたサーバーです。VPSに適した構成と、どちらもバックアップではない理由を解説します。
Syncthing vs Nextcloud: 違いを決める構造
Syncthing と Nextcloud の違いは、1 つの構造上の違いに集約されます。その他の違いも、すべてここから生じます。Syncthing は peer to peer です。すべてのデバイスがフォルダー全体を保持し、どのコピーも権威あるコピーにはなりません。Nextcloud はサーバーです。1 台のマシンがファイルを保持し、その前段にユーザーアカウントがあり、クライアントはコピーをダウンロードします。
そのため、Syncthing には共有リンクも、ドキュメントを Web で表示する機能もありません。提供元となる中央のコピーがないため、ブラウザーが要求する対象もありません。Nextcloud にはその両方があります。ただし、そのためには PHP ランタイム、データベースサーバー、Web サーバー、TLS (transport layer security) 用のリバースプロキシが必要です。
関係するすべてのデバイスを自分で管理している場合は Syncthing を選びます。ブラウザーや他のユーザーがファイルにアクセスする必要がある場合は Nextcloud を選びます。
各構成で VPS が実際に担う役割
Nextcloud を実行する VPS は、データの保管場所です。ノート PC 上のローカルコピーを削除しても、ファイルはサーバー上に残ります。サーバーが最初から元のデータを保持しているためです。
Syncthing を実行する VPS は、別の役割を担います。常時稼働するピアとして動作します。Syncthing は、同じ時刻にオンラインになっている 2 台のデバイス間でデータを直接転送します。そのため、同時に電源が入ることのない 2 台のノート PC は、どれだけ待っても同期できません。常時稼働する VPS を 3 台目のピアとして追加すると、この問題は解消します。ノート PC A が 09:00 にデータを送信し、ノート PC B が 22:00 にデータを取得する間、VPS がフォルダーを保持します。
これは実際に役立つ役割です。ただし、「Dropbox の代替」と呼ぶよりも範囲は限定されます。Syncthing では、クライアントに送るリンクを作成できません。それが必要なら、ここで止めて自己ホスト型 Dropbox 代替サービスの比較を読んでください。
小規模 VPS で必要になるコスト
Syncthing は単一の Go バイナリです。ソケットで待ち受け、ローカルデータベースにファイルのインデックスを保持します。構成要素はこれだけです。バージョン 2.0 以降、このインデックスには LevelDB ではなく SQLite が使われます。そのため、1.x のインストールからアップグレードすると、初回起動時に 1 回だけ移行が実行されます。大量のフォルダーを扱う場合、この移行には長時間かかることがあります。完了するまで待ってください。ほかにインストールが必要なものはなく、パッチを適用する対象もありません。
Nextcloud には、より多くの構成要素が必要です。2026 年 8 月時点で、Nextcloud 35 は PHP 8.3 から 8.5 をサポートし、背後で MariaDB または PostgreSQL を使用します。Apache 2.4 または nginx が php-fpm を介して配信します。管理者マニュアルでは「プロセスごとに最低 512MB の RAM」を推奨しています。php-fpm は複数のワーカープロセスを同時に実行します。
1 GB の VPS では、Syncthing には十分な余裕がありますが、Nextcloud は厳しい構成になります。だからといって、Nextcloud が誤った選択になるわけではありません。必要な構成要素が 1 つではなく 4 つになり、最新状態を維持する負担が増えるということです。Docker、TLS、バックアップを扱う VPS 上の Nextcloud ガイドで説明しているコンテナー構成が、この負担を抑える最も簡単な方法です。さらにブラウザー上の文書編集を追加すると、必要なリソースの下限はもう一段上がります。2 から 4 GB のサーバーを対象に、OnlyOffice と Collabora の比較でその点を詳しく説明しています。
VPS に Syncthing をインストールする
Ubuntu には syncthing パッケージが用意されていますが、upstream より大幅に古いバージョンです。プロジェクト独自のリポジトリを使用します。
sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthing
syncthing --versionsyncthing --version の出力は、syncthing v2 で始まる行を含むはずです。そこに v1 と表示される場合、apt はまだディストリビューションのパッケージを優先しています。upstream のリポジトリに優先順位を設定し、その後もう一度インストールします。
printf "Package: *\nPin: origin apt.syncthing.net\nPin-Priority: 990\n" | sudo tee /etc/apt/preferences.d/syncthing.pref通常のユーザーアカウントで system service として実行します。これにより、誰もログインしていなくてもブート時に起動します。
sudo systemctl enable --now syncthing@youruser.service
systemctl status syncthing@youruser.servicesystemctl status の出力は active (running) になるはずです。設定ファイルとインデックスファイルは /home/youruser/.local/state/syncthing に保存され、設定ファイルは config.xml です。Syncthing 1.27 より前に作成されたインストールでは、これらが ~/.config/syncthing に保存されます。そのため、マシン間でファイルをコピーする前に両方のパスを確認してください。
次にポートを開放します。Syncthing は同期プロトコルに 22000/TCP、QUIC トランスポートに 22000/UDP、ローカル検出に 21027/UDP を使用します。検出にはブロードキャストとマルチキャストを使用しますが、これらはインターネットを越えません。そのため、VPS では最初の2つのポートだけが必要です。
sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw statusufw status には両方のルールが表示されるはずです。Status: inactive と表示される場合、ufw は何もフィルタリングしておらず、適用されているファイアウォールはプロバイダーのネットワークファイアウォールだけです。そのパネルも確認してください。ほとんどのホストでは、これは別の制御機構です。サービスが実行中なのにリモートデバイスが Disconnected のままになる場合、通常はその2つのファイアウォールのいずれかで、まだポートが閉じています。
Syncthing GUI を公開せずに利用する
Web GUI(グラフィカルユーザーインターフェース)はデフォルトで 127.0.0.1:8384 で待ち受けるため、サーバー自身からの接続にだけ応答します。このデフォルト設定は保護機能として有効です。GUI には、そのサーバー上のすべてのフォルダーのパスを書き換えられる API(アプリケーションプログラミングインターフェース)キーが含まれるためです。
最初から全公開しないでください。ネットワークアドレスにバインドした場合の効果について、ドキュメントは明確に説明しています。「コンピューターの LAN アドレスを指定しても、ローカルネットワーク上のデバイスだけにアクセスを制限することはできません」。代わりに、ノートパソコンから SSH 経由でポートを転送します。
ssh -L 8384:127.0.0.1:8384 youruser@your.vps.exampleSSH セッションが維持されている間に、ローカルブラウザーで http://127.0.0.1:8384 を開きます。トンネルは SSH セッションの終了とともに閉じるため、その後も待ち受けが残ることはありません。
GUI に直接アクセスする必要がある場合は、先に認証情報を設定してください。サーバー上にブラウザーはないため、コマンドラインから設定します。
sudo systemctl stop syncthing@youruser.service
sudo -H -u youruser syncthing generate --gui-user=admin --gui-password=-
sudo systemctl start syncthing@youruser.service-H は重要です。これを指定しないと sudo は root のホームディレクトリを使用するため、誤った config.xml を編集することになります。パスワード値に単一のハイフンを指定すると、syncthing generate は標準入力からパスワードを読み取ります。これにより、パスワードをシェルの履歴に残さずに済みます。また、値はファイルに書き込まれる前にハッシュ化されます。ログインできるようになったら、GUI の設定で HTTPS を有効にしてください。
Syncthing が誤操作まで伝播させる理由
Syncthing の FAQ 自体がバックアップに関する疑問に答えています。「Syncthing は優れたバックアップアプリケーションではありません。ファイルへのすべての変更(変更、削除など)が、すべてのデバイスに伝播されるためです。」
ノートパソコンで誤ってフォルダーを削除すると、Syncthing は設計どおりに動作します。数秒で、そのフォルダーをすべての場所から削除します。同期とは状態を一致させることであり、ファイルが存在しないという状態も一致させる対象です。
この問題への対策はファイルのバージョン管理ですが、有効化しない限り無効です。ドキュメントには、バージョン管理の既定値は「ファイルのバージョン管理なし」、つまり「古いファイルのコピーを保持しない」と記載されています。フォルダーごとに 4 つの方式を利用できます。Trash Can は、リモート側の変更によって削除または置き換えられた各ファイルのコピーを 1 つ保持します。Simple は、ファイルごとに指定した数の古いバージョンを保持します。Staggered は、履歴が古くなるにつれて間引きます。1 日分は毎時のコピーを、1 か月分は毎日のコピーを保持し、その後も同様に扱います。External では、各判断を自分で作成したコマンドに委ねます。古いコピーは共有フォルダー内の .stversions ディレクトリに保存されます。
VPS のピアでは Staggered を設定し、ノートパソコンではバージョン管理を無効のままにします。常時稼働するピアが履歴を保持するため、ノートパソコン側を軽量に保てます。
Nextcloud はこの点をより適切に処理しますが、それでもバックアップではありません。削除したファイルはごみ箱に移動し、編集内容は Versions アプリで保持されます。ただし、ディスク容量が少なくなると、どちらも自動的に削減されます。ノートパソコン上のプロセスがファイルを暗号化する場合、暗号化されたバージョンが同期され、正常なコピーも独自のスケジュールで古くなって削除されます。
どちらのツールを使う場合も、その下に実際のバックアップが必要です。スナップショットを別のプログラムで取得し、同期クライアントからアクセスできない場所に保存します。さらに、復元が機能することを確認するため、少なくとも 1 回は復元を実行します。restic と BorgBackup の比較では、データディレクトリに対してどちらを使用するかを説明しています。
2 つのツールで競合の扱いが異なる点
どちらのツールも、同期の間に同じファイルを 2 つの側で変更すると、競合ファイルを作成します。異なるのは、そのファイルを誰が確認するかです。
Syncthing は、負けた側のコピーを <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext> に名前変更します。変更時刻が古いコピーが負けます。時刻が同じ場合は、デバイス ID の先頭 63 ビットの値が大きいデバイスが負けます。この判定は任意ですが、すべての peer で同じ結果になります。さらに注意が必要なのは、これらのファイルが「作成後は通常のファイルとして扱われるため、デバイス間で伝播する」ことです。すべての peer が競合コピーを受け取ります。削除すれば、その 1 回の削除が同期されますが、最初にすべてのマシンでそのファイルを確認することになります。
Nextcloud desktop client は、たとえば mydata (conflicted copy 2018-04-10 093612).txt のような <name> (conflicted copy YYYY-MM-DD HHMMSS).<ext> を作成します。デフォルトでは、そのファイルをアップロードしません。client のマニュアルでは、その理由として、変更を行ったユーザーが競合を解決するのに最も適しており、他のユーザーに競合を表示すると混乱を招くだけだと説明しています。反対の動作にする場合は、client の環境に OWNCLOUD_UPLOAD_CONFLICT_FILES=1 を設定します。
つまり、Syncthing の競合はクラスター全体に影響するイベントですが、Nextcloud の競合は 1 台の desktop にとどまります。
フォルダータイプでサーバー上のSyncthingをより安全にする
Syncthingには3種類のフォルダータイプがあります。VPSで適切なタイプを選ぶと、さまざまな操作ミスを防げます。
- Send & Receiveはデフォルトです。変更内容が双方向に反映されます。
- Send Onlyは、クラスターから送られた変更をすべて無視します。デバイスから一方向にのみ公開する場合に使用します。同期状態から外れると、GUIに赤い「Override Changes」ボタンが表示されます。このボタンを押すと、ローカルの状態がすべてのデバイスに反映されます。
- Receive Onlyは、クラスターからの変更を適用しますが、ローカルでの編集内容を送り返しません。アーカイブとして動作するVPSで使用します。そこでローカル編集を行うと、代わりに赤い「Revert Local Changes」ボタンが表示されます。
VPS上のReceive OnlyフォルダーでStaggered versioningを有効にすると、バージョン管理されたミラーを作成できます。ノートパソコンでの削除も、正当なクラスターの変更として適用されます。ただし、古いコピーは消失せず、.stversionsに保存されます。
どれを選ぶべきか
以下の 7 行では、この疑問が実際に生じる理由を取り上げます。
The data behind this chart
[
{
"label": "Keep two of my own laptops in sync",
"pick": "Syncthing",
"notes": "No accounts to manage. The VPS is the peer that is always awake."
},
{
"label": "Send a download link to a client",
"pick": "Nextcloud",
"notes": "Syncthing has no public link sharing at all."
},
{
"label": "Open a file from a borrowed browser",
"pick": "Nextcloud",
"notes": "The Syncthing GUI shows sync state, never file contents."
},
{
"label": "Sync 200 GB between machines I own",
"pick": "Syncthing",
"notes": "Peers transfer directly. The VPS copy is optional."
},
{
"label": "Phone photo upload with a store app",
"pick": "Nextcloud",
"notes": "The official Syncthing Android app ended in December 2024."
},
{
"label": "Calendar and contacts alongside files",
"pick": "Nextcloud",
"notes": "Syncthing syncs files. That is the entire feature set."
},
{
"label": "1 GB VPS with nothing else to spare",
"pick": "Syncthing",
"notes": "One Go binary against PHP plus a database plus a web server."
}
]最初の行を確認してください。自分の 2 台のノートパソコンを同期する場合は Syncthing が適しています。この場合、VPS は常時稼働する同期相手として役立ちます。ブラウザー、リンク、または他の人が関わる行では、すべて逆の選択になります。
Nextcloud が有力でも、その構成規模が気になる場合は、次に Seafile と Nextcloud の比較 を読んでください。Seafile は、異なる同期エンジンを使いながら、サーバーモデルを維持します。
同じ VPS 上で両方を実行する
両者は排他的なものではありません。Syncthing で自分のマシン間のファイルを移動し、Nextcloud で共有とカレンダーを管理する構成は一般的です。
併用する場合のルールは 1 つです。Syncthing の同期先に Nextcloud のデータディレクトリを指定しないでください。Nextcloud はすべてのファイルをデータベースで管理しているため、外部からディスク上に追加されたファイルは、データベースが追いつくまで Web インターフェースに表示されません。Nextcloud のインストールディレクトリから、次のコマンドを実行します。
sudo -u www-data php occ files:scan --allこのコマンドは、スキャンしたファイルとフォルダーの数を表示します。タイマーで定期的に実行する方法は回避策であり、適切な設計ではありません。各ツールには専用のディレクトリを割り当ててください。そもそもそのサーバーで何をホストするかをまだ決めていない場合は、先に同期ツールを選ぶよりも、2026 年にセルフホストするもののガイドから始める方が適切です。
FAQ
Syncthing は Dropbox の代わりになりますか?
自分のデバイス間でファイルを同期する用途に限れば可能です。Syncthing には公開共有リンクもユーザーアカウントもありません。また、ブラウザーが取得できる中央コピーが存在しないため、Web インターフェースにファイルの内容が表示されることもありません。公式 Android アプリは 2024 年 12 月のリリース後に提供終了となり、Play Store からも削除されています。そのため、現在のスマートフォン対応はコミュニティフォークに依存します。誰かにリンクを送る必要がある場合はサーバーが必要であり、Nextcloud などの導入が必要です。
Syncthing はバックアップですか?
いいえ。プロジェクトも明確にそう説明しています。削除や変更はすべてのデバイスに反映されるため、誤って削除すると数秒以内に全デバイスから消えます。フォルダーごとにファイルバージョニングを有効にし、常時稼働するピアでは特に Staggered を使うと、.stversions ディレクトリを通じて復旧できる期間を確保できます。ただし、別のツールで別のストレージに取得するスナップショットの代わりにはなりません。
Syncthing の Web GUI でファイルを表示できないのはなぜですか?
GUI はファイルブラウザーではなく、同期状態を管理するためのコントロールパネルだからです。フォルダー、デバイス、転送の進行状況、競合数は表示されますが、ファイルの内容を一覧表示したり開いたりすることはありません。これはピアツーピア設計によるものです。ファイルは自分のデバイス上に保存され、VPS 上の GUI はファイルを移動するプロセスを管理するだけです。
VPS で Syncthing に開放する必要があるポートはどれですか?
同期プロトコルには 22000/TCP、QUIC トランスポートには 22000/UDP を使用します。ポート 21027/UDP はブロードキャストとマルチキャストによるローカルディスカバリに使用されます。これはインターネット経由では届かないため、公開サーバーでは閉じておきます。GUI の 8384 は 127.0.0.1 にバインドしたままにし、SSH トンネル経由でアクセスしてください。プロバイダーのネットワークファイアウォールと ufw の両方を確認してください。これらは別々の制御機構です。
Syncthing と Nextcloud を同じ VPS で実行できますか?
はい。RAM が 2 GB 以上あるサーバーであれば、妥当な構成です。両者のディレクトリは分離してください。Nextcloud はデータベースにファイルをインデックスするため、Syncthing が Nextcloud のストレージに書き込んだファイルは、occ files:scan が実行されるまで Web インターフェースに表示されません。1 つのディレクトリに 2 つのツールが書き込むと、どちらも想定していない競合ファイルが生成されます。