【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と同様に使えるのかを少しずつ追っていきたいと思います。