VPC内にElastic Beanstalk + RDS の環境を構築して Laravel アプリをデプロイする [Laravel5アプリデプロイ編]

今後も何度か同じことを調べそうなので忘備録としてまとめておく。手順をstep by stepで記述するが、それぞれ分量が多いので以下の通り章立てを行ってエントリを分割する。

  • VPC構築編
    • VPCの作成
    • VPC、NetworkACL、SecurityGroupの確認、タグ付け
    • VPCのDNSホスト名を有効にする
    • サブネットの作成、タグ付け
    • インターネットゲートウェイの作成、タグ付け、VPCにアタッチ
    • パブリックサブネット用RoutingTableの作成
    • パブリックサブネット用RoutingTableにインターネットゲートウェイの関連付け
    • 作成したサブネットをパブリックサブネット用RoutingTableに繋ぎかえる
  • RDS構築編
    • MySQLの設定変更(DBパラメータグループの作成)
    • DBサブネットグループを作成
    • RDS用セキュリティグループの作成
    • RDSインスタンスの作成
    • エンドポイントの確認、疎通確認
  • Elastic Beanstalk構築編
    • 環境の構築
    • .ebextensionsによるカスタマイズ
  • Laravel5アプリデプロイ編(本エントリ)
    • gitリポジトリからclone
    • .envの編集
    • アプリで使うDBのダンプファイルをRDSにコピー
    • Laravelインストーラの準備
    • Laravel本体のインストール
    • ビルトインサーバでの疎通確認
    • Elastic Beanstalkへのデプロイ

gitリポジトリからclone

通常 Laravel5 にはデフォルトの .gitignore が作られており、Laravel本体は.gitignoreに登録されている。まず、アプリをcloneし、そのあとでLaravel本体をインストールする。
どこか、Laravel5の要件を満たすところでgitリポジトリからcloneする。

$ pwd
/home/ikuty/www/
$ git clone ssh://servername/var/git/project.git project

.envの編集

アプリケーションの設定を変更する。/config 内に各種設定ファイルが配置されているが、laravelでは.envを変更することで /config内のenv()関数に展開される仕組みになっている。だから、/config 内の各種ファイルを直接変更する必要はない。/config 内も git の構成管理に含めても良い
cloneした先でenvを編集する。.env_example をリネームすると楽。

  • APP_KEY= *** 次項で示すようにキーを生成する
  • DB_HOST : RDS編で設定したRDSエンドポイントを指定する
  • DB_DATABASE, USERNAME, PASSWORD : RDS編で設定した各種設定を指定する
APP_ENV=local
APP_DEBUG=true
APP_KEY=****
APP_URL=http://hoge.com/

DB_CONNECTION=mysql
DB_HOST=rds-endpoint
DB_PORT=3306
DB_DATABASE=hogedb
DB_USERNAME=hoge
DB_PASSWORD=fuga

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

キーを生成する。以下のコマンドで .env の APP_KEY が差し替わる。

$ php artisan key:generate

アプリで使うDBのダンプファイルをRDSにコピー

本来は Migration を使うべきだが…。Migration を利用しないでDBを作ってしまった場合は泥臭くやる…;;まず、ダンプ。

$ mysqldump -u hoge -p appdb > appdb.sql

RDS側にDBを作成し権限を付与しておく。

$ mysql -h [rds-endpoint] -u hoge -p
$ > CREATE DATABSE appdb;
$ > GRANT ALL ON appdb.* to hoge@localhost;
$ > FLUSH PRIVILEGES;
$ > SHOW DATABSES;
$ > ...

RDS上のDBにダンプしたsqlを流し込む。

$ mysql -h [rds-endpoint] -u hoge -p -D appdb < appdb.sql

Laravelインストーラの準備

composerを利用する。パスを通す。本エントリ作成時の最新は version1.3.3。

$ composer global require "laravel/installer=~1.1"
$ echo 'export PATH=~/.composer/vendor/laravel/installer:$PATH' >> ~/.bash_profile
$ source .bash_profile
$ laravel
Laravel Installer version 1.3.3

Laravel本体のインストール

composerが準備できたらcomposer installでLaravel本体をインストールする。

$ cd project
$ composer install

ビルトインサーバでの疎通確認

この状態でビルトインサーバを立ち上げ、疎通確認を行う。

$ cd project
php artisan serve --host hoge.com
Laravel development server started on http://hoge.com:8000/

Elastic Beanstalkへのデプロイ

Elastic Beanstalk構築編にて、環境の準備が出来ているものとする。
eb deploy コマンドにより、カレントディレクトリ以下のファイルをデプロイする。また、.ebextension に DocumentRoot を設定する。カレントディレクトリと DocumentRoot の組み合わせを正しく設定する必要がある。

まず、DocumentRootを設定するため、.ebextensionディレクトリを作成し、設定ファイルを作成する。

$ pwd
/home/ikuty/www/
$ mkdir .ebextensions
$ cd .ebextensions
$ vi 01_documentroot.config

01.documentroot_config は以下の通り。YAMLとして記述する必要がある。空白とタブの扱いがシビアなので、タブが入らないように注意する。ファイルの先頭の"01" は、ファイルが解釈される順番を表す。.ebextensions 内に、01,02,... のように設定を複数配置できる。

option_settings:
  - namespace: aws:elasticbeanstalk:container:php:phpini
    option_name: document_root
    value: /project/public

DocumentRoot を /project/public と設定した場合に正しい構成になるように、カレントディレクトリを移動し、eb deployを実行する。~/www に移動して、/project 以下をデプロイすれば良い。

$ cd ~/www/
$ eb deploy
Creating application version archive "app-160630_130423".
Uploading: [##################################################] 100% Done...
INFO: Environment update is starting.
INFO: Deploying new version to instance(s).
INFO: New application version was deployed to running EC2 instances.
INFO: Environment update completed successfully.

設定が正しければ2分弱で完了する。

シェアする

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

フォローする