雖然在去年九月的時候
就嘗試了一次 heroku,
不過因為沒有實際需求加上又忙別的事情,
一直沒有仔細玩玩 heroku,
不過上個月去參加香港 Facebook Mobile Hack 的活動後,
發現原來 heroku 現在竟然可以支援在上面跑 Nodejs ,
於是又開始了柯南的 heroku 使用之路。

herokuSupportedLanguages 

說老實話,
heroku 現在竟然支援了上面這樣多的程式語言,
真的是蠻厲害的。

herokuAddons 

除此之外,
heroku 還提供了許多 add-ons 可以讓我們加強程式的功能,
例如外掛 mongo db 或 memcache 等等功能,
真的是讓開發者可以專注在開發功能的好幫手,
比較不習慣的是在使用 add-ons 之前必須要貢獻信用卡資料給 heroku,
即使一開始的用量沒有超過 Free 的 Quota。 

幸好如果單純使用 Hosting 服務是不用信用卡資料,
所以讓我們來看看怎麼在 heroku 上部署 NodeJS 程式。

首先我們本機的開發環境要裝有 NodeJS 與 NPM ,
接著要安裝 heroku 的 client 程式
並在 terminal 下執行

$ heroku login

由於我以前就有裝過 heroku client ,
而且 ssh key  又有更新過,
所以要執行

$ heroku keys:add

另外我們也可以用以下指令

$ heroku update

來升級heroku client 程式

接下來我們就可以在我們自己的目錄上,
編輯我們自己的 Nodejs 程式,
例如這個 hello world 程式

var express = require('express');

var app = express.createServer(express.logger());

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

var port = process.env.PORT || 3000;
app.listen(port, function() {
  console.log("Listening on " + port);
});

由於我們要部署到 heroku 上,
所以要編輯 package.json 這個檔案
這樣 heroku 才知道要在它的環境上裝什麼 nodejs 的 package。
例如: 

{
  "name": "node-example",
  "version": "0.0.1",
  "dependencies": {
    "express": "2.5.9"
  },
  "engines": {
"node": "0.6.x"
}
}

比較需要注意的是,
因為  heroku 可以指定 用哪一版本的 Nodejs 來 跑我們的程式,
方法就是用上面那個 engines 設定,
現上面的 package.json 就是指定用 Nodejs 0.6 最新版來跑。

Procfile 也是需要編輯的設定檔,
它告訴 heroku 該用什麼樣的方式啟動我們的 Nodejs 程式。

web: node web.js

例如上面就是告訴 heroku 要執行 node web.js 這行指令來啟動。
heroku client 內有一個 foreman 的套件,
當我們執行 

$ foreman start

它就會去執行 Procfile 內的設定,
這樣我們也可以先在本機測試看看,
我們的 code 跟設定檔有沒有寫錯。

在一切準備就緒後,
就可以將程式部署到 heroku 上了。

首先要用 git 的指令,
將程式放到 heroku 的 git system 中, 

$ git init 
$ git add .
$ git commit -m "init"

接下來用下面的指令在 heroku 上建立程式環境

$ heroku create --stack cedar

在用下面指令將程式碼 push 到 heroku 中

$ git push heroku master

如果一切順利,
我們的程式就會部署到 heroku 上並啟動。

這陣子柯南試用了 nodester 跟 heroku 兩個環境,
來部署 NodeJS 的程式,
個人覺得 heroku 是比較成熟與穩定的環境,
歡迎有興趣的朋友來試試或分享一下使用的心得。

heroku 的官方說明文件寫得不錯,
想要取得更多或最新的資訊,
也可以連過去看看。

接下來,
柯南還打算寫 heroku 上面使用 mongodb 跟 部署 Yahoo! Mojito Framework 的分享,
敬請期待!

Technorati Tags: Node.js, npm, package.json, Heroku, NodeJS, PaaS, Nodester

arrow
arrow

    賽拉維‧柯南 發表在 痞客邦 留言(1) 人氣()