旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【PHP】 PHP製のDeploy tool deployerでdeployを試す

最近はMySQL partitionのPHPUnitテストとか記事にもならないようなニッチなことをやっていたわけで。 PHPUnitでpartition削除とかDBテストでできればいいのにとか思いつつ、ゴリゴリ書いてたわけで。

ちょっと息抜きに。

Capistranoでdeployをすることが多かったのですが、PHP製のDeployも試してみようと思って Deployerを使ってみたので、簡単に紹介したいと思います。

その前に今回作った簡単な環境ですが VirtualBoxを2つ立ち上げ、Linuxのlocal環境を2つ用意しました。

192.168.56.10 <--------> 192.168.56.11

192.168.56.10 こちらのサーバをWEBサーバに見立て、deploy先とします。

192.168.56.11 こちらのサーバをdeployサーバとし、deploy元とします。

なので、deployツールを192.168.56.11にインストールしていきます。

deployerインストール

composerのように

wget http://deployer.org/deployer.phar

こんな感じでdeployer.pharをDownloadします。

mv deployer.phar /usr/local/bin/dep

こんな感じでbinへ突っ込んでcommandで使えるようにします。

composerでインストールすることも可能です。

今回は新しいサーバにペロッとインストールしてさくっとdeployしてみたかったのでcomposerではなく、直接ダウンロードしました。

ソースを確認したい場合は以下にてcloneするなりして確認しましょう。 https://github.com/deployphp/deployer

ここからディレクトリを自分で作っていきます。

deployer 設定

自分が作ったディレクトリは以下の通りです。

deploy
├── config
│   ├── parameters.yml
│   └── servers.yml
├── console
└── deploy.php

parameters.ymlファイルとconsleディレクトリは空でいいので作成だけしておくものらしいです。 まず、deployというディレクトリに必要なファイルをまとめることにしました。

1つずつ見ていきます。

servers.yml

localhost:
    host: 192.168.56.10
    port: 22
    user: root
    identity_file:
        public_key: ~/.ssh/id_rsa.pub
        private_key: ~/.ssh/id_rsa
        password: ''
    stage: localhost
    deploy_path: /tmp/project
    branch: master

192.168.56.10、192.168.56.11双方で鍵認証できるように 双方のauthorized_keysを作成し、鍵認証でsshできるようにしておいてください。

因みに今回はid_rsaにはPassword設定はしていません。

ここにはそれぞれサーバ毎の設定を書いていきます。 ここで注意しなきゃいけないのはidentity_fileのpassword部分です。 設定の仕方がさらっと調べただけでは出てこなく、passwordを設定項目に含まない場合 deployの度にパスワードをきかれます。 しかも、実際には鍵認証ができているので空エンターで処理が続行されるのです。

どうすればいいのかわからずに結局build前のソースを読んで解決したのですが、納得いかないです・・・

細かくは書きませんが、設定値の情報はBuilder.phpで実行されるようです。 identityFileを設定した場合は必ずパスワードチェックが走るのです。

因みにidentityFileで指定するpublic_keyとprivate_keyはデフォルト ~/.ssh/id_rsa.pub ~/.ssh/id_rsa となっているので、同じであれば特に設定しなくてもOKです。

stageはコマンドでの引数でEnvironment用にlocalhostとしました deploy_pathはdeploy先(192.168.56.10)のどこにdeployするかのpathです。

これで設定ファイルの記述は完了です。

次にdeploy.phpを記述していきます。

<?php
require 'recipe/composer.php';
serverList('config/servers.yml');
set('repository', 'git@git.example.jp:/xxx.git');

これだけになります。

deployer 実行

早速実行してみましょう。

[root@localhost deploy]# dep deploy localhost
✔ Executing task deploy:prepare
✔ Executing task deploy:release
✔ Executing task deploy:update_code
✔ Executing task deploy:shared
✔ Executing task deploy:vendors
✔ Executing task deploy:symlink
✔ Executing task cleanup
➤ Executing task success
Successfully deployed!
✔ Ok

こんな感じでdeployが完了します。

流れとしては

  • ssh接続
  • リリースディレクトリ作成
  • gitからのcheckout or clone
  • sharedに移すファイルがある場合はファイルもしくはディレクトリを移動 ※これはset('shared_dirs', [application/logs, directory/path]);のような形でsharedディレクトリに退避できる。
  • composer installを実行
  • deployしたディレクトリにシンボリックリンクを貼る
  • 世代管理数を超えるリリースディレクトリ以下のソースを削除する
  • suucessfully deployed!を表示

早速192.168.56.10側のdeploy_pathに指定した/tmp/projectを確認してみると

drwxr-xr-x   4 root root 4096  5月 27 10:31 2016 .
drwxrwxrwt. 11 root root 4096  5月 27 10:31 2016 ..
lrwxrwxrwx   1 root root   36  5月 27 10:31 2016 current -> /tmp/project/releases/20160527011759
drwxr-xr-x   5 root root 4096  5月 27 10:31 2016 releases
drwxr-xr-x   2 root root 4096  5月 26 13:04 2016 shared

見たことあるような感じでdeployされていますね。

何度かdeployしてみたのですが releaseを見る限り

drwxr-xr-x 5 root root 4096  5月 27 10:31 2016 .
drwxr-xr-x 4 root root 4096  5月 27 10:31 2016 ..
drwxr-xr-x 8 root root 4096  5月 26 19:42 2016 20160526102859
drwxr-xr-x 8 root root 4096  5月 26 20:05 2016 20160526105235
drwxr-xr-x 8 root root 4096  5月 27 10:31 2016 20160527011759

デフォルトで3世代管理されているようですね。

ここの世代管理を変更する場合は

deploy.php

set('keep_releases', 5);

keep_releasesの値を設定してあげると変更されます。

以後、deployerがCapistranoと同様に使えるのかを少しずつ追っていきたいと思います。