PHPだけで使えるDeployerでデプロイ

デプロイツールと言えばRubyを使うCapistranoが有名ですね。

PHPオンリーで使えるデプロイツールはないんだろうかと探してみたところ、Deployerが使いやすいと評判でした。

私も使ってみましたので、サンプルアプリケーションのデプロイを通して使い方をまとめてみます。

デプロイするアプリケーション

今回はお試しなのでVagrantの仮想環境にデプロイしてみます。

デプロイするアプリケーションはこちら

ダミーデータを生成するライブラリfzaninotto/fakerを使用して、架空の人物名を表示するだけのシンプルなものです。

Deployerに必要な環境

Deployerが使えるように環境を整えておきます。

デプロイ先

  • PHP 5.5以上
  • Git

ローカル

  • PHP 7.0以上(最新版Deployerを使う場合)
  • Composer(Composerを利用する場合)

デプロイの手順

Deployerでのデプロイはおおよそ以下のような手順で行います。

  1. Deployerのインストール
  2. Deployerの初期設定
  3. deploy.phpにホスト情報などを追加
  4. deploy.phpにタスクを追加
  5. デプロイの実行

3番目までの手続きで基本的なデプロイ処理はできるようになっているので、4番目の「タスクの追加」は必須ではありません。

今回のサンプルアプリケーションのデプロイも、4番目のタスクの追加は省略します。

Deployerのインストール

まずはお好きなところにアプリケーションをclone、次にComposerでDeployerをインストールします。

$ git clone https://github.com/pepo-le/deploy_test.git
$ cd deploy_test
$ composer require --dev deployer/deployer

Composerを使わない場合

curlなどで直接ダウンロードしてもOKです。

$ curl -LO https://deployer.org/deployer.phar

Deployerの初期設定

Composerでインストールした場合には、Deployerを扱うためのコマンドがvendor/bin/depに作成されます。これを使って初期設定を行いましょう。

$ vendor/bin/dep init

フレームワークの選択

コマンドを実行すると、アプリケーションで使用しているフレームワークの選択画面が表示されます。

Please select your project type [Common]:
  [0 ] Common
  [1 ] Laravel
  [2 ] Symfony
  [3 ] Yii
  [4 ] Yii2 Basic App
  [5 ] Yii2 Advanced App
  [6 ] Zend Framework
  [7 ] CakePHP
  [8 ] CodeIgniter
  [9 ] Drupal
  [10] TYPO3
>

今回のサンプルアプリケーションではフレームワークを使っていないので、そのままEnterを押しCommonを選択します。

リポジトリの指定

次にリポジトリを指定するよう求められます。

リポジトリはGitのみ対応で、デプロイ先から参照できる場所にある必要があります。ローカルのGitリポジトリから直接デプロイすることはできません。ただしGitリポジトリをPushしたり、ファイルをアップロードするようなタスクを作成することは可能です。

今回はGithubのリポジトリを指定します。

Repository []:
> https://github.com/pepo-le/deploy_test.git

deploy.phpの確認

初期設定が終わるとdeploy.phpが作成されます。deploy.phpを開いて内容を確認してみましょう。

レシピの確認

初期設定でのフレームワークの選択にあわせてdeploy.phpに「レシピ」を読み込む記述がされています。今回はCommonを選択したので、次のようになっているはずです。

require 'recipe/common.php';

レシピにはフレームワークにあわせたデプロイ処理が記述されています。レシピはvender/deployer/deployer/recipe/以下に配置されているので、慣れてきたらこちらも確認してみてください。

リポジトリの確認

リポジトリが適切に記述されているかチェックしましょう。

set('repository', 'https://github.com/pepo-le/deploy_test.git');

deploy.phpの編集

deploy.phpにデプロイ先のホスト情報を追加します。

ここではVagrantの仮想環境にデプロイする設定を記述してみます。VagrantのSSH接続情報は
$ vagrant ssh-configで確認できます。

// @file deploy.php
// ... 
host('127.0.0.1')
    ->set('deploy_path', '~/my_app')    // デプロイ先のディレクトリ
    ->user('vagrant')
    ->port('2222')
    ->identityFile('<ディレクトリ>/private_key')    // SSHの秘密鍵
    ->multiplexing(false)    // SSHの多重化。接続時にエラーがでるときは false に
    ->forwardAgent(false);    // リポジトリへの接続に ssh-agent を使用するか

私のWindows環境からのデプロイだとmultiplexing(false)を指定する必要がありました。

パスフレーズ付き鍵を使ったSSHでリポジトリに接続する場合は、forwardAgent(true)にした上で、ssh-agentを使用して接続する必要があります。

Windowsからデプロイする場合

TTYモードが有効だとデプロイ時にエラーが出るので、TTYモードを無効にします。

// falseに変更する
set('git_tty', false);

デプロイを実行

次のコマンドでデプロイ処理が実行されます。

$ vendor/bin/dep deploy

これは deploy.php 内の以下の部分を実行するコマンドになります。

task('deploy', [
     'deploy:info',
     'deploy:prepare',
     'deploy:lock',
     'deploy:release',
     // ...

task()の第一引数がタスク名、次の引数がコールバックですね。コールバックのそれぞれの処理はrecipi/common.phpからrecipe/deploy/以下のファイルが呼び出されて実行されています。具体的には、リポジトリからアプリケーションの取り込み、Composerで依存ライブラリをダウンロード、などの処理をやってくれます。

さらに追加で処理が必要な場合には、タスクを追加するなどして対応します。

デプロイ先のディレクトリ構成

デプロイ先のディレクトリは以下のような構成になっています。

  • current → releasesの中で一番新しいものへのシンボリックリンク
  • releases → デプロイ一覧
  • shared → releases間で共通して使われるディレクトリ

currentのリンク先はデプロイされるたびに更新されるので、current以下を公開ディレクトリとして指定するなどの使い方をします。

sharedはログファイルなど、アプリケーションの更新にかかわらず継続利用したいものを置くディレクトリです。deploy.phpでset('shared_dirs', '<ディレクトリ名>');set('shared_files', '<ファイル名>');を指定することで、ファイルやディレクトリがshared以下に配置されます。

sharedに配置されたファイルは、シンボリックリンクとして各デプロイディレクトリに置かれます。

表示を確認

サンプルアプリケーションのcurrent/publicをドキュメントルートとしてブラウザで表示してみてください。上手く表示できれば成功です。

おわりに

Deployerはここで紹介した機能のほかに、デプロイ先の選択、デプロイ時の処理の分岐、ファイルのアップロードやロールバックなど便利な機能がたくさんあります。

非常に使いやすいツールだと思うので、ぜひとも皆さんお試しください。

コメント