Step 3: MeteorアプリをHerokuにデプロイしよう!
このステップではMeteorアプリをHerokuにデプロイする方法について学びます。
Herokuアプリの作成
MeteorアプリをHeroku上で動かすために、Herokuアプリを作ってみましょう!
新しいターミナルウィンドウを開いて、Step 2で作成したMeteorアプリのディレクトリに移動します。
$ cd meteor-react-example-simple-memo
続いて、Step 1で作成したHerokuアカウントでログインします。
$ heroku login
Enter your Heroku credentials.
Email: *************@example.com
Password (typing will be hidden):
Logged in as *************@example.com
heroku create
コマンドで新しいHerokuアプリを作成します。
$ heroku create
Creating app... ⬢ immense-meadow-60079
https://immense-meadow-60079.herokuapp.com/ | https://git.heroku.com/immense-meadow-60079.git
するとHerokuアプリが作られます。ここで表示されたURLがアプリのURLになります(各自異なります)。後でこのURLを使用しますので、どこかにメモしておきましょう。
(上記の例でいうと immense-meadow-60079 がHerokuアプリ名で、https://immense-meadow-60079.herokuapp.com/ がHerokuアプリのURLになります)
ターミナルに表示されたHerokuアプリのURLにアクセスしてみましょう。
- https://************.herokuapp.com/ (ターミナルに表示されたURL)
これでHerokuアプリが立ち上がりました。
余談: Herokuアプリ名について
heroku create
を引数なしで実行すると、自動生成されたアプリ名が付きます。
自動生成されたアプリ名ではなく、任意のHerokuアプリ名を付けるには、
heroku create
コマンドの引数にお好みのアプリ名を指定します。
$ heroku create <APPNAME>
### 例
$ heroku create meteor-simple-memo
Herokuアプリ名に使用できる文字は英字小文字(a-z
)と数字(0-9
)とハイフン(-
)のみです。
また、Herokuアプリ名はユニーク(重複不可)である必要があり、作ろうとしているアプリ名と同一の名前のアプリがすでにHeroku上に存在する場合は別の名前を指定しなければなりません。
Meteor用のBuildpack設定
続いてMeteorアプリをHeroku上で動かすために必要なBuildpackをHerokuアプリに設定します。
Buildpackはアプリのビルド手順やビルドに必要なファイルをまとめたもので、Herokuが公式に用意しているものの他に、様々な言語やフレームワークに対応したサードパーティー製のBuildpackも公開されています。
Meteor用のBuildpackは公式で用意されていないため、サードパーティー製のBuildpackを使用することになります。
サードパーティー製のMeteorのBuildpackはいくつか存在しますが、このチュートリアルでは現在もアクティブにメンテナンスされているMeteor Buildpack Horseを使用します。
Meteor Buildpack Horse
https://github.com/AdmitHub/meteor-buildpack-horse
Buildpack の設定
それでは heroku buildpacks:set
コマンドを使用して、Buildpackを設定します。
$ heroku buildpacks:set https://github.com/AdmitHub/meteor-buildpack-horse.git
これだけです!簡単ですね :-)
mLab(旧MongoLab)アドオンの追加
MeteorはバックエンドのデータベースにMongoDBを使用しています。
サンプルのMeteorアプリもMongoDBを使用していますので、MongoDBのセットアップを行います。
といっても、HerokuではMongoDBホスティングサービスのmLab(旧MongoLab)アドオンを追加することで、簡単にMongoDBを使うことができます(無料で500MBまで)。
mLab(MongoLab)アドオンを追加するのは以下のコマンドを実行します。
$ heroku addons:create mongolab
これでMongoDBが使用できるようになりました。
Meteorアプリ用設定
Meteorアプリを動かすための設定をいくつか行います。
まずアプリのルートURLの環境変数を設定します。
$ heroku config:set ROOT_URL=https://****************.herokuapp.com/
ROOT_URL
のURL部分はheroku create
実行時に表示されたアプリのURLに書き換えてください。
続いて、Meteorアプリの heroku でのスケールアップを有効にするために、http-session-affinity
という機能を有効にします。
$ heroku labs:enable http-session-affinity
これでMeteorアプリをHeroku上で動かす準備が整いました。
Herokuデプロイ
それではMeteorアプリをHerokuにデプロイしましょう!
HerokuのGitリポジトリにMeteorアプリをgit push
します。これがデプロイのコマンドになります。
$ git push heroku master
すると自動的にビルドが実行されます。
### ログ
Counting objects: 35, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (35/35), 7.11 KiB | 0 bytes/s, done.
Total 35 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Fetching set buildpack https://github.com/AdmitHub/meteor-buildpack-horse.git... done
remote: -----> Node.js app detected
remote: -----> Installing node
remote: -----> Installing meteor
remote: Downloading Meteor distribution
remote: ######################################################################## 100.0%
remote:
remote: Meteor 1.3.2.4 has been installed in your home directory (~/.meteor).
remote:
remote: Now you need to do one of the following:
remote:
remote: (1) Add "$HOME/.meteor" to your path, or
remote: (2) Run this command as root:
remote: cp "/tmp/buildpack20160515-160-16tbp5r/meteor-aO4q/.meteor/packages/meteor-tool/1.3.2_4/mt-os.linux.x86_64/scripts/admin/launch-meteor" /usr/bin/meteor
remote:
remote: Then to get started, take a look at 'meteor --help' or see the docs at
remote: docs.meteor.com.
remote: -----> Bundling bundle
remote: -----> Checking if this meteor version supports --server-only
remote: [email protected] node_modules/react-addons-pure-render-mixin
remote:
remote: [email protected] node_modules/react-textarea-autosize
remote:
remote: [email protected] node_modules/react-dom
remote:
remote: [email protected] node_modules/react-masonry-component
remote: ├── [email protected] ([email protected])
remote: └── [email protected] ([email protected], [email protected])
remote:
remote: [email protected] node_modules/meteor-node-stubs
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected]
remote: ├── [email protected] ([email protected])
remote: ├── [email protected] ([email protected])
remote: ├── [email protected] ([email protected])
remote: ├── [email protected] ([email protected])
remote: ├── [email protected] ([email protected], [email protected])
remote: ├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
remote: ├── [email protected] ([email protected], [email protected])
remote: ├── [email protected] ([email protected], [email protected], [email protected])
remote: ├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
remote: └── [email protected] ([email protected])
remote:
remote: [email protected] node_modules/react
remote: ├── [email protected]
remote: ├── [email protected] ([email protected])
remote: └── [email protected] ([email protected], [email protected], [email protected], [email protected])
remote: -----> Building Meteor with ROOT_URL: https://immense-meadow-60079.herokuapp.com
remote: npm WARN package.json [email protected] No description
remote: npm WARN package.json [email protected] No repository field.
remote: npm WARN package.json [email protected] No README data
remote: npm WARN package.json [email protected] No license field.
remote:
remote: > [email protected] install /tmp/build_e7aad7ca0eeaae57be863afc0325ee07/.meteor/heroku_build/app/programs/server/node_modules/fibers
remote: > node build.js || nodejs build.js
remote:
remote: make: Entering directory `/tmp/build_e7aad7ca0eeaae57be863afc0325ee07/.meteor/heroku_build/app/programs/server/node_modules/fibers/build'
remote: CXX(target) Release/obj.target/fibers/src/fibers.o
remote: CXX(target) Release/obj.target/fibers/src/coroutine.o
remote: CC(target) Release/obj.target/fibers/src/libcoro/coro.o
remote: SOLINK_MODULE(target) Release/obj.target/fibers.node
remote: COPY Release/fibers.node
remote: make: Leaving directory `/tmp/build_e7aad7ca0eeaae57be863afc0325ee07/.meteor/heroku_build/app/programs/server/node_modules/fibers/build'
remote: Installed in `/tmp/build_e7aad7ca0eeaae57be863afc0325ee07/.meteor/heroku_build/app/programs/server/node_modules/fibers/bin/linux-x64-v8-3.14/fibers.node`
remote:
remote: > [email protected] install /tmp/build_e7aad7ca0eeaae57be863afc0325ee07/.meteor/heroku_build/app/programs/server
remote: > node npm-rebuild.js
remote:
remote: {
remote: "meteor-dev-bundle": "0.0.0",
remote: "npm": "2.15.1",
remote: "ares": "1.9.0-DEV",
remote: "http_parser": "1.2",
remote: "modules": "11",
remote: "node": "0.10.45",
remote: "openssl": "1.0.1t",
remote: "uv": "0.10.36",
remote: "v8": "3.14.5.9",
remote: "zlib": "1.2.8"
remote: }
remote: [email protected] node_modules/ansi-regex
remote:
remote: [email protected] node_modules/ansi-styles
remote:
remote: [email protected] node_modules/escape-string-regexp
remote:
remote: [email protected] node_modules/strip-ansi
remote:
remote: [email protected] node_modules/supports-color
remote:
remote: [email protected] node_modules/has-ansi
remote:
remote: [email protected] node_modules/chalk
remote:
remote: [email protected] node_modules/eachline
remote:
remote: type[email protected] node_modules/type-of
remote:
remote: [email protected] node_modules/amdefine
remote:
remote: [email protected] node_modules/asap
remote:
remote: [email protected] node_modules/underscore
remote:
remote: [email protected] node_modules/meteor-promise
remote:
remote: [email protected] node_modules/promise
remote:
remote: source[email protected] node_modules/source-map-support
remote:
remote: [email protected] node_modules/semver
remote:
remote: source[email protected] node_modules/source-map
remote:
remote: [email protected] node_modules/fibers
remote: -----> Adding PATH environment
remote: -----> Running extras
remote: -----> Adding profile script to resolve MONGO_URL from mongolab addon
remote: -----> Adding profile script to resolve ROOT_URL from heroku app name
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> (none)
remote: Default types for buildpack -> web
remote:
remote: -----> Compressing...
remote: Done: 24M
remote: -----> Launching...
remote: Released v5
remote: https://**********************.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/********************.git
* [new branch] master -> master
remote: Verifying deploy... done というメッセージが表示されていればビルド完了です。
ビルドが完了したらWebブラウザでHerokuアプリURLにアクセスしてみましょう。
Meteorアプリが表示されましたか?
うまく表示されなかった方は heroku logs
コマンドでログが確認できますので、エラーの原因を探ってみてください。
$ heroku logs
無事Meteorアプリが表示された方はおめでとうございます!これでデプロイ完了です!
今後は git push heroku master
の1コマンドだけでデプロイができます。
Meteorアプリのコードを修正して何度もデプロイを試してみましょう!