部署
我們可以通過購買 Linode、DigitalOcean、UCloud、阿里雲伺服器來部署應用,或者是使用一些如 Engine Yard Cloud 和 Heroku 這樣的雲部署服務來快速完成應用的部署上線。
由於 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
然後使用註冊使用的郵箱和密碼登陸你的賬號:
新增 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/ | git@heroku.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 上:
$ 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 應用的部署。
本作品採用《CC 協議》,轉載必須註明作者和本文連結