雖然在去年九月的時候,
就嘗試了一次 heroku,
不過因為沒有實際需求加上又忙別的事情,
一直沒有仔細玩玩 heroku,
不過上個月去參加香港 Facebook Mobile Hack 的活動後,
發現原來 heroku 現在竟然可以支援在上面跑 Nodejs ,
於是又開始了柯南的 heroku 使用之路。
說老實話,
heroku 現在竟然支援了上面這樣多的程式語言,
真的是蠻厲害的。
除此之外,
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
留言列表