2012年9月2日 星期日

Hosting Service - Node.js

寫 Web 的服務,筆者是覺得總會經過利用別人的 Hosting Service 這個過程。Web Service 最麻煩的就是管理和擴增服務,有許多流量和後台的程式要處理,對Node.js 來說其標榜就是可以很簡單地分散式處理,而管理的部分交由第三方的平台來管理對中小型服務來說是一個非常好的起點。
今天要介紹一個不錯的,Node.js Hosting 的服務,名為 Nodejitsu。這個 Repository 好用的地方是設定簡單,支援的 Module 也不少,對於 iOS Developer 來說,最重要的 Server 服務之一就是 APNS 了,筆者測試過,是可以成功執行沒有擋掉 APNS 需要的 Port。
好那我們就登入 Nodejitsu 的首面看到下面的頁面,Try Nodejitsu for free.
接下來會有幾個步驟需要填寫,如下,填寫 useranme 只允許字母數字和-

寫 e-mail address
填寫你想要建立的 Node.j 服務的類型和任何其他在使用的技術,也可以不寫。
好了之後應該會在 mail 收到 Nodejitsu 寄來的信,類似下方。
信用還提到第一次啟用帳號要做的事情如下

在終端機執行下列指令,
  1. sudo npm install jitsu -g
  2. jitsu users confirm <帳號> <認證碼>
這樣就可以了,實際情況如下,步驟 2,執行後會問一些問題,第一個是設定密碼
設定完之後,再輸入一次,就啟用完成,如下
接下我們就要放一個簡單的 web server 到 Nodejitsu 上面去。
先用 mkdir ( make directory ) 在任一目錄下建立一個新的目錄如下
mkdir myJitsu
 然後進入用 cd myJitsu 如下
我們新增 Node.js 學習資源這篇提到的 hello.js ,到這個資料夾下,也取名為 hello.js
var http = require('http');
 
http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8000);
然後執行佈署的指令,如下
jitsu deploy
接著會看到 jitsu 和 Server 溝通,會再問一些問題,第一個是 App Name: 在其後有一個 (myJitsu) 的意思是,如果不寫,就用這個名字,我們來改一下,用 MyJitsu
再來是 subdomain 的名稱,這個不改也 ok
接下來比較重要,是一開始要執行的 script,也就是 hello.js,如下設定

再來設定版本,我們設定為 0.0.1,如下
 最後是需要的 Node.js 版本,這個例子為 0.8.x
完成後,會提醒我們做確認的動作,並把剛剛的設定都寫入一個 package.json 的檔案中,
寫 yes 之後,就會看到這樣的裝態,就是完成了

上圖用白色框起來的部分,就是這個服務的網址,試著在Browser 的網址中輸入
http://incensome.myjitsu.jit.su/
就會看到如下
 然後我們回到 http://nodejitsu.com/ 來看一下剛剛佈署到 Nodejitsu 的服務,如下,按右上的 Login。
輸入帳號密碼之後,就會看到如下
一個上線的服務完成了,重點是右邊視窗有一個 Log 的 Tab,點選後如下
這裡可以看到在程式中 console.log 的結果,雖然目前我們並沒有用到 console.log。
接下來我們要來看一下這個檔案 package.json
{
  "name": "MyJitsu",
  "subdomain": "incensome.myJitsu",
  "scripts": {
    "start": "hello.js"
  },
  "version": "0.0.1",
  "engines": {
    "node": "0.8.x"
  }
}
這個檔案描述這個 Node.js 服務的設定,這個例子只用到 http 的 module,如果用到其他的,不是包在 Node.js 核心的東西,比如這篇提到的 Express,就會看到如下的 package.json
{
  "name": "TeachRepo",
  "subdomain": "incensome.teachrepo",
  "scripts": {
    "start": "web.js"
  },
  "version": "0.0.1-3",
  "engines": {
    "node": "0.8.x"
  },
  "dependencies": {
    "express": "*"
  }
}
jitsu 會自行去看 *.js 檔然後把 dependencies 加到 package.json 上,在上面的例子是寫,
"dependencies": {
    "express": "*"
  }
代表會用到 express 而不拘版本,(其實,3.0 和 2.0 有差別,有注意一下)。
那如果 hello.js 有更新怎麼辦?在同一個目錄下,用 jitsu deploy 就可以了,jitsu 會自動把版號加上-1,比如原本是 0.0.1 會變成 0.0.1-1。

最後我們來討論一下,Nodejitsu 這個服務,付費的時候怎麼計算?
從這個網頁我們可以看到,個人,或是小型公司來說 一個 drone 一個月只要 $3 美金,是相當便宜。如下是Individual Plan
那什麼是 Drone 呢?在這 FAQ 有提到,就是指處理 App 的能力,當然它有提到通常一個 App 就只會需要一個 drone,同理可推是一個 App。同時平行處理的話也許會需要比較多 drone, 不過 Node.js 本身就是 None-blocking,比較不需要自行再產生 Thread 之類的,但真正計算的方法,也只能靠經驗法則了。
那試用版的可以用多久呢? FAQ 有提到,現在是 3 個月,過期怎麼辦?再申請一個 e-mail 就好了 orz..
好,那咱們就下次見。

沒有留言:

張貼留言