LoginSignup
24
21

More than 3 years have passed since last update.

複数のPCでファイルを同期する「Syncthing」を使ってみた

Last updated at Posted at 2020-03-27

複数のPCでgit pushせずにファイル共有をしたかったため、会社で紹介していただいたSyncthingを試してみました!

Syncthingとは?

公式リポジトリ
https://github.com/syncthing/syncthing/

Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers. (公式リポジトリより)

直訳で、「2台以上のPC間でファイルを共有する」とのことです。

DropBoxやOneDriveと似たようなイメージですが、これらと違ってサーバー上にファイルがアップロードされません。

対応OS等

2020年3月時点では以下が対応しています。

  • macOS
  • Windows
  • Linux
  • Android
  • Docker(ちゃんと調べていないですが、READMEに記載があります)

インストール

手元にMacとUbuntuがあるので、こちらの2台で試してみます。
はじめにGUIでの設定手順について記載しますが、CLIだけでもできるみたいなので後半に記載します。

Ubuntu

参考
https://apt.syncthing.net/

curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt update && sudo apt install syncthing
# 実行→ブラウザが立ち上がる
syncthing

Mac

brew install syncthing
# 実行→ブラウザが立ち上がる
syncthing

CentOS / その他Linux

環境がないので確かめていませんが、以下のサイトのようにバイナリインストールも行えるみたいです。
https://computingforgeeks.com/install-and-configure-syncthing-on-centos-linux/

Android

こちらも環境がないので確かめていませんが、ストアにアプリがあります。
https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid&hl=ja


syncthingコマンドを実行するとブラウザが立ち上がり、以下の画面が表示されます。
image.png

サービスとして登録・実行

上記の手順通りにsyncthingコマンドで実行すると、コンソールを立ち上げっぱなしにしないと同期が行えないため、サービスとして登録します。

Ubuntu

sudo systemctl enable syncthing@${USER}.service
sudo systemctl start syncthing@${USER}.service

Mac

brew services start syncthing

Macの場合、Syncthingは立ち上がりますが、Web GUIが見れませんでした・・・
設定済みであれば同期はちゃんと行われます。

MacでWeb GUIを立ち上げたい場合は別途syncthing -browser-onlyコマンドを使用します。

同期設定

同期するまでの手順は以下のステップがあります。

  1. 同期したい端末全てでsyncthingを立ち上げる
  2. 「接続先デバイス」を登録する
  3. 同期するフォルダを追加する
  4. 共有フォルダ設定
  5. 同期が完了するのを待つ

1.は完了しているので、2.から説明します。

「接続先デバイス」を登録する

ブラウザに表示されている画面の右下に「接続デバイスを追加」ボタンがあるので、押下します。
すると、以下のポップアップが表示されます。
image.png

同期するデバイス同士がsyncsyncが立ち上がっている状態で、同一ネットワーク上に存在する場合は
もう一方の端末のデバイスIDが自動的に表示されますので、そちらを選択するだけでOKです。

同一ネットワークに存在しない場合はデバイスIDを調べて入力する必要があります。

デバイスIDの調べ方

画面右上のメニュ→IDを表示でデバイスIDを確認することができます。
image.png

上記の設定を2台分設定します。

同期するフォルダを追加する

今回はUbuntuの~/githubフォルダを同期してみます。

同期元(Ubuntu)の設定

同期元のブラウザの左側に「フォルダを追加」ボタンがあるので、押下します。
image.png

すると、以下のようなポップアップが表示されます。
フォルダー名に共有したいフォルダを指定します。
私はたまたまホームディレクトリのフォルダだったのでこのままでOKですが、それ以外の場合はフォルダーパスも設定してください。

image.png

こちらのフォルダーIDは重要ですので、控えておいてください。

ポップアップ上に無視するファイル名のタブがあるので、共有したくないファイルはこちらで除外が可能です。
私は直接設定ファイルで行いました。

同期先(Mac)の設定

同期先でも同様の設定を行います。
ポイントとしては、フォルダーIDを同じにすることです。
image.png

共有フォルダ設定

接続先デバイスの編集ボタンを押下します。
image.png

表示されたポップアップの共有を押下し、このデバイスと共有するフォルダーの共有したいフォルダにチェックを入れ、保存します。
image.png

同期が完了するのを待つ

同期設定に成功すると、以下のように同期が開始されるのであとは待つだけです!
image.png

CLIだけの環境で同期を行う

デフォルトの設定だとlocalhostからしかWeb GUIの画面を開くことができません。
そこで、設定を変更して外部からもWeb GUIを表示できるようにするとCLIだけの環境でも楽に設定が行えます。

しかし、VPSやEC2などパブリックな環境ですと誰からでも設定を変更できてしまうため、必ずパスワードを設定してください。

設定ファイルの編集

環境によって設定ファイルの場所が異なります。

  • Linuxの場合
~/.config/syncthing/config.xml
  • Macの場合
