Herokuでnode.jsアプリ立ち上げてみるログ

手軽にnode環境つくれるようにしたい

ので、いい加減情報も出尽くしてそうなHerokuさんをいっちょ試してみた。想像以上に簡単だったけど、例によってログ。ここんとこログばっかですんません(´・ω・`)ちかごろアプリケーション書いてないもんで...

ということで、身の回りの環境刷新ログシリーズ。

heroku関連のコマンドを使えるように

Heroku ToolbeltをDonwloadして、Heroku Clientをインストール(他にもForemanとか色々入るみたいだけど)します。

そして、heroku loginで公開鍵をアカウントに登録します。

% heroku login
Enter your Heroku credentials.
Email: mail@example.com
Password (typing will hidden):
Found the following SSH public keys:
1) heroku.pub
2) id_rsa.pub
Which would you like to use with your Heroku account? 1
Uploading SSH public key /Users/ahomu/.ssh/heroku.pub… done
Authetication sucessful.

heroku.pubは予め作成済みということで割愛。

npmによるpackage.jsonの初期化

nodeなわけなので、npmでpackage.jsonを管理します。Herokuにdeployしたときは、package.jsonの記述内容に従って色々初期化し直してくれてる模様。

実作業としては、ディレクトリつくって、npm initするだけです。

% mkdir HerokuTest
% cd HerokuTest
% npm init
(…対話質問に答える…)
About to write to /Users/ahomu/package.json:

{
  "name": "test",
  "version": "0.0.0",
  "main": "index.js",
  "author": "ahomu",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  }
}

expressをインストール。--saveで、package.jsonのdependenciesに勝手に追加してくれます。

% npm install express --save

mainとscriptsを消し、enginesを書き足して、大体こんな感じ。

{
  "name": "test",
  "version": "0.0.0",
  "author": "ahomu",
  "dependencies": {
    "express": "3.0.0beta7"
  },
  "engines": {
    "node": "0.8.2",
    "npm": "1.1.36"
  }
}

アプリケーションをでっちあげ

この項は、はじめてのHeroku(node.js) - 四角革命前夜を完コピさせていただいてます(´ω`)

web.jsとして下記のコードを作成。

var express = require('express'),
    app = express.createServer();

app.get('/', function (req, res) {
  res.send('Hello, World!');
});

app.listen(process.env.PORT || 3000);

プロセスファイルと、gitignoreをセッティング。

% echo 'web: node web.js' > Procfile
% echo 'node_modules/' > .gitignore

gitとherokuの関係を初期化

とりあえずローカルのリポジトリにherokuリモートを追加するような感じでいきます。

% git init 
% git add .
% git commit -m "initialize"

そしてheroku createでherokuのリモートを追加します。

% heroku create xxxxx-xxxx
Creating xxxxx-xxxx… done, stack is cedar
http://xxxxx-xxxx.herokuapp.com/ | git@heroku.com:xxxxx-xxxx.git
Git remote heroku added

あら簡単。

デプロイ

あとはgit push heroku masterで、アプリケーションを送り込むだけ!

% git push heroku master
% heroku open # ブラウザで公開中のアプリURLを開く

リモートgitのhookスクリプトとして、heroku側のアプリ初期化が起動するのかな?ともあれ、pushするだけでデプロイになるとかステキですね。話には聞いておりましたが。

簡単な実験アプリを作るだけならこれで十分そうです。

追記:ローカルでアプリを実行するとき

ときは、冒頭のHeorku Toolbeltで一緒に入ったと思われるforemanを使います。foreman startでアプリが立ち上がります。めっさ簡単。.

% foreman start

ローカルもProcfile読んでくれて実行できます。特にポートを指定しないときは、foremanデフォルトの5000番をlistenしますので、localhost:5000にアクセスすればok。

ただ、ファイルの更新監視で自動restartとかは無い?っぽいので、開発ローカルはやっぱ別の手法で立ち上げたほうがよさそう。Keeping node.js Running | Felocity.comで書いてある、runjsとかファイル更新でrestartしてくれた。が、なぜかcpuをめちゃめちゃ使いやがったので様子見。

% echo 'web: runjs web.js' > Procfile.development
% foreman start -f ./Procfile.development

これでいいか。runjsはcpuバカ食いしないやつに差し替えるとして、一応productionはnode、developmentはファイル更新検知できる系で立ち上げられることにする。

参考