IBM Bluemix

Node.js 雲端部署 (1)

基本介紹

教學目標

透過 IBM Bluemix 進行 Node.js 應用程式的雲端部署。

前置作業

  1. 申請 IBM Bluemix 雲端服務帳號 。
  2. 完成 cf 套件安裝與設置。

使用教學

下載專案

  1. 開啟 Bluemix 控制台
  2. 按下「Create An App」,建立 Node.js 的 App 。
    (註: 此時可以選擇 Boilerplates 或 Runtimes 類型中的項目。)
  3. 按下「View Quick Start」項目,按下「Download the starter application package.」,即可開始下載專案。

專案架構

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
├── app.js
├── instructions.md
├── manifest.yml
├── package.json
├── README.txt
├── views
| ├── body.jade
| ├── head.jade
| └── index.jade
└── public
└── image
├── newapp-icon.png
└── style.css

  • 透過 package.json 檔案可以了解初始專案主要採用 Node.js 、 Express 和 Jade 等相關套件的版本。
  • 透過 manifest.yml 檔案可以了解自動化雲端部署可以彈性設定實體機器數、儲存空間、記憶體和執行指令等項目。

測試服務

建立專案資料夾

1
2
$ mkdir app
$ cd app

安裝 Node.js 相關套件。

1
$ npm install

此時可以修改部份程式碼,再啟動伺服器。

1
$ node app.js

開啟瀏覽器,在網址列輸入 http://127.0.0.1:3000 進行測試。

登入服務

連線且登入至 Bluxmix 服務。

1
2
3
$ cf api http://api.eu-gb.bluemix.net
$ cf login -u [Bluemix 帳號]
$ cf target -o [Bluemix 帳號] -s dev

部署服務

部署本機 Node.js 程式碼專案至 Bluxmix 服務。

1
$ cf push [App 名稱]

