-
Notifications
You must be signed in to change notification settings - Fork 1
部署 Node js 程式到 heroku 平台
NodeJS 日益強大,相關開發資源也越來越多,許多功能已經不再需要自己寫,通通都可以直接利用官方的 NPM(Node Package Manager)工具,從網路上把別人已經開發好的模組抓回來用。這樣的模組交換平台加快了開發速度,讓開發者可以全心全意專注於當前應用的開發工作。但是也因為如此,讓我們的 Project 總是相依於一大堆的第三方模組,而每當要將我們的程式佈建於伺服器時,就必需手動先將所有的模組先安裝好,甚至是用笨拙的方法邊試邊裝遺漏的模組。事實上,我們可以在程式目錄中,建立 package.json 檔,直接管理 Project 的相依性以及所使用到的模組套件,一旦目錄中存在 package.json,下次要移到新的環境裝起來時,可以直接利用 NPM 把所有的相依模組一次裝好,省下很多功夫:
$ npm install
由於我們要部署到 heroku 上,所以要編輯 package.json 這個檔案,這樣 heroku 才知道要在它的環境上裝什麼 nodejs 的 package。以 student_tutor_API project 為例:
$ npm init
在根目錄下執行此指令來生成 project 的 package.json 並填寫基本的資料欄位
{
"name": "soleil_node_js",
"version": "1.0.0",
"description": "A repository to place our node projects",
"main": "student_tutor_API/server5.js",
...
}
其中,package.json 中的 "dependencies" 欄位用來表示所需安裝的第三方模組,也是本篇探討的重點,可使用以下指令在本機安裝時加上 --save 參數,將所需安裝的模組與版本資訊寫入 package.json 中
npm install <pkg> --save
{
...
"dependencies": {
"body-parser": "^1.13.3",
"express": "^4.13.2",
"http": "0.0.0",
"json": "^9.0.3",
"mongoose": "^4.1.0",
"path": "^0.11.14",
"serve-favicon": "^2.3.0"
}
}
Procfile 也是需要編輯的設定檔,它告訴 heroku 該用什麼樣的方式啟動我們的 Nodejs 程式。
web: node student_tutor_API/server5.js
就等於要 heroku 幫我們用 node 的環境把建立 website 的 .js 檔案跑起來!
請先註冊一個 Heroku 帳號,https://www.heroku.com/ ,由於我們要部署上線的語法是 Node.js 語言,因此也需先確認 Node.js, npm 已安裝至本機電腦裡面。
這個工具將提供 Command Line 的工具以及 git 版控工具,透過這個工具將輔助接下來後續的操作指令,工具請至 https://devcenter.heroku.com/articles/getting-started-with-nodejs#set-up 下載,依作業系統選擇不同的版本安裝。
- 切換到欲上傳的程式資料夾下
$ cd soleil_node_js
- 進行 heroku 登入驗證,下完指令後會要求填入 email 帳號密碼
$ heroku login
- 在 heroku 上建立程式環境
$ heroku create
- 重新命名專案
$ heroku apps : rename soleil-db-api
重新命名完成後可以看到訊息提到,已經將 heroku 原本自動分配到的 app 名稱 morning-garden-5782 改為我們要命名的 soleil-db-api,馬上轉到 heroku 上的 dashboard ,立即就看到上面顯示我們的 soleil-db-api 專案,但這時候程式還並沒有部署到 heroku ,目前已經建立遠端的檔案庫在上面。
- 部署程式
$ git push heroku master
- 啟動 heroku 運行資源:儘管我們經過上述步驟,已經成功把寫好的 node js 程式 deploy 到 heroku 上了,但如果沒有請 heroku 開任何一台機器給我們,或更精確一點的說,開任何一點網路主機資源給我們的話,就仍然不能跑部署上去的程式,所以最後一步,就是要叫 heroku 開資源給我們剛剛 deploy 上去的程式運行。
$ heroku ps:scale web=1
切換到 dashboard 的 activity標籤,就可以看到剛剛部署過程的成功紀錄囉!
- 把更動的程式碼加進 local git repository
$ git add .
- commit
$ git commit -m "code modified"
- push 變更的程式碼到 heroku
$ git push heroku master
- 查看 heroku 運行的 log 紀錄來除錯
$ heroku logs --tail
- Heroku docs https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction
- 產生 package.json http://stackoverflow.com/questions/9961502/is-there-a-way-to-automatically-build-the-package-json-file-for-node-js-projects
- 部署過程解析 [1] http://ithelp.ithome.com.tw/question/10161556 [2] http://hiiamyes.logdown.com/posts/206488-write-your-site-by-yourself-based-website-to-deploy-on-heroku-nodejs [3] http://cire.pixnet.net/blog/post/37369672-%5Bnodejs%5D-%E5%B0%87%E7%A8%8B%E5%BC%8F%E9%83%A8%E7%BD%B2%E5%88%B0-heroku-%E4%B8%8A---nodejs-on--heroku