Heroku雲端部署 === ###### tags: `Laravel` `部署` `Heroku` ### 環境準備 * 註冊Heroku帳號 * Heroku CLI * Git * 已經完成的Laravel專案 ### 建立Heroku專案 #### 1. 登入heroku 開啟cmd輸入以下指令 ``` heroku login ``` 這時會顯示網頁視窗,點擊「Log In」即可登入 ![](https://i.imgur.com/J9ky58N.png) #### 2. 建立Heroku APP 完成登入之後,接下來輸入以下指令來建立Heroku APP ``` heroku create 專案名稱 ``` 建立完成,輸入以下指令,確認剛剛建立的專案是否出現在Heroku裡 ``` heroku list ``` ![](https://i.imgur.com/6OlPgrC.png) △ 出錯:Name is already taken ![](https://i.imgur.com/eyO6bPy.png) △ 原因:表示你取的專案名稱有重複到 △ 解決:可以在專案後加入序號或是日期 ### 建置Laravel專案 #### 1. 下載專案 ``` git clone 專案位址 ``` #### 2. 安裝composer ``` composer install ``` #### 3. 複製.env .example檔案,並且重新命名成.env #### 4. 建立金鑰 ``` php artisan key:generate ``` #### 5. 建立Procfile檔案,指定Heroku啟動位置 ``` echo web: vendor/bin/heroku-php-apache2 public/ > Procfile ``` ![](https://i.imgur.com/12NgtDb.png) ### 指定上傳路徑到剛剛建立的Heroku專案 ``` heroku git:remote -a "Heroku專案名稱" ``` ### 上傳至Heroku伺服器 ``` git init ``` ``` git add . ``` ``` git commit -m "first herohu commit" ``` ``` git push herohu master ``` △ 出錯: ![](https://i.imgur.com/LeOWolt.png) ![](https://i.imgur.com/X4P9FM9.png) △ 原因: △ 解決: ### 設定環境變數&檢視網頁 #### 1. 環境變數 成功把專案push伺服器之後,切換到Heroku APP > setting ![](https://i.imgur.com/uPnzzKx.png) 下拉到Config Vars區域,把.env的環境變數新增到Heroku中 ![](https://i.imgur.com/oxzHODQ.png) ![](https://i.imgur.com/p04pj6b.png) #### 2. 檢視網頁 輸入以下指令,確認網頁是否有出現 ``` heroku open ``` △ 出錯1:403 forbidden △ 原因:客戶端沒有存取該資源的權限 △ 解決:確認Procfile內容是否正確or未push乾淨 △ 出錯2:HTTP 404 △ 原因:找不到網頁 △ 解決:確認網址是否正確 △ 出錯3:HTTP 500 △ 原因:未設定環境變數 △ 解決:閱讀第1個步驟 △ 出錯4:Mixed Content Page(未跑出CSS樣式) ![](https://i.imgur.com/1cTNfhi.png) △ 原因:無法取得http://的內容 △ 解決:URL::asset('...')改為https://專案名稱.herokuapp.com/... ![](https://i.imgur.com/IfJ46w6.png) △參考網址:https://stackoverflow.com/questions/30434786/mixed-content-page-requested-an-insecure-stylesheet-error) △ 出錯5:View[...] not found (500 internal server error) ![](https://i.imgur.com/EnuhHjW.png) △ 原因:伺服器(apache)有區分大小寫,所以找不到相對應的檔案 △ 解決:將wiew的連結更改成正確的檔案名稱 ![](https://i.imgur.com/b4Nt36I.png) ### 資料庫設定 #### 1. 新增Heroku Postgres服務 Heroku APP > Resources > 「Find more add-ons」 ![](https://i.imgur.com/8csZg8s.png) 找到Heroku Postgres ![](https://i.imgur.com/OZTbDjR.png) 點擊「Install Heroku Postgres」 ![](https://i.imgur.com/dHSDiAY.png) 選擇要連接的專案 ![](https://i.imgur.com/rRI15PG.png) 確認專案後,點擊「Submit Order Form」 ![](https://i.imgur.com/EZWorNY.png) 完成後,所出現的畫面 ☆ Config Vars會自動新增DATABASE_URL的值 ![](https://i.imgur.com/uMQglDP.png) #### 2. 設定pgsql 前往config/database.php,於上方加入以下程式碼 ```php= $DATABASE_URL=parse_url('DATABASE_URL'); ``` 大約第68行,修改pgsql設定 ```php= 'pgsql' => [ 'driver' => 'pgsql', 'url' => env('DATABASE_URL'), 'host' => $DATABASE_URL['host'], 'port' => $DATABASE_URL['port'], 'database' => ltrim($DATABASE_URL['path'], '/'), 'username' => $DATABASE_URL['user'], 'password' => $DATABASE_URL['pass'], 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'schema' => 'public', 'sslmode' => 'prefer', ], ``` 接著在大約第20行,修改預設的資料庫 ```php= 'default' => env('DB_CONNECTION', 'pgsql'), ``` 設定完成後,把專案重新push到伺服器 #### 3. 遷移資料表 完成push後,接下來就可以把資料表遷移到資料庫中 ``` heroku run php artisan migrate ``` △出錯1:syntax error at or neat "MODIFY" ![](https://i.imgur.com/KKdnApr.png) △原因:pgsql不支援Modify語法 △解決:更改成 ``` ALTER TABLE 資料表名稱 ALTER COLUMN 欄位名稱 TYPE 資料型態 ``` △參考網址:https://www.appsloveworld.com/postgresql/100/37/error-syntax-error-at-or-near-modify-in-postgres △出錯2: ![](https://i.imgur.com/CWvq98t.png) △原因:pgsql不適合使用char型態做加總 △解決:將欄位的資料型態更改為decimal、integer、float,sum()才能正常運作 △參考網址:https://stackoverflow.com/questions/24650533/sum-values-of-column-with-type-character △出錯3: ![](https://i.imgur.com/wZvmNjX.png) ![](https://i.imgur.com/W9bJSJa.jpg) △原因:在PostgreSQL語法會將大寫字母自動換成小寫,而我要加總欄位是設定成大寫,導致無法抓到正確的欄位名稱 △解決:在欄位使用雙引號,確保欄位名稱為大寫 ``` DB::statement('ALTER TABLE studnet_scoring_peer ALTER COLUMN "EV" TYPE integer USING ("EV"::integer)'); ``` △參考網址 * https://stackoverflow.com/questions/63005845/postgres-and-laravel-how-to-change-column-from-type-string-to-integer?fbclid=IwAR3oLpcGWkZR-LfCL--p_B_Igp1HfSFtzhp1LHM-4uYdrpNKRAj-3lxyoJU * https://www.cnblogs.com/abclife/p/11866037.html * https://blog.51cto.com/u_15257164/2896558 #### 4. Bonus:資料填充 輸入以下code,將預設的資料輸入至資料表 ``` heroku run php artisan db:seed --class=名稱 ``` #### 6. Bonus:清除資料庫 ``` heroku pg:reset DATABASE ``` 清除後,必須再跑一次遷移指令 ### 透過 pgAdmin 操作 Heroku PostgreSQL 資料庫 [pgAdmin下載](https://www.pgadmin.org/download/?source=post_page-----90d9499ed8fb----------------------) #### 取得PostgreSQL資料庫設定 1. 開啟Heroku專案,點選 Resources 頁籤中下方 Add-ons 區域裡的 Heroku Postgres ![](https://i.imgur.com/qy71JAs.png) 2. 點選 Setting 頁籤中的 View Credentials...按鈕,就會顯示有關資料的資訊 ![](https://i.imgur.com/i5uiuaj.png) ![](https://i.imgur.com/XOXs0XL.png) #### 設定pgAdmin 1. 開啟剛剛下載好的pgAdmin,點選左上角 Server 右鍵 > Register ➙ Server... ![](https://i.imgur.com/d2qbbKN.png) 2. 建立與 Heroku PostgreSQL 資料庫的連線設定 * General 頁籤中,於Name欄位輸入一個可識別的名稱 ![](https://i.imgur.com/tQB5hnI.png) * Connection 頁籤中,根據Database Credentials資訊,依序填入相對應的值 ![](https://i.imgur.com/BoNeaBv.png) * SSL 頁籤中,SSL mode 選擇 Allow ![](https://i.imgur.com/rHrw0yb.png) * Advanced 頁籤中,於DB restriction 欄位輸入 Database Credentials 的 Database 資訊 ![](https://i.imgur.com/egr8SMj.png) * 最後點選 Save #### 查看資料表 點選左邊的 Schemas > Tables 即可看到在 Heroku 中所建立的資料表 ![](https://i.imgur.com/9OgezAY.png) #### 操作說明 * 查看表格資料 * 透過tool 進行 ### 參考資料 [Heroku前人筆記] https://juangsalazprabowo.medium.com/how-to-deploy-a-laravel-app-into-heroku-df55efbf8e4e https://www.youtube.com/watch?v=skGZ8laUQco&t=450s https://hackmd.io/@Monastery/rkzYdLQwU https://104.es/2020/10/08/%E6%8A%8Alaravel%E7%B6%B2%E7%AB%99%E9%83%A8%E7%BD%B2%E5%88%B0%E5%85%8D%E8%B2%BB%E7%9A%84heroku%E4%B8%8A/ http://anndo-blog.logdown.com/posts/1927297 [pgAdmin] https://learningsky.io/database-pgadmin-postgresql-heroku/