rsync で高速!楽々!な
アップロードをやってみよう!

TAGS

rsync で高速!楽々!な<br>アップロードをやってみよう! カバーイメージ
  1. 1. 基本コマンド
  2. 2. コピー先サーバーを指定する
  3. 3. ssh鍵の登録
    1. 3.1. 鍵の生成
    2. 3.2. 鍵の登録
  4. 4. テスト
  5. 5. ssh configの設定
  6. 6. 完成
  7. 7. npm scriptsに登録

シェルコマンドrsyncの使い方をざっくり解説したいと思います。

rsyncコマンドはコピー先、コピー元の二者を比較し、より新しい方のデータで二者間の同期を行います。ファイルのバックアップに使ったり、サーバーにローカルデータを同期したり…のような使い方をします。

さらに、npm scriptsにこれを登録することで、gulp などの依存に振り回されず、gitにサーバー情報をなるべく上げず…に環境構築することを目指します!

基本コマンド

rsync -auvz [コピー元] [コピー先]

-auvzはオプション。

  • -a : コピー元のファイルと同一条件でコピーする。
  • -u : update, タイムスタンプが新しいファイルのみ転送
  • -v : verbose, 詳細表示
  • -z : 転送時に圧縮

[コピー元] はローカルパスを指定すればOK。コピー先は今回はどこかレンタルサーバー的なものを想定します。

コピー先サーバーを指定する

コピー先サーバーの書き方は以下。

USER@HOSTNAME:/PATH-TO-DESTINATION/

例えば、情報が以下なら、

  • user: testuser
  • hostname: test.sakura.ne.jp
  • アップロード先: /htdocs/www/site/

こんな感じ。

testuser@test.sakura.ne.jp:/htdocs/www/site/

ここまでの情報を仮に入れてカレントディレクトリをrsyncするとすれば、

rsync -auvz ./ testuser@test.sakura.ne.jp:/htdocs/www/site/

これで実行するとサーバのパスワードを聞かれるので入力すると同期が行われます。

みたいな感じなんだけど、ただまあ毎回書くのは面倒。
毎回パスワード入力するのも面倒。
タスクランナーの処理に入れたいけどgitに上がるのはちょっと…となるのでなんとかしようと思います。

ssh鍵の登録

ssh鍵というのは、簡単に説明するとオリジナルの鍵と鍵穴を作り出して、鍵穴を片方に、鍵は自分で持ち、この2つを合わせることで本人確認を取る仕組みです。ここでは鍵穴 = 公開鍵、鍵 = 秘密鍵として説明していきます。

鍵の生成

ホームディレクトリの直下の ./ssh ディレクトリに鍵を作ります。

/.ssh ディレクトリへ移動。

cd ~/.ssh/

鍵を生成。

ssh-keygen -t rsa

色々聞かれますが、とりあえずenterを押していきましょう。
一通り終わると/.sshの下にid_rsa, id_rsa.pub の2つが生成されるはず。

鍵の登録

サーバの ~/.ssh/authorization_keys というファイルの中に公開鍵 id_rsa.pub の内容を入れます。
autorization_keysというファイルがなければ、アップロードしてリネームでも問題ないです。すでにある場合はこの中にid_rsa.pub の内容を入れましょう。

これで鍵の登録はOK。

秘密鍵id_rsa は絶対に外にバレないように大事にしておいてください。

テスト

ssh testuser@test.sakura.ne.jp

でパスワードを聞かれることなくログインできればOK。

ssh configの設定

ユーザー名、ホスト名など、を毎回打たなくていいように、接続先の情報をローカルに記憶させます。

~/.ssh/config ファイルを(なければ touch ~/.ssh/config などで生成 )編集。

Host 任意の接続名
    HostName ホスト名
    User ユーザー名
    Port ポート番号
    IdentityFile 秘密鍵へのパス(例えば~/.ssh/hoge.key)

を入力。仮に Host testname としたとすれば、
これで、testnameでホストとユーザー名、鍵を紐付けられるので、
ssh testname でログインすることができます。

完成

仮に、カレントディレクトリの /src 以下をサーバーの公開ディレクトリの中の/site/に上げたいとするならコマンドは以下。

rsync -auvz ./src/ testname:htdocs/www/site/

でサーバと同期が可能に。

npm scriptsに登録

↑のコマンドを毎回打つのは現実的ではないので、
下記をpackage.jsonに記述します。

  "scripts": {
    "rsync": "rsync -auvz ./ testname:htdocs/www/site/"
  }

これで、

npm run rsync

を実行すると、保存された設定でファイルの同期をすることができます!
sshを設定することで、パスワードを毎回聞かれることなく、ホスト名やユーザー名をgit上にpushすることなく、なアップロードができます!

TAGS

RECOMMEND