WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

rocketeerでLaravel5のプロジェクトをデプロイ

      2015/07/23

composerがグローバルにインストールされていることと、Laravel5のプロジェクトがすでにあることが前提条件。

rocketeerのインストール

Laravel5のプロジェクトルートでcomposer経由でrocketeerをインストールするとエラーになる。

$ cd path/to/laravel5-project
$ composer require anahkiasen/rocketeer
Using version ^2.2 for anahkiasen/rocketeer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for anahkiasen/rocketeer ^2.2 -> satisfiable by anahkiasen/rocketeer[2.2.0].
    - Conclusion: remove laravel/framework v5.0.32
    - Conclusion: don't install laravel/framework v5.0.32
    - anahkiasen/rocketeer 2.2.0 requires illuminate/log ~4.2 -> satisfiable by illuminate/log[v4.2.1, v4.2.12, v4.2.16, v4.2.17, v4.2.2, v4.2.3, v4.2.4, v4.2.5, v4.2.6, v4.2.7, v4.2.8, v4.2.9].
    - don't install illuminate/log v4.2.1|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.12|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.16|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.17|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.2|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.3|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.4|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.5|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.6|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.7|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.8|don't install laravel/framework v5.0.32
    - don't install illuminate/log v4.2.9|don't install laravel/framework v5.0.32
    - Installation request for laravel/framework == 5.0.32.0 -> satisfiable by laravel/framework[v5.0.32].


Installation failed, reverting ./composer.json to its original content.

理由はRocketeerは2015-03-11時点で Laravel 4.0 の Illuminateを参照しようとするためらしい。
hetemlにrocketeerでLaravelを設置する – Qiita

GithubにもSee some other issues, use the PHAR or global composer version for Laravel 5 for now.とあり、現状(2015/06/23時点では)Larave5とrocketeerを同じプロジェクトにて(composer installで)一緒にインストールすることができなそうなので、仕方なくLaravel5との統合は見送る。
Laravel 5 compatibility? · Issue #481 · rocketeers/rocketeer

設定ファイルの生成

前述した理由から、Laravel5とは別にディレクトリを作ってそこのrocketeerをインストールする。

$ mkdir path/to/deploy_work
$ composer require anahkiasen/rocketeer

やっぱりデプロイの設定やタスクをリポジトリ内で管理しておきたいのでrocketeerはpahrで入れて、プロジェクト直下で実装する。

$ wget http://rocketeer.autopergamene.eu/versions/rocketeer.phar
$ chmod +x rocketeer.phar
$ sudo mv rocketeer.phar /usr/local/bin/rocketeer

参考: The fastest way is to grab the binary:

rocketeers/rocketeer

下記コマンドで設定ファイルの生成を行う。
あとで設定しなおすのでとりあえず全て空エンターで生成。

$ ./vendor/bin/rocketeer ignite

設定ファルの編集

生成した設定ファイルをデプロイ先の環境に合わせて編集していく。

今回は一旦AWSのEC2にステージング環境を構築する設定をする。また、リポジトリはBitbucketにあるものとする。

デプロイ先への接続設定

編集対象となるのは”.rocketeer/config.php”内のconnectionsという配列。
connections配列のキーにデプロイ先の接続情報を設定していく。また、’default’というキーではデプロイタスク実行時にデフォルトで利用する接続情報を設定しておく。

    'default'          => ['staging'],

    'connections'      => [↲
        'staging' => [
            'host'      => 'ip-12-34-56-78.us-west-2.compute.internal',↲  // EC2の場合Elastic IP アドレスを使用していない限りインスタンスを再起動するとIPが変わるので注意
            'username'  => 'ec2-user',↲
            'password'  => '',↲
            'key'       => '/home/okishima/.ssh/id_rsa',    // ~は/home/hogeに展開されないようです。
            'keyphrase' => '',↲
            'agent'     => '',↲
            'db_role'   => true,↲
        ],↲ 
    ],

リポジトリの設定

デプロイするプロジェクトのリポジトリの設定は”.rocketeer/scm.php”にて行う。

以下のキーに利用するバージョン管理ツールやリポジトリのアカウント情報などを設定していけばOK。

    'scm'        => 'git',
    'repository' => 'https://user@bitbucket.org/team/project.git',
    'username'   => 'username',↲
    'password'   => 'password',
    'branch'     => 'master',

パスの設定

デプロイ時にcomposerを利用するので、デプロイ先にcomposerをインストールした上で、そのパスを”.rocketeer/paths.php”で設定する。

    'composer' => '/usr/local/bin/composer',

デプロイ先の設定

デプロイ先の設定は”.rocketeer/remote.php”にて行う。

配置先のディレクトリを’root_directory’キーに設定する。

     'root_directory' => '/var/www',

また、パーミッションの設定も行う。
ディレクトリビューションによってapacheの実行ユーザが違うと思うのでそのへんも適宜変更。

    // sudoで実行するユーザ名。
    //"ec2-user"にすれば`sudo -u ec2user 〜`というように実行される。trueにしておけば`sudo 〜`で実行
    'sudo' => true,

    // sudoで実行するコマンド
    'sudoed' => ['chmod', 'chown'],    

    // Permissions$↲
    ////////////////////////////////////////////////////////////////////

    'permissions'    => [

        // The folders and files to set as web writable
        'files'    => [
            'storage',
            'public',
        ],

        'callback' => function ($task, $file) {
            return [
                sprintf('chmod -R 755 %s', $file),
                sprintf('chmod -R g+s %s', $file),
                sprintf('chown -R apache:apache %s', $file),
            ];
        },

    ],

デプロイ

下記コマンドでデプロイできる。

$ vendor/bin/rocketeer deploy

“sorry, you must have a tty to run sudo”というエラーが出た場合は下記を参照。
“sorry, you must have a tty to run sudo” というエラーメッセージが出たときの対処法

 - Laravel , , , ,