Mac で Heroku+node.js の環境を作る
手元のMacを使って、習学目的で Heroku で node.js のアプリを動かしてみようと思う。
(参考資料)
Herokuの新料金はお得なのか - フレクトのHeroku lab
Macにnodebrew(node.js, npm)をインストールする手順 - Qiita
nodebrew で Mac の Node.js 環境をスッキリさせた - akiyoko blog
Node.jsのデーモン化ツールpm2をインストール - Qiita
Heroku の登録とログイン
Heroku では、Free アカウントは日に18時間までの利用が可能とのこと。30分アクセスがなければ自動的にsleepし、また18時間以上利用すると6時間sleepでお寝んねとのこと。
基本的には Heroku の Introduction に従って、指示されたことをしてみると良い。基本的な理解はここで全てできる。ここに書くのもその補足などである。
登録
さて。Heroku 利用は初めてなのでアカウント作成から。
登録に関しては特に問題なく終了できたので、詳細は割愛。
Heroku サービスへのログイン
Heroku の Web に作成したアカウントでログインすると Dashboard がお目にかかる。Dashboard から Node.js の Get Started を選び、Introduction へ進む。この Introduction では、Mac のターミナルで実行するプログラム Heroku Toolbelt のインストールから、Node.js の基本的な構成(設定ファイル)などを教示してくれる。特に後者は、ポイントを押さえてくれていて、分かりやすくありがたい(英語ですがね)。
サンプルプログラムのデプロイ
- Introduction に従って、Heroku Toolbelt をDLして、pkg ファイルをインストールする(GUI上は変化はないよ。ターミナルで
heroku
コマンドが使えるようになる)。 - ターミナルでサンプルプログラムを Git から手に入れ、Heroku へデプロイする。
- コードを編集し、Heroku アプリ側の領域に作った Repository に
git push
する。
だいたいこんな流れ。
AWS などのインスタンスだと ssh などを使って当該マシンにログインしたりするが、Heroku の場合はローカル環境から自分の Heroku アプリをコントロールするようだ。そういった総合的な操作のコマンドの名前も heroku
である。
$ # Mac の GUI から heroku-toolbelt.pkg をインストール後
$ heroku
Installing Heroku Toolbelt v4... done.
For more information on Toolbelt v4: https://github.com/heroku/heroku-cli
Setting up node-v4.2.1... done
Installing core plugins heroku-cli-addons, heroku-apps, heroku-fork, heroku-git, heroku-local, heroku-run, heroku-status... done
(...snipped...)
$ heroku login
(...snipped...)
$ # 適当な作業ディレクトリを作る
$ mkdir -p ~/devel/heroku/sample
$ cd ~/devel/heroku/sample
$ # サンプルプログラム
$ git clone https://github.com/heroku/node-js-getting-started.git
$ cd node-js-getting-started
$ # アプリの作成
$ heroku create
$ # アプリのデプロイ
$ git push heroku master
Counting objects: 430, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (335/335), done.
Writing objects: 100% (430/430), 221.59 KiB | 0 bytes/s, done.
Total 430 (delta 62), reused 430 (delta 62)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Node.js app detected
(...snipped...)
remote: https://hogehoge-fugafuga-5963.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
$ # ランダムのサブドメインでWebアプリ https://hogehoge-fugafuga-5963.herokuapp.com/ が作られた
$ # 稼働状況を確認
$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free.
$ # ブラウザで確認。↓ブラウザを開いてくれるショートカット。
$ heroku open
Opening hogehoge-fugafuga-5963... done
ローカル環境(Mac)に Node.js の開発環境を整える
ローカルの Mac に Node.js をインストールすれば、ローカルで動作内容などを確認しながら開発しつつ、完成版を Heroku にデプロイする、という流れを作れる。
nodebrew のインストール
冒頭の参考ページを参照しながら、nodebrew をインストールする。
$ cd
$ curl https://raw.githubusercontent.com/hokaccha/nodebrew/master/nodebrew | perl - setup
# カレントのパスを通す
$ export PATH=$HOME/.nodebrew/current/bin:$PATH
# .bash_profile にも記述しておく
$ vi .bash_profile
(... snipped ...)
export PATH=$HOME/.nodebrew/current/bin:$PATH
# nodebrew を最新版に
$ nodebrew selfupdate
node.js と rpm のインストール
同じ記事を参考に Node.js の最新版をインストールする。
なお、サンプルプログラムが、v0.12.7
を使っていたので、それに合わせた。
が、libgcc_s.so
のバージョン違いで、コンパイルの際、リンクで失敗する。
$ # インストール失敗
$ nodebrew install latest
(...snipped...)
ld: library not found for -lgcc_s.10.5
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [/Users/onodera_takahiro/.nodebrew/src/v0.12.7/node-v0.12.7/out/Release/openssl-cli] Error 1
make: *** [node] Error 2
libgss_s.so
の当該バージョンをソースからコンパイルするのもちょっと手間かもなので、別なページを参考に、バイナリインストールをしてみる。
$ nodebrew ls-remote
$ nodebrew install-binary v0.12.7
Installed successfully
$ nodebrew ls
v0.12.7
current: none
$ nodebrew use v0.12.7
use v0.12.7
$ node -v
v0.12.7
npm
も最新版に更新しておく。なお、npm は Node.js のパッケージ管理ツールである。
$ npm install -g npm
ローカルの Mac でサンプルページを動かす
ローカルで開発できるようにするために、localhost でアプリを実行させるようにする。
サンプルプログラムのディレクトリで、npm
を実行して、モジュールの依存関係を解決する。ま、要はローカルで必要なモジュールをインストールするってことね。
$ # サンプルをインストールした場所
$ cd ~/devel/heroku/sample/node-js-getting-started
$ npm install
コマンド heloku
で、アプリを起動する。5000番ポートで受け付けるアプリが立ち上がるはずだ。
$ heloku local web
ブラウザを使って、http://localhost:5000/
にアクセスして、サンプルアプリのページが開けばOK。
(補足)pm2 を使って動かしてみる
コマンドheloku
を使ってもいいが、この場合、Daemon化していないので当然ながらプロンプトは返ってこない。なので適当なDaemon化ツールをインストールしてみる。
forever
とか有名っぽいけど、多機能・高性能な pm2
を、後学のためにもインストールしてみた。
インストールの仕方とかは、こことかたくさんあるので、詳しい話は割愛。
$ # pm2 をグローバルインストールする
$ npm install -g pm2
$ # サンプルディレクトリに
$ cd ~/devel/heroku/sample/node-js-getting-started
$ pm2 start index.js
$ pm2 list
$ pm2 stop index.js
(EOF)