Laravel+Rocketeer+CircleCIの構成でAWSにデプロイする

参考になればシェアしてもらえるとうれしいです

  • このエントリーをはてなブックマークに追加
  • 8
Screenshot_from_2015-06-07 11:15:40
スポンサーリンク

何故やったか

以前、Amazon EC2+Jenkins+capistranoでLaravel5をデプロイするという記事を書きましたが

  • Jenkinsは職人化する
  • Laravelとの相性はCapistrano < Rocketeer

ということで、CircleCIと、Rocketeerを試してみました。

概要

・Rocketeer
https://github.com/rocketeers/rocketeer

PHP製のデプロイツール。
RubyでいうCapistrano。
Laravelプロジェクトと親和性が高く、各種チャットアプリにも通知が行える。

・CircleCI

https://circleci.com/
俗に言うCIツール。
テスト・デプロイなどが行える。
Githubでソース管理をしていれば利用が可能。(Private/Public問わず)
基本無料。早く処理させたいなどがあれば有料化するとよい。

構成方法

1.LaravelプロジェクトにRocketeerをインストール

rocketeerはComposerでも管理されており、バージョン管理的にもComposerでインストールするのが定石的には良いのでしょうが、2015-05-31現在のバージョンではLaravel4のimmutateを参照しにいくため、エラーとなってしまいLaravelプロジェクトのフォルダと同一フォルダに入れることが出来ません。

せっかくLaravel Likeなデプロイツールなのに、管理を煩雑にするのは好ましくないため、今後のUPDATEに期待し手作業でインストールすることとします。

2.Rocketeerの設定ファイルを作成

※ いろいろと聞かれますが、後ほど設定ファイルをいじるためすべて[ENTER]でOKです。

3. Rocketeer リモートの設定ファイルを編集する

.rocketeer/config.php

リモートの接続関連の設定を行ないます。

.rocketeer/remote.php

リモートのファイルパスや権限などを設定します。
Laravelベースで指定されているので、ディレクトリ関連だけ編集します。

.rocketeer/scm.php

Deployするアプリケーションのリポジトリを指定します。
デプロイはsvnとgitをサポートしています。

4.デプロイのテスト

設定ファイルが正しく指定出来たかを確認するためコマンドラインでチェックを行ないます。

パーミッションなどでエラーが出た場合はCapistranoの時と同様、エラーメッセージを読み地道に対処しましょう。

5. デプロイのシェルファイルを作成する

CircleCIでデプロイするために、シェルファイルを作成する。
circle.ymlに直接コマンドを書いても稼働するのですが、細かいカスタマイズを行ないたいためシェルファイル化します。

やっていることは

  1. AWSのアクセスキー、シークレットキーをCircleCIの設定から取得する。
  2. CircleCIが動いている筐体のIPを取得する
  3. AWS CLIより、セキュリティグループの設定変更を行ない、現IPからのアクセスを許可する
  4. デプロイ処理を行う
  5. AWS CLIより、セキュリティグループの変更を行ない、IP遮断を行う

という流れになります。

CircleCIはAWS上で動いているため、IPが毎回異なるためこのようなHackを行っています。

6.  CircleCIの設定ファイルを作成する

CircleCIはプロジェクト直下の「circle.yml」ファイルを元に稼働するため、circle.ymlを作成します。

ymlファイルの記述法は公式ドキュメントを参照しながら作成して下さい。

CircleCIのawsは若干古いため、シェルファイルのIP許可などが動きません。
そのため、dependeciesのpreにフックし、awscliのインストールを行っています。

phpのバージョンなどは適宜自分の環境に合わせて設定して下さい。

7. envファイルを何とかする

Laravelプロジェクトは環境設定をenvファイルに持たせることを推奨しています。

しかし、Gitに.envファイルを管理させるのは開発効率的にもよろしくないので、.envファイルは除外しています。

Rocketeerのデプロイは該当サーバに入り、その中で「git clone」を行うため、管理されていないファイルをデプロイすることが出来ません。

ベストプラクティスは何なのかわかりませんが、今回は「.env.production.php」というファイルをGit管理下に置き、デプロイした後にリネームコピーするように変更しました。

.rocketeer/hooks.php

rocketeerでは、デプロイ前・デプロイ後にタスクを登録することが出来ます。
その機能を利用し、リネームコピーで.envファイルを設置することにしました。

ベストプラクティスがあれば、ぜひ教えていただければ助かります。

Composer管理が出来るようになれば「artisan」との連携なども容易になるため、どんどん使いやすくしていければなーと思っています。

スポンサーリンク

参考になればシェアしてもらえるとうれしいです

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です