整理課程中將程式碼部署上線(Heroku)的內容

泰迪熊斯基 發表於 2020-08-01

部署

我們可以通過購買 Linode、DigitalOcean、UCloud、阿里雲伺服器來部署應用,或者是使用一些如 Engine Yard CloudHeroku 這樣的雲部署服務來快速完成應用的部署上線。

由於 Heroku 的部署上線流程異常簡單,對新手友好。因此在本書教程當中,我們將使用 Heroku 來部署 Laravel 應用。

什麼是 Heroku?

Heroku 是一個支援多種程式語言的 PaaS (Platform-as-a-Service)。在 2010 年被 Salesforce 收購。Heroku 作為最開始的雲平臺之一,從 2007 年 6 月起開始開發,當時它僅支援 Ruby,後來增加了對 Java、Node.js、Scala、Clojure、Python 以及 PHP 和 Perl 的支援。由於其應用部署流程異常簡單,因此倍受廣大開發者歡迎。

Heroku 的基本安裝配置

首先我們需要先 註冊一個 Heroku 賬號

本教程提供的 Homestead 安裝包已預設為你安裝好了 heroku 命令列工具集,因此我們不必再進行重複安裝。如果你使用的不是本教程提供的 Homestead 安裝包,則可通過 Heroku 官方提供的 安裝教程 進行安裝。

安裝完成之後我們可以使用以下命令來登入你的 Heroku 賬號:

$ heroku login -i

然後使用註冊使用的郵箱和密碼登陸你的賬號:
整理課程中將程式碼部署上線(Heroku)的內容
新增 SSH Key 到 Heroku 上:

$ heroku keys:add

如何在 Heroku 上建立一個新應用?

我們可以使用 heroku create 命令在 Heroku 上建立一個新應用:

$ heroku create
Creating mighty-hamlet-1982... done, stack is cedar-14
http://mighty-hamlet-1982.herokuapp.com/ | [email protected].com:mighty-hamlet-1982.git
Git remote heroku added

mighty-hamlet-1982 是 Heroku 隨機為應用生成的預設名稱,每個人生成的名稱都不相同。而 http://mighty-hamlet-1982.herokuapp.com/ 則是應用的線上地址。

如果你對生成的預設名稱不滿意,你可以使用 heroku rename 來對應用名稱進行更改,但要保證更改的名稱未被其它人佔用。如:

$ heroku rename your-app-nameCopy

配置 Procfile 檔案:(進入專案根目錄, 這裡是Laravel)

要將應用部署到 Heroku 上,我們還需要在 Laravel 專案下新建一個 Procfile 檔案,通過配置該檔案來告訴 Heroku 應當使用什麼命令來啟動 Web 伺服器。接著還需要將該檔案納入到 Git 版本控制中

$ cd ~/Code/Laravel
$ echo web: vendor/bin/heroku-php-apache2 public/ > Procfile
$ git add -A
$ git commit -m "Procfile for Heroku"

這一步同時告訴Heroku index.php檔案在public資料夾下

宣告 buildpack

Heroku 平臺支援多種語言,在進行應用部署時,Heroku 會自動檢查應用的程式碼是用什麼語言寫的,然後再接著執行一系列針對該語言的操作來準備好程式執行環境。Laravel 應用預設會包含 package.json 檔案,但當 Heroku 檢查到該檔案時,它會認為此應用是用 Node.js 寫的,因此我們需要對應用的 buildpack 進行宣告,告訴 Heroku 說我們的應用是用 PHP 寫的。宣告命令如下:

$ heroku buildpacks:set heroku/php

設定 APP key

Laravel 使用 App Key 來完成對使用者會話及其它資訊的編碼加密操作,因此我們也需要將 App Key 一同加入到 Heroku 的配置中。
首先,使用 Laravel 自帶的 artisan 命令來生成 App Key:

$ php artisan key:generate --show

將生成的 App Key 替換掉下面命令的 <your_app_key> ,並執行該命令列來完成配置:

$ heroku config:set APP_KEY=<your_app_key>

整理課程中將程式碼部署上線(Heroku)的內容

部署上線

我們要做的最後一步就是將程式碼推送和部署到 Heroku 上:

$ git push heroku master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 379 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Fetching custom git buildpack... done
remote: -----> PHP app detected
remote: -----> Resolved 'composer.lock' requirement for PHP to version 5.6.14.
remote: -----> Installing system packages...
remote:        - PHP 5.6.14
remote:        - Apache 2.4.10
remote:        - Nginx 1.6.0
remote: -----> Installing PHP extensions...
remote:        - mbstring (composer.lock; bundled)
remote:        - zend-opcache (automatic; bundled)
remote: -----> Installing dependencies...
remote:        Composer version 1.0.0-alpha10 2015-04-14 21:18:51
remote:        Loading composer repositories with package information
remote:        Installing dependencies from lock file
...
remote:          - Installing laravel/framework (v5.1.19)
remote:            Downloading: 100%
remote:
remote:        Generating optimized autoload files
remote:        Generating optimized class loader
remote:        Compiling common classes
remote: -----> Preparing runtime environment...
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing... done, 74.5MB
remote: -----> Launching... done, v5
remote:        https://mighty-hamlet-1982.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/mighty-hamlet-1982.git
   1eb2be6..1b70999  master -> master

程式碼推送成功之後,可以使用此命令來快速開啟線上應用:

$ heroku open

如果無法在瀏覽器開啟,可根據命令列輸出提示中給出的連結直接訪問:

▸    Error opening web browser.
▸    Error: Exited with code 3
▸
▸    Manually visit https://mighty-hamlet-1982.herokuapp.com/ in your
▸    browser.

至此,我們便完成了一個 Laravel 應用的部署。
整理課程中將程式碼部署上線(Heroku)的內容

本作品採用《CC 協議》,轉載必須註明作者和本文連結