筆記
如何在Heroku上佈署做好的laravel網站。
Step 1.看清楚官方網站的Documentation!
Step 2. 照著官方網站做
Step 3.完成!!
此篇稍微紀錄一下我在Heroku文件上的認知,其實我也不清楚有沒有誤解文件意義XDD
首先!! 這篇僅供php人士參考,其他Rails or django 適不適用我就不清楚了.
從官網安裝Heroku程式
1.先將專案上傳至Github
1.1 cd Current Directory
1.2 git init -->將當前的專案位置初始化
1.3 專案目錄下,新增procfile, 內容為
web: vendor/bin/ heroku-php-apache2 public/
procfile格式為: <process type> : <command>
1.4 heroku create -->創建app,此時你會需要再heroku註冊你自己的專屬帳號!!
1.5 git push heroku master -->透過git將master的內容推送至heroku
再推送完之後,因為你的heroku帳戶目前沒有聘請任何人幫你工作,所以你要找人來幫你運行你的網頁
Dyno : 在heroku上,負責工作的環境,是一種lightweight linux container,
每個Heroku帳號都可以申請dyno,基於我沒有付費,所以我只使用free版本的dyno
dyno有分成幾種等級
1. free dyno
2. hobby dyno
3. standard dyno
4. performance dyno
dyno 類型
1.web 目前只研究web
2.worker
3.one-off
而其中free dyno如果你的帳號是有驗證過的,free dyno一個月可以給你使用1000個小時
如果你的帳號沒有驗證則只能使用550小時。 且free dyno有個小缺點就是,你不使用你的服務時,他會呈現sleep狀態
有點像是windows的睡眠。
回到正題,在push heroku master之後,使用
Command Line : heroku ps:scale web=1
上述代表我們要在dyno中啟用web的服務!!!!
就像是你在linux上架設apache2 or nginx一樣,一鍵完成
Heroku 有一個好處容易擴充你的硬體需求,你只要花錢升級成standard or performance 都可以使用 heroku ps:scale web = 1 or 2 or 3 or 4
去擴充,且根據官方文件描述 通常一個web 就可以同時處理上千的request了,但是你必須確保你的開發平台是支援concurrent requests的!!!!!
通常dyno之前有許多安全機制,所以不用擔心會不會被其他人所上傳的服務入侵
dyno Manager,Heroku 為了確保上傳的系統都可以正常的運作,通常會檢測服務是否有bug或者陷入瘋狂消耗系統資源的情況下,會restart 你的dyno service,
另外每天固定會restart一次,週期為24Hour + 216分鐘,用於確定服務正常運行,
在要上傳的網頁專案下,我們必須新增一個procfile,因為在雲端上有 heroku-buildpack的工具
在dyno初始化後,dyno會去讀取我們專案根目錄下的procfile,並根據其中的資料作處理
procfile格式為: <process type> : <command>
web: vendor/bin/ heroku-php-apache2 public/
我們在該檔案中放置上述列,描述我們是web 網頁服務,並且執行vendor/bin/heroku-php-apache2 指定我們的根目錄為public資料夾
這也是laravel常常使用的地方,而通常heroku apache的default已經有rewriteEngin on了,所以我們並不太需要特別去設定
如果想要讓自己在本地運行環境測試的話,可以使用
composer require heroku/heroku-webpack-php-apache2 --dev
將heroku 測試的專屬包抓到自己的環境進行測試
安裝完畢可以考慮去/vendor/heroku/.... --help
顯示相關的指令
在經過procfile之後,將他git push heroku master,就會自動讀取內容並且完成佈署了
而且heroku會自動幫你的網頁加上https,SSL的安全驗證憑證
剛好遇到一個BUG是,如果你的laravel Blade有asset('app\app.css')去獲取你的css file的話
你需要使用asset('app\app.css', true),因為這樣會幫你把css <link href="https開頭的連結" >
在https連結之中,是不允許使用http的url的,在chrome內會被中斷連接導致你的css file load不進來,網頁就跑板拉!!!!!
.env file也需要push到laravel,不然有些屬性讀不到,通常.ignore會忽略掉.env的檔案
別忘記把它也push上去了
Heroku相關指令整理
heroku create
git push heroku master
heroku ps:scale web=1
config var 可以設定相關的環境變數
heroku info
git push heroku anotherBranch:master ---> 使用其他branch,來當作heroku節點。
Procfile不能有副檔名(ext)
heroku apps:rename newname -->指定哪個app的名稱,修改為newName
,heroku rename newname --> 將當前所在位置的專案,rename為 newname.