こんにちは。バックエンドエンジニアのまさくにです。
「PHPだけでもデプロイしたい!」というわがままのもと、PHP デプロイツールを使ってみた本シリーズも本稿が最終回になります。最後を飾るツールは日本発、Altax になります。これまでの記事については過去記事をご覧ください。
PHPだけでもデプロイしたい!だってPHPアプリだもの。 第2回【Deployer編】PHPだけでもデプロイしたい!だってPHPアプリだもの。 第3回【Rocketeer編】PHPだけでもデプロイしたい!だってPHPアプリだもの。 第4回【Magallanes編】PHPだけでもデプロイしたい!だってPHPアプリだもの。
今回デプロイされる PHP アプリケーションと環境
それではデプロイされる PHP アプリケーションを今回もご覧いただきましょう。Grass grewです。開始すると、それぞれのセルに草( w )がランダムに生えるようになっていて、草は自分の周囲に草が少なすぎても死ぬし、ありすぎても死にます。ある密度を保つとコミュニティとして生存が安定するという有名なライフゲームですね。今回はクリックされても野焼きで死ぬという仕様を付け加えたクソゲーです。
なお、今回テストを行った環境も前回までと同様 vagrant で作成した下記の環境です。PHP が動作する Web サーバーは別途設定をお願いします。ですが、Altaxはまこと残念ながら依存するパッケージのアップデートが必要なようで、PHP7 では動作できませんでした。ご使用にはご注意ください。
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
$ php --version
PHP 5.6.29 (cli) (built: Dec 8 2016 08:42:35)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Altax のインストール
チュートリアルを見ながらインストールを進めます。下記コマンドで/usr/local/bin/altax
へインストールができるようです。適宜権限にはお気をつけください。
$ curl -L https://raw.github.com/kohkimakimoto/altax/master/installer.sh | sudo bash -s system
インストール後、実行をしてみます。
$ altax --version
Altax version 3.0.15 - ce5bcfb4203f6ee1e864712583d263fbc3277b1f
Altax is an extensible deployment tool for PHP.
Copyright (c) Kohki Makimoto <kohki.makimoto@gmail.com>
Apache License 2.0
Altax の設定
今回の「 Grass grew 」も下記のようなデプロイ手順が必要です。
- リモートサーバでソースコードを github から clone してくる
composer install
で Twig などの依存ライブラリを入れる- php-fpm、nginx を再起動しておく
上記のことを Altax がやってくれるように設定を行います。まずは初期設定を行うために init のコマンドを叩きましょう。任意のディレクトリで下記コマンドを実行してください。最低限必要なファイルを作成してくれます。
$ altax init
Created file: /home/vagrant/altax/.altax/config.php
Created file: /home/vagrant/altax/.altax/composer.json
Created file: /home/vagrant/altax/.altax/.gitignore
$ tree -a
.
└── .altax
├── .gitignore
├── composer.json
└── config.php
1 directory, 3 files
作成された config.php を修正します。基本的にチュートリアルに載っていたものを使用していますが、コマンドを追加しています。また接続先のサーバへはログインできるように設定をしておいてください。
▼ .altax/config.php: 接続先や実行されるコマンドの設定
<?php
// Autoloading for plugin command classes.
if (is_file(__DIR__ . '/vendor/autoload.php')) require_once __DIR__ . '/vendor/autoload.php';
// 接続先サーバ
Server::node("localhost", array("host" => "192.168.100.10"));
// タスクの登録
Task::register("deploy", function($task){
// デプロイ先
$appDir = "/var/www/altax";
$task->exec(function($process) use ($appDir){
// デプロイ先のディレクトリがなければ作成してclone
// 既に存在すればpull
$commands = array();
if ($process->run("test -d $appDir")->isFailed()) {
$commands[] = "sudo git clone https://github.com/masakuni-ito/grass-grew.git $appDir";
$commands[] = "sudo chown -R vagrant:vagrant $appDir";
$commands[] = "cd $appDir";
$commands[] = "sudo /usr/local/bin/composer install";
} else {
$commands[] = "cd $appDir";
$commands[] = "git pull";
}
$commands[] = 'sudo /bin/systemctl restart php-fpm.service';
$commands[] = 'sudo /bin/systemctl reload nginx.service';
$process->run($commands);
}, array("localhost"));
});
Altax でデプロイをする
それではデプロイをしてみましょう。デプロイは altax deploy
のコマンドで実行できます。
$ altax deploy
[localhost:7016] Run: test -d /var/www/altax
[localhost:7016] Run: sudo git clone https://github.com/masakuni-ito/grass-grew.git /var/www/altax && sudo chown -R vagrant:vagrant /var/www/altax && cd /var/www/altax && sudo /usr/local/bin/composer install && sudo /bin/systemctl restart php-fpm.service && sudo /bin/systemctl reload nginx.service
Cloning into '/var/www/altax'...
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
- Installing twig/twig (v1.31.0)
Loading from cache
Generating autoload files
デプロイ成功!
すべてのコマンドが連結して実行されるようですね。ブラウザで確認すると、確かに動作しています。
Altax はデフォルト機能では世代管理までを勝手に実行はしてくれないようです。ロールバック等を行う際には独自で実装するか手作業になるでしょう(デプロイツールだけには問題がとどまらないので、どちらにせよアプリケーションのロールバックは簡単ではないでしょう)。
本稿まとめ
今回で 4 つめの PHP デプロイツール Altax のご紹介でした。自分の環境では PHP7 で動作できなかったことが残念ですが、コマンドを書くということからシンプルで設定自体も非常に分かりやすかったのと、やはり学習コストを考えるに「日本語は最強」と思いました。
[全 4 回 総まとめ]PHP デプロイツールを試してみて
「 Deployer 」「 Rocketeer 」「 Magallanes 」そして今回の「 Altax 」と、シリーズを通して 4 種類のデプロイツールを試してみましたが、いかがでしたでしょうか。デプロイには悪魔が住んでいると思っていて、えてして原因不明瞭な失敗が起きたり、成功しているように見えて数日後に失敗が露見したりすることがあったりします。今回ご紹介したいずれのツールも固定化されるべき作業をソースコードに落とせるので、デプロイ作業の属人化解消やミスの最小化に役立ってくれるものと思います。
そして何よりも PHP アプリケーションのためのPHPデプロイツール。インストールは簡単でメンテナンスも PHP エンジニアができるはず!
今後の開発に導入していきます!
関連記事
PHPだけでもデプロイしたい!だってPHPアプリだもの。 第2回【Deployer編】PHPだけでもデプロイしたい!だってPHPアプリだもの。 第3回【Rocketeer編】PHPだけでもデプロイしたい!だってPHPアプリだもの。 第4回【Magallanes編】PHPだけでもデプロイしたい!だってPHPアプリだもの。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。