# 在Heroku部署網站後端/全端專案與MySQL資料庫相關步驟 ###### tags: `Heroku` `部署` `Express.js` `Laravel` `MySQL` - 筆者目前後端只用過Express.js(Node.js)與Laravel(PHP),但其他語言框架大致可參考此處流程,且heroku指令步驟多為跨平台通用 ## Heroku基礎設定 1. [安裝Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli#download-and-install) 2. [(註冊並)登入帳號](https://id.heroku.com/login) - 先在專案根目錄的終端機登入heroku: ```heroku login``` ## 建立應用程式 3. 除了終端機指令,或可從Heroku網站的Dashboard介面建立 ```heroku create <project_name>``` 4. 讓本地專案連結新建的Heroku app,app和專案資料夾名稱相同時可省略: ```heroku git:remote -a {appname}``` - 改變專案連結的Heroku app時也可使用此指令 ## 新增資料庫 - 建立資料庫(相當於遠端版MySQL,也可在Dashboard操作加裝): - 雖然有免費方案,帳號仍需先綁信用卡才能執行此操作! - 新增ClearDB(較知名的方案)到應用程式 ```heroku addons:create cleardb:ignite``` (Heroku app與專案資料夾名稱不同時會無法執行,建議改從Dashboard操作) - 更推薦改用[JawsDB](https://elements.heroku.com/addons/jawsdb),[能避免ClearDB資料id編號非從1開始的連續遞增(auto increment)問題](https://coding-ontheway.coderbridge.io/2022/02/01/cleardb-id-auto-increment-problem/) ```heroku addons:create jawsdb:kitefin``` - 另有相當於開源版MySQL的[MariaDB版JawsDB](https://elements.heroku.com/addons/jawsdb-maria)可選用: ```heroku addons:create jawsdb-maria:kitefin``` - 補充:如果需要使用NoSQL,可以選擇[MongoDB Atlas,可參考這篇的說明與專案範例](https://hackmd.io/@BOBYZH/H14ZfE9O_) ## 推送專案原始碼 - 加上部署所需的修改 - Laravel - [需新增Procfile檔案](https://devcenter.heroku.com/articles/getting-started-with-php#define-a-procfile) ``web: vendor/bin/heroku-php-apache2 public/ > Procfile`` (才能讓Heroku正確執行伺服器,檔名首字需大寫!) - [編輯專案目錄下的 app/Providers/AppServiceProvider.php](https://blog.keniver.com/2017/11/laravel-%E5%B8%B8%E8%A6%8B%E5%95%8F%E9%A1%8C-specified-key-long/) (若如ClearDB對應的MySQL資料庫版本較老舊,需考慮資料長度受限) - Express.js - 沒有特別需求的話,可省略Procfile - 更新 Git 最新進度([7.為部署動作](https://devcenter.heroku.com/articles/getting-started-with-php#deploy-the-app)) 5. ```git add (your files)``` ,或```git add .```(全部暫存) 6. ```git commit -m 'commit'``` 7. ```git push heroku {branch}```(預設branch名稱為"main") - 添加環境變數 - Dashboard - (your app) - Settings - Config Vars - Laravel - 專案有既定格式可參考,以下為必要部分 - [輸入本地專案.env前五對key-value](https://ithelp.ithome.com.tw/articles/10255241) - APP_DEBUG - APP_ENV - APP_KEY - APP_NAME - APP_URL - 加上"DATABASE_URL",讓部署的Laravel專案存取遠端資料庫 - 將CLEARDB_DATABASE_URL/JAWSDB_URL的值(mysql URL)複製貼上 - Express.js - 需依據個別專案搭配的套件差異設置(含資料庫相關部分) ## 啟動Heroku app - (可省略)建立 dynos```heroku ps:scale web=1```(啟動專案) - 初始化 Heroku 遠端專案: - Laravel - 資料庫部分同樣有既定格式與指令: ```heroku run php artisan migrate:fresh --seed``` - passport認證系統部分: ```heroku run php artisan passport:install``` - Express.js - 資料庫部分指令也因套件而異,但通常也包含"migrate"與"seed"的概念 - 執行專案開啟網站```heroku open``` - 或直接從瀏覽器開啟URL - 或用Postman測試API ## 其他操作 - 查看遠端伺服器log(如果有錯誤):```heroku logs --tail``` - 若需要如同在本地環境執行指令,在終端機指令前面加上`heroku run `即可
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up