セットアップしたばかりのSymfony4をHerokuにデプロイしてみる

2018/02/15追記)
HerokuっていまPHP7.1ではないのね。。。
Symfony4は最低要件7.1なのでHerokuでは動かない部分が出てくるかも。。


devcenter.heroku.com

すべてドキュメント通り、というわけにはいかないため、所々変えていかなければいけない。

Heroku CLIをインストールしておく。

$ brew install heroku/brew/heroku

Symfony4プロジェクトを作成。

$ composer create-project symfony/skeleton my-app

Heroku上にアプリケーションを作成する。
タイムゾーンも変えておく。

$ cd ./my-app
$ heroku login
$ heroku create my-app
$ heroku config:add TZ=Asia/Tokyo

プロダクション環境として動作させるために環境変数を設定する。

How to Master and Create new Environments (Symfony Docs)

$ heroku config:set APP_ENV=prod

Procfile を作る。
ここではNginxで動かす想定。
あとで作成するNginxのconfファイルを読み込むように記述する。
Symfony4は web/ ではなく public/ なので注意。

$ echo 'web: $(composer config bin-dir)/heroku-php-nginx -C nginx_app.conf public/' > Procfile

nginx_app.conf を作成して、Nginxの設定を書き込む。

Customizing Web Server and Runtime Settings for PHP | Heroku Dev Center

とりあえず、こんな感じ。

location / {
    try_files $uri /index.php$is_args$args;
}

location ~ ^/index\.php(/|$) {
    fastcgi_pass heroku-fcgi;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $realpath_root;

    internal;
}

location ~ \.php$ {
    return 404;
}

これで一通りできた。
Herokuにデプロイする。

$ git add .
$ git commit -m "comment."
$ git push heroku master

実は、まだこの状態だとアクセスしても500エラーとなり、おそらく真っ白な画面が表示される。
これは本番環境の場合、ルーティングが全く定義されていないとエラーになってしまうから(開発環境だとウェルカムページが表示される)。

tomcky.hatenadiary.jp

なので、以下を参考にコントローラを作成し、ちょっとしたページを1つでも作っておかないといけない。

Create your First Page in Symfony (Symfony Docs)

もしくは、手っ取り早く試しにデプロイできているかだけでも確認したい場合は、環境変数をdevにする。

$ heroku config:set APP_ENV=dev

これで、ページが表示されるはず。