--- tags: backend, deploy --- # Heroku 部署 SOP 步驟僅供參考,因為我其實沒有照著這步驟跑過 QQ,都是事後才整理的,不過要做的事情大概就這些,基本上應該不會錯? 1. 註冊 Heroku 帳號,並且填好信用卡資訊:[傳送門](https://signup.heroku.com/) 2. 建立一個新的資料夾,把寫好的作業複製一份到裡面,然後新建 .gitignore,與 package.json ![](https://i.imgur.com/M3DhwmE.jpg) .gitignore: ``` /node_modules npm-debug.log .DS_Store /*.env ``` package.json,我直接搬 mtr04 的 package.json 會出錯,所以重新寫一份: ```json= { "name": "herukodraw-example", "version": "1.0.0", "description": "This example is so cool.", "main": "index.js", "scripts": { // 要執行 db:migrate 才會建起資料庫 "db:migrate": "npx sequelize-cli db:migrate", // push 上 Heroku 時會執行 npm run start, // 所以要寫好這個指令, 建立 DB 與 執行 index.js "start": "npm run db:migrate && node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "example", "heroku" ], "author": "jane-doe", "license": "MIT", "dependencies": { // 確認好自己用了哪些模組 "bcrypt": "^5.0.0", "body-parser": "^1.19.0", "connect-flash": "^0.1.1", "ejs": "^3.1.5", "express": "^4.17.1", "express-session": "^1.17.1", "jquery": "^3.5.1", "mysql": "^2.18.1", "mysql2": "^2.2.5", "sequelize": "^6.3.5", "sequelize-cli": "^6.2.0" }, "devDependencies": { "sequelize-cli": "^6.2.0" }, // 寫給 Heroku 的伺服器看, 他才知道要用什麼執行環境 "engines": { "node": "10.x" } } ``` 3.改寫 index.js 的 PORT ```javascript= const express = require('express'); const bodyParser = require('body-parser'); const session = require('express-session'); const flash = require('connect-flash'); const prizeController = require('./controllers/prizeController') const adminController = require('./controllers/adminController') const app = express(); // 要設定 port 讀取環境變數 const port = process.env.PORT || 3000; // 以下省略 ``` 4. 進入 Heroku 官網建立 APP,取好名字就按 Create app:[傳送門](https://dashboard.heroku.com/new-app) ![](https://i.imgur.com/Op9ZcSh.jpg) 5. 進入 app 管理頁面,點 Resources 標籤,搜尋 ClearDB,按 Submit Order Form(需要填好信用卡付款資訊,不然不給用) ![](https://i.imgur.com/Z8Gt2ff.jpg) 6. 安裝好 Heroku CLI,需要重開機:[傳送門](https://devcenter.heroku.com/articles/heroku-cli) 7. 開啟 Terminal 輸入 heroku login ![](https://i.imgur.com/y2BzIh4.jpg) 11. 輸入 heroku create,這邊會順便設定好 Heroku 遠端 git 8. 輸入 heroku addons:create cleardb:ignite 建立起資料庫 ![](https://i.imgur.com/DeC2Kag.jpg) 3. 改寫 config.json,這裡要在 production 加一個 use_env_variable,他的值會對應到你的資料庫,像我不小心建了兩個資料庫,所以會是 CLEARDB_RED_URL: ```json= { "development": { "username": "root", "password": null, "database": "pool", "host": "localhost", "dialect": "mysql" }, "test": { "username": "root", "password": null, "database": "database_test", "host": "127.0.0.1", "dialect": "mysql" }, "production": { "username": "root", "password": null, "database": "database_production", "host": "127.0.0.1", "dialect": "mysql", "use_env_variable": "CLEARDB_RED_URL" } } ``` 我有兩個資料庫 Heroku 管理頁面的 Setting 可以看到 ![](https://i.imgur.com/UTcAb7h.jpg) 10. 在本機完成 commit 12. 輸入 git push heroku master,將檔案送到 Heroku,成功的話就可以看到網址 ![](https://i.imgur.com/JDo0B2D.jpg) ## Debug 可以在 Terminal 輸入 heroku logs --tail 來看出了什麼錯 例如,沒改好 PORT,出現錯誤的 PORT 訊息: ![](https://i.imgur.com/8C5RUie.jpg) ## 參考資料 [Deploying Node.js Apps on Heroku](https://devcenter.heroku.com/articles/deploying-nodejs) [ClearDB MySQL](https://devcenter.heroku.com/articles/cleardb) [BE201 部署:Heroku](https://lidemy.com/courses/390625/lectures/24510403)