PHPプロジェクトを簡単にデプロイするならDeployerがお薦め
今日はPHP製のデプロイツールの紹介です。デプロイツールとはCapistranoみたいなツールのことです。コマンド一発でデプロイが完了するようにするツールです。
PHP製のツールもいくつかありますが、Deployerは非常にシンプルなツールで、最近3.0がリリースされました(最新版は3.0.4)。
https://github.com/deployphp/deployer/releases/tag/v3.0.0 より。
インストールが簡単
公式サイト http://deployer.org/ へアクセスし、deployer.phar
をダウンロードするだけです。
公式には/usr/local/bin/dep
にインストールすると書いてありますが、プロジェクトのフォルダに突っ込んでも問題ありません。
私はプロジェクトのルートにdeploy
というフォルダを作成し、そこに関連するファイルをまとめることにしました。
project/
└── deploy/
└── deployer.phar
これでインストール完了です。
設定が簡単
設定ファイルは1つdeploy.php
だけです。これを作成します。
project/
└── deploy/
├── deploy.php
└── deployer.phar
そして、deploy.php
に設定やタスクを記述します。
<?php
// あらかじめ定義されているComposer Recipeを使います。
require 'recipe/composer.php';
// デプロイ先のサーバを定義します。
// サーバ名を「prod」とし、SSHは22番ポートを使用します。
server('prod', 'host', 22)
->user('name')
// ssh agentを使い認証します。
->forwardAgent()
->stage('production')
->env('branch', '1.7/master')
// デプロイ先のベースパスを定義します。
->env('deploy_path', '/var/www/your/project');
// Gitリポジトリを設定します。サーバ上にgitが必要です。
set('repository', 'https://github.com/fuel/fuel.git');
これだけで完了です。
パスワードやSSH鍵ファイルの指定方法は公式ドキュメントのServersに例があります。
deploy.php
では、Composer Recipeで定義されているタスクをオーバーライドしたり、追加したいタスクを記述します。
Composr RecipeはComposerを使っているシンプルなプロジェクト用のレシピです。公式ドキュメントのRecipesに詳細があります。
Composr Recipe以外にもすべてのベースとなるCommon Recipeや、Symfony Recipeなどの専用のレシピがあります。
サーバでのsudo
デプロイのタスクでsudo
を使う場合、ttyなしパスワードなしで実行できる必要があります。そのように設定してください。
例えば、以下のようになります。
Defaults:username !requiretty
username ALL=(ALL) NOPASSWD: /usr/bin/setfacl
付属するレシピの中では、フォルダの書き込み権限を設定する場合、例えば、以下のような設定がある場合にsudo
を使用します。
set('writable_dirs', ['app/cache', 'app/logs']);
デプロイする
デプロイはdeploy
コマンドにステージ(production
)を指定します。これでサーバにデプロイされます。
$ php deployer.phar deploy -vvv production
サーバ上では以下のように配置されます。
project/
├── current -> /var/www/your/project/releases/20150602181638
└── releases/
├── 20150602180505/
├── 20150602181203/
└── 20150602181638/
デプロイ先のベースパスの中のcurrent
が現在リリースされているソースになります。current
フォルダはreleases/20150602181638
へのシンボリックリンクです。
Webサーバの設定では(この例ではpublic
フォルダがドキュメントルートなので)current/public
をドキュメントルートに設定します。
まとめ
- Deployerを使うとPHPプロジェクトを簡単にデプロイできます。
- Deployerは非常にシンプルなツールで必要最低限の機能も不足しているかも知れません。
- でも大丈夫。Deployerは簡単にレシピを拡張できます。
関連
Date: 2015/06/02