PHPプロジェクトを簡単にデプロイするならDeployerがお薦め post

今日はPHP製のデプロイツールの紹介です。デプロイツールとはCapistranoみたいなツールのことです。コマンド一発でデプロイが完了するようにするツールです。

PHP製のツールもいくつかありますが、Deployerは非常にシンプルなツールで、最近3.0がリリースされました(最新版は3.0.4)。

3.0リリースに付いていた謎の画像
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

Tags: php, deployment, symfony