tofucodes diary

にほんごのほう

DeployerでColofulBoxにLaravelアプリケーションをデプロイする

対象読者

  • ColorfulBoxにPHPアプリケーションをデプロイしたい
  • GitなどでLaravelアプリケーションのソースコードをバージョン管理してる
  • composerを利用しててvendorディレクトリはバージョン管理対象から外してる

ColorfulBoxの制限

ColorfulBoxはいわゆる共用サーバです。VPSや専用サーバとは違って他のユーザに影響を与えないようにいくつか制限があります。

さくらインターネットなど他の共用サーバを利用したことがないのでこれらが一般的なのか分かりませんが、ColorfulBoxには現状気づいてるだけでも以下の制限が存在しています。

  1. CLIPHPバージョンはcPanelからは設定できない
  2. php.iniのallow_url_fopen=Offなのでcomposer installとかできない
  3. サーバにrsyncがインストールされてないのでrsyncできない

これらの制約がある中でも、これから紹介する方法を利用すれば、ローカル開発環境からコマンド1つでデプロイすることが可能になります。


ちなみに、CLIPHPバージョンを変更する方法は以下の記事で解説しています。 tofucodes.hatenablog.jp

Deployerとは

deployer.org

人気のフレームワークをサポートしているPHP製のデプロイツールです。 LaravelやCakePHP、他にもたくさんのPHPフレームワークがサポートされています。 他のデプロイツールとの比較はできませんが、数行のスクリプトでLaravelのアプリケーションがデプロイできて感動しました。

方法

🛠Deployerのインストール

$ curl -LO https://deployer.org/deployer.phar
$ mv deployer.phar /usr/local/bin/dep
$ chmod +x /usr/local/bin/dep

👨‍🍳Laravel用のレシピを利用してDeployerのスクリプトを作成

$ dep init -t Laravel

📝作成されるdeploy.phpを編集(解説は後述します)

<?php
namespace Deployer;

require 'recipe/laravel.php';

set('application', 'アプリ名');

set('repository', 'リポジトリのURL');

set('git_tty', true);

set('writable_mode', 'chmod');

// 1.
set('bin/php', '/home/ユーザ名/bin/php');

// 2.
set('bin/composer', function () {
    if (commandExist('composer')) {
        $composer = locateBinaryPath('composer');
    }
    return '{{bin/php}} -d allow_url_fopen=1 ' . $composer;
});

host('ホスト名')
    ->set('deploy_path', 'デプロイ先のパス');

after('deploy:failed', 'deploy:unlock');

before('deploy:symlink', 'artisan:migrate');

🚢デプロイ実行

$ dep deploy [-vvv]

解説

1. bin/php

set('bin/php', '/home/ユーザ名/bin/php');

ColofulBoxサーバのCLIPHPバージョンはデフォルト5.6となっていて最新版のLaravelをダウンロードすることができません。そのためDeployerが利用するCLIPHPをバージョン7.1や7.2にする必要があります。

私はシステムのPHP7.1をユーザのbinディレクトリにコピーしてPATHを通して利用しているため上記のような設定になっていますが、バージョンさえ合っていればパスはどこでもいいと思います。

2. bin/composer

set('bin/composer', function () {
    if (commandExist('composer')) {
        $composer = locateBinaryPath('composer');
    }
    return '{{bin/php}} -d allow_url_fopen=1 ' . $composer;
});

制限2.で記載した通り、ColorfulBoxサーバではphp.iniのallow_url_fopen=Offになってる都合上、単純にcomposer installを実行することができません。そこでcomposer install時に-d allow_url_fopen=1をつけることで一時的にallow_url_fopen=Onの状態を作っています。またcomposer install時のphpに関しても先ほど2.で指定したbin/phpが利用されるようにします。