関連記事:Laravel + heroku の環境を1行でセットアップするスクリプト
Laravelとherokuを使うとちょっとしたデモアプリなどをかなりスムーズに開発&公開することができます(しかも無料で)
加えて、Laravel用のDocker環境であるLaradockでローカル開発環境も簡単に準備することができます。1
とはいえ、全部を準備しようとすると手順がやや煩雑なので一連のコマンドをまとめてみました。
なるべく書き換えが最小限になるように記述しています。
##動作環境
検証環境はmacOSですが他のOSでもだいたい一緒なはず
必要なもの
heroku CLI (が使える状態にあること=インストール、ログイン済み)
PHP(5.6.x or 7.1.x)
composer
git
Laradockを使用する場合
Docker
##1. Laravelプロジェクトを作成
composer create-project --prefer-dist laravel/laravel [appname]
cd [appname]
git init
git add .
git commit -m 'create app'
※*[appname]*の書き換えが必要
##2. HTTPサーバー設定を作成
Apacheの場合
echo web: vendor/bin/heroku-php-apache2 public/ > Procfile
git add .
git commit -m 'add web server setting'
Nginxの場合
echo web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/ > Procfile
echo 'location / { index index.html index.php; try_files $uri $uri/ /index.php?$query_string; }' > nginx_app.conf
git add .
git commit -m 'add web server setting'
##3. herokuアプリケーションを作成してデプロイ
heroku create $(basename $(pwd))
heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)
git push heroku master
##4. 動作確認
ここまで行えばHeroku上で動作確認ができます。
heroku open
以下の項目は必要に応じて参照してください。
##補足1. DBを使用する場合
Heroku Postgres2を追加
heroku addons:create heroku-postgresql:hobby-dev
php -r 'preg_match("/^postgres:\/\/(.+?):(.+?)@(.+?):(.+?)\/(.*?)$/", `heroku config:get DATABASE_URL`, $matches); `heroku config:set DB_CONNECTION=pgsql DB_HOST=$matches[3] DB_PORT=$matches[4] DB_DATABASE=$matches[5] DB_USERNAME=$matches[1] DB_PASSWORD=$matches[2]`;'
2行目のやけに長いコマンドはHeroku Postgresの接続情報をLaravel用の環境変数にセットしています。
詳しくは別の記事を参照してください
必要なタイミングでマイグレーションも行ってください
heroku run 'php artisan migrate'
##補足2. ローカル開発環境としてLaradockを使用する
注意
Laradock v7.1.0以降、Dockerイメージの命名に関する設定が変更されました。
以前はlaradockのディレクトリ名とイメージ名(およびコンテナ名)が連動しており、本記事の解説は当時の仕様に則った形になります。
v7.1.0以降では.envの"COMPOSE_PROJECT_NAME"にディレクトリ名を設定する必要があります。
Laradockの取得と設定
#Laravelプロジェクトディレクトリ内で
git clone https://github.com/Laradock/laradock.git
mv laradock/ $(basename $(pwd))dock/
cd $(basename $(pwd))dock
cp env-example .env
Laradockの.envは必要に応じて編集してください
参考までに主な書き換え例を記載します。
(Laradockはアップデートが活発なので内容が変わっている可能性あり)
#ホストマシン上のデータ保存場所(DBサーバーのデータなど)
DATA_SAVE_PATH=~/.laradock/[appname]_data
#PHPの拡張モジュールのインストール(DBクライアントなど)
PHP_FPM_INSTALL_MSSQL=true
PHP_FPM_INSTALL_PGSQL=true
#Nginxの設定(ホストマシンでのポートなど)
NGINX_HOST_HTTP_PORT=8080
NGINX_HOST_HTTPS_PORT=4430
#Apacheの設定(ホストマシンでのポートなど)
APACHE_HOST_HTTP_PORT=8080
APACHE_HOST_HTTPS_PORT=4430
#Postgresの設定(ホストマシンでのポートなど)
POSTGRES_PORT=54320
外部公開しなければDBユーザー/パスワードなどは標準のままでいいと思いますが、
ポートは別の環境とかぶる事があるので変更をオススメします。
コンテナの起動
docker-compose up -d nginx postgres
#初回はこの後ビルドが行われる
docker-compose up -d
以降の引数が起動するコンテナの指定になります。
nginx
, apache
, postgres
, mysql
などを適宜指定してください。
また、関連するコンテナも自動で立ち上がります(php-fpmなど)
起動が完了したらブラウザで、http://localhost:[.envで指定したポート]
を開けばLaravelのトップページが表示されるはずです
DBを使用する場合の設定
まず、Laravelプロジェクトの.envファイルを書き換えて、LaradockのDBを参照する設定が必要です。
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
DB_DATABASE
、 DB_USERNAME
、 DB_PASSWORD
はLaradockの.envの内容と合わせる必要があります。
(Postgresの場合は、POSTGRES_DB
、 POSTGRES_USER
、 POSTGRES_PASSWORD
)
詳しい解説は割愛しますがDB_HOST、DB_PORTは固定で構いません。
簡略化のために.envを同期するPHPスクリプトも用意しました。
Laradockフォルダに配置してphp sync_env.php
するだけですが、
今回の記事の構成に依存した内容になっていますので、フォルダ構成などが違うとうまく動かないかもしれません。
DBの操作
Laradock環境のDBへマイグレーションやシーダーを実行する際は、コンテナにログインする必要があります。
#laradockディレクトリ内で
docker exec -it $(basename $(pwd))_workspace_1 /bin/bash
#以後コンテナにログイン
php artisan migrate
php artisan db:seed
exit
#ホストに戻る