デプロイとは、開発したサイトなどのデータをサーバーにアップすることを言うのですが、これが意外に悩ましい。

Gitでプッシュしたら公開されると良いのですが、それだけだとどうしても厳しい場面がありました。

PHPのプロジェクトが多いので、PHP用デプロイメントツールDeployerというものを使ってみました。

Deployerの概念

ほかのデプロイツールもそうかもしれませんが、Gitのリポジトリで管理されたファイルをデプロイします。

つまり、デプロイのサーバーからGitサーバーやgithubにアクセスできる必要があります。

例えば、サーバーにGitをインストールしたり、ssh keyを配置したり、あらかじめ準備しないといけません。

最初、この辺りのことをよく理解していなくて、ハマりました。

Deployerの使い方

ざっと説明して見たいと思います。

Deployer — Deployment Tool for PHP

Deployerのインストール

サイトでは、ダウンロードして、グローバルの場所から実行するように説明しています。

デプロイ情報(サーバーやそのパスワードなど)とそのツールを、リポジトリなどで共有するかどうか、セキュリティ的にはよくないかもしれませんので、判断が難しいですが、データ一式をリポジトリ含めてしまいました。

その場合、deployer.pharを公式サイトからダウンロードして、プロジェクト内に設置すれば良いだけなので、そこは手軽です。

composerで管理できますが、プロジェクトのPHPのバージョンで上手くいかなかったので、普通にダウンロードするのが簡単です。

deploy.phpを作る

まず、deploy.phpを作る必要があります。

このファイルは、デプロイする内容を記述するもので、その内容をレシピと呼びます。

ターミナルなどで、プロジェクトに移動し、コマンドを実行すれば、deploy.phpが作成できます。

$ php deployer.phar init

その時、いくつかプロジェクトのタイプを選ぶことができるのですが、明確にあったプロジェクトが分からなければcommonになると思います。
デフォルト(common)では、レシピがひと通り入っています。

listコマンドを実行すると、レシピで設定されたデプロイのコマンド(タスク)が表示されます。

$ php deployer.phar list

deploy.phpの編集

deploy.phpをプロジェクトにあうように編集していきます。

一番大事なのは、リポジトリを設定することです。

set('repository', '');

あとは、デプロイするサーバーにアクセスできるように設定を記述します。

Deployer — Hosts

host('project.com')
    ->stage('production')
    ->set('deploy_path', '/var/www/project.com');

デプロイの手順をタスク化

DeployerのDocumentationを見ながら、デプロイの手順をタスク化していくことになります。

Deployer — Getting Started

サーバーでコマンドを実行したり、手順をタスク化すれば次からは楽です。

desc('My task');
task('my_task', function () {
    run(...);
});

リリースパスとデプロイパス

Deployerは、デプロイ先にいくつかリリースバージョンを保持するので、デプロイしたディレクトリが、公開する場所になりません。

デプロイしたディレクトリ内のcurrentを公開ディレクトリにしたり、httpd.confで設定する必要があります。

デプロイ!

準備ができたら、できるだけ詳細が分かるようにvvvをつけて、実行しましょう。

$ php deployer.phar deploy -vvv hostname

まとめ

レシピやタスクを作れてしまうと楽なのですが、それまでが大変でした。
他のツールも似たような感じなので、もっと楽なると個人的には嬉しいです。
では、また!

[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
佐藤 聖規 和田 貴久 新井 雄介 米沢 弘樹 山岸 啓 岩成 祐樹
技術評論社
売り上げランキング: 4,087