app.jsonとは...?
app.jsonは Heroku 環境構成ファイルとして機能します。
今の所用途としては以下のケースが考えられます。
- Heroku Button
- Docker で環境構築
- PR でアレする。
app.jsonをベースにDockerファイルを作成するのは若干挙動がおかしかったりすることもあり、
自分でcomposeファイル書くほうが良さそう。
https://devcenter.heroku.com/articles/app-json-schema
にサンプルのapp.json
が掲載されています。
結構オプションの項目が多いので、最小構成でも全然動く。
name, description, keyword, website, repository, logo
Heroku Buttonでアプリを作成する際に表示されるオプション情報。
基本的にoptionalで省略可能。
logo は外部にホスティングされた画像のURLを指定し、SVG,PNG,JPGが使える。
success_url
アプリがデプロイされた際に表示するURL
/
スタートで、アプリ自体のURLを指定する事が可能
{
"success_url": "/welcome"
}
script
デプロイに併せて実行されるスクリプト。現在postdeploy
エントリのみサポート
{
"scripts": {
"postdeploy": "bundle exec rake bootstrap"
}
}
env
アプリに設定する環境変数。"generator": "secret"
でrandomな値を自動生成させることが出来る。
{
"env": {
"SECRET_TOKEN": {
"description": "A secret key for verifying the integrity of signed cookies.",
"generator": "secret"
},
"WEB_CONCURRENCY": {
"description": "The number of processes to run.",
"value": "5"
}
}
}
formation
dynoの種類を定義する。Procfileの代わりになるものではない。
{
"formation": {
"web": {
"quantity": 2,
"size": "Performance-M"
}
}
}
image
Dockerで使用するイメージ名。Dockerで使用しないなら不要。
addons
使用するAddons
buildpacks
複数指定可能で、最後に記述したものがアプリケーションのタイプを規定する。
Heroku Button
Heroku App のリポジトリにapp.json
を置いておくとHeroku Buttonの機能が使える。
プライベートリポジトリとかはNGっぽい(Heroku がデプロイ用にtarを取りに行くので)
Github 連携済みのアカウントを利用して、プライベートリポジトリにも対応可能なようです。
http://qiita.com/ryu22e/items/4d3b2e73efa1459725c1
一番簡単な設置方法は、Githubの公開リポジトリのReadmeに以下の記述を入れておくやり方。
[](https://heroku.com/deploy)
リポジトリの情報を入れなくても、リファラからリポジトリのURLを認識して勝手に特定してくれる。
Review App
- パイプラインを作成して、Github連携を追加する。
- review app 設定を有効化する。
- PullRequest を作成
こちらはgithub連携機能を作成するので、Private リポジトリでも有効っぽい。
{appName}-pr-x
という名前で自動的にアプリが立ち上がる。
Github側 PRの画面でもdeployの結果が表示されるあたり便利。
設定で変更可能だが、PR閉じた際に自動的にアプリを削除する事も可能。
Docker
下記の記事は2016年 01月の記事だけどもう内容が古くて実行できない。
https://devcenter.heroku.com/articles/docker
heroku-docker プラグインが herokuk-container-toolsに置き換わった模様
こちらのREADME.mdを参考にするのが良さそう
https://github.com/heroku/heroku-container-tools
コンテナの作成
$ heroku plugins:install heroku-docker
$ heroku docker:init
このコマンドでDocker fileとdocker-compose.ymlが作成される。
後はdocker daemon が起動している状態で、コンテナを立ち上げればOK
$ docker-compose up web
worker 用のコンテナも起動する場合には、workerの名前を指定してやれば良い。
なお、app.json更新の際には--force
オプションを付けてdocker ファイルなどを更新できる。
$ heroku docker:init --force
気になった点など
上手いこと利用するには、docker-composer.yml をかなり触らないと行けない。
Local HDDのマウントは デフォルトで作成されるshellの方にしか設定されていないので、
リアルタイムにWebの更新を進めようと思うとvolume設定をweb側にも追加する。
addons で設定したdatabaseなどもコンテナ設定等が追記されるものの、depends等まで上手いこと設定してくれるわけでもないので何とかしてweb側からつなぐよう設定を記述する必要あり。
あと当然全てのaddonsが対応しているわけではない。
カスタムビルドパックの設定などもapp.jsonで設定可能だが反映はされない模様?
app.json でenvの設定を空にしておくと、docker-compose.ymlに空のenvironments:
エントリが作成されて、パースエラーになる(手動で [] を追加すれば治る)。
気になった点など(PHP)
Heroku環境構築では、Buildpack 設定さえすればcomposer require heroku/heroku-buildpack-php
不要だったが、
docker側ではエラーが出るっぽい。
ので、dockerで環境構築する際にはdev dependency にビルドパックを追加する必要あり。
phpプロジェクトではdocker buildの際にcomposerの post-install-cmdを叩くよう。からでも良いのでエントリに追加しておく。
(composer run ではなくて、composer.jsonをpythonでパースしてシェルで叩いている。)