完成以上步驟之後,即可開始存取 Node.js 雲端服務。
(例如: http://app.eu-gb.mybluemix.net/)

相關資源

雲端服務 Push Notification (1)

基本介紹

教學目標

了解各家雲端公司所提供推播服務的功能與費率,以及自建推播通知的服務需要處理的項目。

重點概念

免費方案

雲端公司 Facebook IBM Microsoft Amazon
推播服務 Parse Push Push for Bluemix Azure Notification Hubs Simple Notification Service
每月推播則數 100 萬 100 萬 100 萬 100 萬
每次推播則數 N/A N/A 10 萬 N/A

管理功能

雲端公司 Facebook IBM Microsoft Amazon
推播服務 Parse Push Push for Bluemix Azure Notification Hubs Simple Notification Service
群組功能 有 ( 頻道 ) 有 ( 標籤 ) 有 ( 標籤 ) 有 ( 主題 )
進階條件 N/A N/A N/A
排程推播管理 N/A 有 ( $200 / 月 ) N/A
註冊查詢 N/A 有 ( $200 / 月 )
A/B 測試 N/A N/A 有 ( A/B 測試服務 )

超額付費

雲端公司 Facebook IBM Microsoft Amazon
推播服務 Parse Push Push for Bluemix Azure Notification Hubs Simple Notification Service
萬則推播計價 $0.5 $0.2 $0.01 $0.005

(註: 以上相關資料截至 2014 年 10 月。)

自建服務

自建推播通知的服務需要處理的項目。

  1. 儲存裝置推播識別碼的服務。
  2. 排程推播條件篩選管理的服務。
  3. 提供推播訊息至對應推播伺服器的服務。
    (註: 篩選目標裝置進行即時推播將會是效能處理最主要的瓶頸。)

至於推播服務架構規劃可以參考 「Orchestrating iOS Push Notifications on Google Cloud Platform」 文章。

相關資源

Node.js 雲端服務 - IBM (2)

基本介紹

教學目標

透過 Node.js 分析文章所使用的語言,並且產生分析 API ( IBM Watson 雲端服務)。

前置作業

  1. 申請 IBM Bluemix 雲端服務帳號。
  2. 建立 App ,接著建立 Service ,選擇 Language Identification 雲端服務 ,並且進行綁定。
  3. 完成 Node.js 套件安裝與設置。

產生金鑰

  1. 開啟 App,接著選擇 Language Identification 雲端服務。
  2. 按下「Show Credentials」,取得憑證資訊。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    {
    "language_identification": {
    "name": "Language Identification-c8",
    "label": "language_identification",
    "plan": "language_identification_free_plan",
    "credentials": {
    "url": "https://gateway.watsonplatform.net/laser/service/api/v1/txtlid/b9875ec1-edef-4c41-8e9e-e062c95e6ea7",
    "sids": [
    {
    "sid": "lid-generic",
    "description": "language identification of any text"
    }

    ],

    "username": "aa0b561a-a70f-4b0a-a535-5d704156c657",
    "password": "XXXXXXXX"
    }

    }

    }

使用教學

建立專案

下載範例程式碼 lid-nodejs-sample.zip ,並且解壓縮。

1
2
$ cd lid-nodejs.git
$ npm install

修改憑證

開啟 API 伺服器程式碼檔案。

1
2
$ cd lid-nodejs.git
$ vi app.js

編輯憑證參數,分別為 service_url 、 service_username 和 service_password 。

1
2
3
4
5
...
var service_url = 'https://gateway.watsonplatform.net/laser/service/api/v1/txtlid/b9875ec1-edef-4c41-8e9e-e062c95e6ea7';
var service_username = 'aa0b561a-a70f-4b0a-a535-5d704156c657';
var service_password = 'XXXXXXXXXX';
...

啟動專案

1
$ node app.js

在瀏覽器網址列輸入 http://localhost:3000 ,就能透過本機網站分析文章所使用的語言。(線上展示)

產生分析 API

開啟 API 伺服器程式碼檔案。

1
2
$ cd lid-nodejs.git
$ vi app.js

接著將 app.use(express.urlencoded()); 改成 app.use(express.bodyParser()); 。

1
app.use(express.bodyParser());

新增分析 API 的程式碼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
app.post('/api/v1/lid_analyze', function(req, res){
var request_data = {
'txt': req.body.content,
'sid': 'lid-generic',
'rt':'json'
};
var parts = url.parse(service_url);
var options = { host: parts.hostname,
port: parts.port,
path: parts.pathname,
method: 'POST',
headers: {
'Content-Type' :'application/x-www-form-urlencoded',
'X-synctimeout' : '30',
'Authorization' : auth }
};
var watson_req = https.request(options, function(result) {
result.setEncoding('utf-8');
var responseString = '';
result.on("data", function(chunk) {
responseString += chunk;
});
result.on('end', function() {
var result = JSON.parse(responseString);
res.json({language: result.lang);
});
});
watson_req.on('error', function(e) {
return res.render('index', {'error':e.message})
});
watson_req.write(querystring.stringify(request_data));
watson_req.end();
});

接著透過 HTTP POST 方式存取 API 。

1
2
3
4
5
POST http://localhost:3000/api/v1/lid_analyze
Content-Type: application/json
{
"content":"Call me Ishmael. Some years ago-never mind how long precisely-having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. It is a way I have of driving off the spleen and regulating the circulation. Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping into the street, and methodically knocking people's hats off-then, I account it high time to get to sea as soon as I can. This is my substitute for pistol and ball. With a philosophical flourish Cato throws himself upon his sword; I quietly take to the ship. There is nothing surprising in this. If they but knew it, almost all men in their degree, some time or other, cherish very nearly the same feelings towards the ocean with me."
}

最後就能透過 API 分析文章所使用的語言 (JSON 格式)。

1
2
3
4
{
"status": "OK",
"language": "en-US"
}

IBM Bluemix - Watson & Big Data Service Sample

相關資源

Node.js 雲端服務 IBM (1)

基本介紹

教學目標

透過 Node.js 分析文章所代表的使用者輪廓,並且產生分析 API ( IBM Watson 雲端服務)。

前置作業

  1. 申請 IBM Bluemix 雲端服務帳號。
  2. 建立 App ,接著建立 Service ,選擇 User Modeling 雲端服務 ,並且進行綁定。
  3. 完成 Node.js 套件安裝與設置。

產生金鑰

  1. 開啟 App,接著選擇 User Modeling 雲端服務。
  2. 按下「Show Credentials」,取得憑證資訊。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
    "user_modeling": {
    "name": "User Modeling-0w",
    "label": "user_modeling",
    "plan": "user_modeling_free_plan",
    "credentials": {
    "url": "https://gateway.watsonplatform.net/systemu/service/",
    "username": "b505860e-780c-4b03-971d-ce4d34075757",
    "password": "XXXXXXXXXX"
    }

    }

使用教學

建立專案

下載範例程式碼 um-nodejs-sample.zip ,並且解壓縮。

1
2
$ cd um-nodejs.git
$ npm install

修改憑證

開啟 API 伺服器程式碼檔案。

1
2
$ cd um-nodejs.git
$ vi app.js

編輯憑證參數,分別為 service_url 、 service_username 和 service_password 。

1
2
3
4
5
...
var service_url = 'https://gateway.watsonplatform.net/systemu/service/';
var service_username = 'b505860e-780c-4b03-971d-ce4d34075757';
var service_password = 'XXXXXXXXXX';
...

啟動專案

1
$ node app.js

在瀏覽器網址列輸入 http://localhost:3000 ,就能透過本機網站分析文章所代表的使用者輪廓,同時產生視覺化圖表。(線上展示)

產生分析 API

開啟 API 伺服器程式碼檔案。

1
2
$ cd um-nodejs.git
$ vi app.js

接著將 app.use(express.urlencoded()); 改成 app.use(express.bodyParser()); 。

1
app.use(express.bodyParser());

新增分析 API 的程式碼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
app.post('/api/v1/um_analyze', function(req, res){
var parts = url.parse(service_url.replace(/\/$/,''));
var profile_options = { host: parts.hostname,
port: parts.port,
path: parts.pathname + "/api/v2/profile",
method: 'POST',
headers: {
'Content-Type' :'application/json',
'Authorization' : auth }
};
create_profile_request(profile_options,req.body.content)(function(err,profile_string) {
if (err) {
console.log(err)
} else {
var profile_json = JSON.parse(profile_string);
res.json(profile_json.tree);
}
});
});

接著透過 HTTP POST 方式存取 API 。

1
2
3
4
5
POST http://localhost:3000/api/v1/um_analyze
Content-Type: application/json
{
"content":"Call me Ishmael. Some years ago-never mind how long precisely-having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. It is a way I have of driving off the spleen and regulating the circulation. Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping into the street, and methodically knocking people's hats off-then, I account it high time to get to sea as soon as I can. This is my substitute for pistol and ball. With a philosophical flourish Cato throws himself upon his sword; I quietly take to the ship. There is nothing surprising in this. If they but knew it, almost all men in their degree, some time or other, cherish very nearly the same feelings towards the ocean with me."
}

最後就能透過 API 分析文章所代表的使用者輪廓的資訊 (JSON 格式)。

IBM Bluemix - Watson & Big Data Service Sample

相關資源