開発

「rsync」を使ってサーバーにデプロイする

ファイルのデプロイを行うのに「WinSCP」や「FileZilla」を使用することがありますが、ファイル構成を同期する「rsync」を使用した方が圧倒的に便利です。
そこで今回はMac上で「rsync」を使用して開発プログラムをサーバーにデプロイする方法をまとめます。

環境

  • Mac Intel Ventura 13.1 (こちら側)
  • Debian 10 (リモート側)

Macの「rsync」をインストールする(最新化)

Macは初期段階で「rsync」はインストールされていますが、バージョンが古いため最新版にします。
ターミナル」を起動して以下のコマンドで「rsnc」のバージョンを確認することが出来ます。

$ rsync --version
rsync  version 2.6.9  protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.
<http://rsync.samba.org/>
Capabilities: 64-bit files, socketpairs, hard links, symlinks, batchfiles,
              inplace, IPv6, 64-bit system inums, 64-bit internal inums

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

brew」を使って最新の「rync」をインストールします。

$ brew install rsync

インストールに少し時間がかかりますが、インストール後にバージョンを確認すると以下のようになるはずです。

rsync  version 3.2.7  protocol version 31
Copyright (C) 1996-2022 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, symlinks, symtimes, hardlinks, hardlink-specials,
    hardlink-symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs,
    xattrs, optional secluded-args, iconv, no prealloc, stop-at, crtimes,
    file-flags
Optimizations:
    no SIMD-roll, no asm-roll, openssl-crypto, no asm-MD5
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 sha1 none
Compress list:
    zstd lz4 zlibx zlib none
Daemon auth list:
    sha512 sha256 sha1 md5 md4

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

サーバー側(Debian)に「rsync」をインストールする

Debianに「rsync」をインストールするコマンドは以下の通りとなります。
まずはリポジトリを更新します。

$ sudo apt-get update

更新を終えると「rsync」をインストールします。

$ sudo apt-get install rsync

インストールが完了しているか確認します。

$ rsync --version
rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

これでローカル側とサーバー側の両方に「rsync」がインストールされました。

サーバーに「rsync」でファイルを同期してデプロイする

プロジェクトは「Laravel/Lumen」とします。
以下のシェルスクリプトを作成します。

#!/bin/bash
cd `dirname $0`

HOST={サーバーのIP or ホスト名}
LOGIN_USER={サーバーのログインユーザー}
KEY_FILE_PATH={サーバー接続のキーファイル}
LOCAL_DIR={アップロードする対象フォルダ}
REMOTE_DIR={アップロード先のフォルダ}
ENV_FILE={アップロードする「.env」ファイル名}

# 「rsync」でファイルの転送する
# 「--exclude」で除外するファイルを指定する
rsync -avzh \
        -e "ssh -i $KEY_FILE_PATH" \
        --exclude 'storage/' \
        --exclude 'vendor/' \
        --exclude 'node_modules/' \
        --exclude 'tests/' \
        --exclude 'readme.md' \
        --exclude 'README.md' \
        --exclude '_ide_helper.php' \
        --exclude 'phpunit.xml' \
        --exclude '.*' \
        --delete  \
        $LOCAL_DIR $LOGIN_USER@$HOST:$REMOTE_DIR

# 「.env」等は名称を変更するために「scp」コマンドで個別に送る
scp -i $KEY_FILE_PATH $LOCAL_DIR$ENV_FILE $LOGIN_USER@$HOST:$REMOTE_DIR/.env

## 完了メッセージの表示
echo "----------------------------------------"
echo "|         Deploy complite!!!           |"
echo "----------------------------------------"

作成したスクリプトを「ターミナル」から実行します。

$ sh deploy.sh

これで「rsync」を使ったデプロイが実行できます。