佈署 Node.js Application 至 Elastic Beanstalk 上 – 以 Express 4.x 為例
主要有以下幾個步驟:
- 透過 express-generator 創建 express app
- 創建一個 Git repository
- 取得 access key id 與 secret access key (若已有可跳過)
- 設定與安裝 eb command line tool
- 利用 eb command line tool 初始化並創建 application 運行環境
- 設定 App 的 package.json
- 上傳並佈署 App
透過 express-generator 創建 express app
測試是否能正常執行
創建一個 Git repository
將剛創立的 express app 初始化成 git repository
取得 access key id 與 secret access key (若已有可跳過)
- 先至 Security Credentials頁面
- 點選 Dashboard 裡點選
Users
選項,並選擇自己的User Name
- 接著在 Security Credentials 區域裡選擇
Manage Access Keys
- 最後點選
Create Access Key
,並且將.csv
檔案載下來,妥善保管 - access key id 與 secret access key 皆在剛下載的
.csv
檔案裡頭
安裝與設定 eb command line tool
EB command line tool is a command line client for interacting with the AWS Elastic Beanstalk APIs.
Important :
The command line tools used in this guide require Ruby version 1.8.7+ or Ruby version 1.9.2+ to run. To view and download Ruby clients for a range of platforms, including Linux/UNIX and Windows, go to http://www.ruby- lang.org/en/.
- 下載eb command line tool
- 將下載下來的壓縮檔解開後,移到自己喜歡的位置,並且設定 PATH 使其可方便執行
- 若想要將此設定永久保留,則將上述的 export 指令寫入
~/.bash_profile
裡頭(Linux 的話為~/.bashrc
)
- 測試
eb
指令是否設置成功
利用 eb command line tool 初始化並創建 application 運行環境
- 回到我們一開始創建的 Git repository 底下
- 初始化 Elastic Beanstalk 設定
- 透過
eb start
初始化並創建範例App
- 接著便能透過 AWS 給你的網址看到輸出的範例 App
設定 App 的 package.json
AWS Elastic Beanstalk 透過讀取 package.json
的設定決定如何運行 Node.js App。
查看剛剛所創建的 myapp
的檔案結構:
查看 myapp 下的 package.json
:
可以發現產生器所產生的 express app 是透過 node ./bin/www
去執行的,而AWS Elastic Beanstalk 也是依據 scripts
下的 start
參數去執行的。
Important :
AWS Elastic Beanstalk 在執行 node.js app時,會預設去執行
node app.js
,而產生器產生的主要 express server 的檔案也恰好取名為app.js
,若直接將此設定上傳至主機,會導致執行時,什麼事情都沒發生,而產生了502 Bad Gateway
的 error 。因此需將app.js
重新命名成app.js
與server.js
(沒錯,server.js 也不行。)以外的名稱,例如main.js
。並將/bin
底下的www
從var app = require('../app');
改成var app = require('../main');
。
完整程式碼如下:
另外就是 process.env.PORT
這個參數可以指向真正佈署的主機對應 80
Port 的實際 Port。若想要使用其他 Port,則要在 AWS 中另外開啟才行。
上傳並佈署 App
Elastic Beanstalk 有兩種上傳方式:
- 使用 eb command line tool 上傳
- 使用 web interface 上傳
使用 eb command line tool 上傳
- 回到
myapp
資料夾底下
- 若有修改,先將修改後的結果 commit
- 將 App 上傳,並且佈署
- 等待佈署完成,並且再次查看 App 是否有成功佈署
Important :
git aws.push
時如果有報ImportError: No module named boto
的錯誤,請先執行以下的指令安裝boto
:
若不存在 pip
指令,則需透過以下方式安裝 pip
:
- 先下載這個檔案: get-pip.py, 備用連結
- 然後到下載位置安裝
get-pip.py
使用 web interface 上傳
- 先到 AWS Elastic Beanstalk console
- 將要上傳的 App 壓縮成
.zip
檔
Important : 壓縮時,不可以直接對整個資料夾進行壓縮,而是要點開資料夾,進行全選壓縮。否則會造成 AWS Elastic Beanstalk 因找不到
package.json
而產生的502 Bad Gateway
的錯誤。 - 點擊
Upload and Deploy
按鈕,並選擇上傳壓縮檔,再按下Deploy
按鈕後,即可等待佈署完成。
- 查看 App 是否有成功佈署