目的
- 開発中、リモート環境で動作確認しなければならない場合に開発を潤滑に行う。
- 検証環境へリアルタイムにデプロイする。
リアルタイム同期のメリット
- ローカルによる一元管理が可能
- 同期が裏側で行われるため、クラウドなど通信が低速な環境でも作業効率を維持できる。
構成
同期設定
ホスト側(ローカル)
- lsyncdのインストール
apt-get install lsyncd
- lsyncdの設定 [/etc/lsyncd.conf]
settings {
logfile="/var/log/lsyncd/lsyncd.log",
statusFile="/var/log/lsyncd/lsyncd.status",
nodaemon=false, # daemonとして実行
stubborn=true, # 接続に失敗してもプロセスを終了させない。
}
sync {
default.rsyncssh,
source="[Source Directory]", # 同期元のディレクトリ
host="[User@HostName]", # SSHで接続する先
targetdir="[Remote Directory]", # 同期先のディレクトリ
delay=1,
delete=true,
ssh = {
port = [PortNumber] # SSHで接続するポート番号
}
}
- lsyncdのサービス化 [/etc/systemed/system/lsyncd.service]
[Unit]
Description=Live Syncing Daemon
After=network.target
[Service]
Restart=always
Type=simple
Nice=19
EnvironmentFile=/etc/lsyncd.conf
ExecStart=/usr/bin/lsyncd -pidfile /tmp/lsyncd.pid /etc/lsyncd.conf
PIDFile=/tmp/lsyncd.pid
User=[UserNmae] # 実行するユーザ名
Group=[GroupName] # 実行するグループ名
[Install]
WantedBy=multi-user.target
- サービスの登録/実行
systemctl enable lsyncd
systemctl start lsyncd
- サービスの自動起動を無効
# sysv-rc-confがインストールされてない場合はインストール
sysv-rc-conf
# 実行後、lsyncdの項目を全て空白に変更
# ↓ Example ↓
# lsyncd [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
接続先(リモート)
- sshdが動作していること。
活用例
- IDEで同期用のワークスペースを作成し、丸ごと同期
- 開発中のテスト実行がリモート環境で実現
- 「開発環境では動いた。」という環境依存の問題を解決
- Gitのworktreeディレクトリを同期し、任意のブランチを検証環境へ同期
- 臨時の修正が発生した際、worktreeでブランチ作成、修正、即時検証環境で検証可能
注意事項
- リモートで修正されたものはローカルと同期されないので、変更は必ずローカルで行うこと。