~/Library/ApplicationSupport/Syncthing/config.xml

GUIの設定があるので、以下のように修正します。

before
<gui enabled="true" tls="false" debugging="false">
    <address>127.0.0.1:8384</address>
    <apikey>aNw6DrLYWukHvLK22Ed7M5hoR5tixPJG</apikey>
    <theme>dark</theme>
</gui>
after
<gui enabled="true" tls="false" debugging="false">
    <!-- ここを0.0.0.0に修正 -->
    <address>0.0.0.0:8384</address>
    <apikey>aNw6DrLYWukHvLK22Ed7M5hoR5tixPJG</apikey>
    <theme>dark</theme>
</gui>

syncthingを起動している場合はsyncthingを再起動してください。

これで外部から見れるようになりますが、上記で述べたようにパブリックな状態なので、警告が表示されます。
image.png

右下の設定ボタンを押下し、GUIのユーザーとパスワードを設定してください。
image.png

完全にCLIだけで同期設定を行いたい

config.xmlを設定するだけで完全にコマンドラインだけで設定することも可能でした。
しかし、直接XMLを編集する必要がある & 複数の端末全てに記載が必要なので、ちょっと面倒でした。

軽くですが、設定方法を記載します。

インストール

インストールの手順は上記と全く同じです。

デバイスの登録

deviceタグがあると思いますので、こちらの内容をコピーして真下に設定します。
deviceのidに同期したいデバイスのIDを設定します。

<device id="XXXXXXXXX" name="xxx-ubuntu" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
     <address>dynamic</address>
     <paused>false</paused>
     <autoAcceptFolders>false</autoAcceptFolders>
     <maxSendKbps>0</maxSendKbps>
     <maxRecvKbps>0</maxRecvKbps>
     <maxRequestKiB>0</maxRequestKiB>
</device>

デバイスIDはsyncthingコマンド実行時に表示されるログか、GUIの場合はWEB画面、サービス(デーモン)実行している場合は
以下のコマンドから確認してください。

syncthing -device-id

フォルダの登録

config.xmlの最上部にfolder id="default"のタグがあるので、こちらを全てコピーして真下に設定します。

<folder id="default" label="Default Folder" path="/Users/xxxx/Sync" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
    <filesystemType>basic</filesystemType>
    <device id="XXXXXXXXX" introducedBy=""></device>
    <minDiskFree unit="%">1</minDiskFree>
    <versioning></versioning>
    <copiers>0</copiers>
    <pullerMaxPendingKiB>0</pullerMaxPendingKiB>
    <hashers>0</hashers>
    <order>random</order>
    <ignoreDelete>false</ignoreDelete>
    <scanProgressIntervalS>0</scanProgressIntervalS>
    <pullerPauseS>0</pullerPauseS>
    <maxConflicts>-1</maxConflicts>
    <disableSparseFiles>false</disableSparseFiles>
    <disableTempIndexes>false</disableTempIndexes>
    <paused>false</paused>
    <weakHashThresholdPct>25</weakHashThresholdPct>
    <markerName>.stfolder</markerName>
    <copyOwnershipFromParent>false</copyOwnershipFromParent>
    <modTimeWindowS>0</modTimeWindowS>
</folder>

コピーした設定の以下の部分を書き換えます。

  • folder
    • id: フォルダーIDを設定(他の端末で生成済みの場合はそのIDを設定、未作成の場合は適当なIDを設定)
    • label: フォルダ名を設定
    • path: 同期するフォルダパスを設定
  • device
    • コピーしたdeviceには自身の設定が記載されているため、このままでOK
    • 他のデバイスを登録するため、こちらをコピーしてidを同期する端末のデバイスIDに変更

設定変更後、syncthingを再起動してください。

設定例

example
<folder id="github-folder-id" label="github" path="/Users/xxxxx/github" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
    <filesystemType>basic</filesystemType>
    <device id="デバイスID1" introducedBy=""></device>
    <device id="デバイスID2" introducedBy=""></device>
    <device id="デバイスID3" introducedBy=""></device>
    <minDiskFree unit="%">1</minDiskFree>
    <versioning></versioning>
    <copiers>0</copiers>
    <pullerMaxPendingKiB>0</pullerMaxPendingKiB>
    <hashers>0</hashers>
    <order>random</order>
    <ignoreDelete>false</ignoreDelete>
    <scanProgressIntervalS>0</scanProgressIntervalS>
    <pullerPauseS>0</pullerPauseS>
    <maxConflicts>-1</maxConflicts>
    <disableSparseFiles>false</disableSparseFiles>
    <disableTempIndexes>false</disableTempIndexes>
    <paused>false</paused>
    <weakHashThresholdPct>25</weakHashThresholdPct>
    <markerName>.stfolder</markerName>
    <copyOwnershipFromParent>false</copyOwnershipFromParent>
    <modTimeWindowS>0</modTimeWindowS>
</folder>

以上です。
しばらく使用してみて、使い勝手も確認してみます。

24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21