很多 Laravel 新手在第一次做出一個屬於自己的應用後,腦中都會自然而然的冒出一個想法:"我如何將 Laravel 應用部署到線上,讓其它人可以通過訪問一個 URL 線上上檢視我的應用?"。
當你開始使用 Google 進行相關搜尋的時候,你會發現有很多種解決方案擺在你面前。例如可以通過購買 Linode, DigitalOcean 伺服器來部署應用,或者是使用一些如 Engine Yard Cloud 和 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 的部署上線流程異常簡單。你只需要將原始碼納入到 Git 版本控制系統中即可,其它額外操作 Heroku 都會幫你自動處理好。
- Heroku 提供給開發者的免費套餐非常豐富。其中包括最多 5 個應用的免費建立,自定義域名的支援等。實乃良心商家。唯一的不足就是有時候在國內訪問速度會比較慢。
- Heroku 產品服務在業內評價特別高。在 Rails 圈子中許多有經驗的開發者都會使用 Heroku 來部署上線自己的 Demo 應用,其部署流程和速度都受到了 Rails 社群成員的廣大好評。
Heroku 的基本安裝及配置
首先我們先 註冊一個 Heroku 賬號。
註冊完成之後使用 Heroku Toolbelt 來安裝 Heroku 客戶端。
安裝完畢後使用 heroku version
來檢查當前系統是否已安裝好 Heroku 客戶端:
$ heroku version
如果有類似下面的輸出,則代表 Heroku 客戶端已成功安裝:
heroku-toolbelt/3.43.9 (x86_64-darwin10.8.0) ruby/1.9.3
heroku-cli/5.2.39-010a227 (darwin-amd64) go1.6.2
You have no installed plugins.
安裝成功之後,你需要使用以下命令來登入你的 heroku 賬號:
$ heroku login
然後新增 SSH 金鑰:
$ heroku keys:add
至此,Heroku 的基本安裝及配置已完成。下一步我們開始嘗試將應用部署到 Heroku 上。
將專案部署到 Heroku 上
新建一個 Laravel 專案
我們需要新建一個 Demo 專案,然後將此專案部署到線上。
$ composer create-project laravel/laravel --prefer-dist hello_laravel_heroku
$ cd hello_laravel_heroku
初始化 Git 倉庫
$ git init
$ git add .
$ git commit -m "new laravel project"
建立 Procfile
要將應用部署到 Heroku 上,你需要新建一個 Procfile
檔案,這個檔案的作用是通過正確的配置來告訴 Heroku 應用應當使用什麼命令來啟動 Web 伺服器。
將配置寫入 Procfile
檔案並將其納入 Git 版本控制中:
$ echo web: vendor/bin/heroku-php-apache2 public/ > Procfile
$ git add .
$ git commit -m "Procfile for Heroku"
在 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-name
宣告 buildpack
Heroku 對多種語言進行了支援,因此在應用部署的時候它會去自動檢查應用的程式碼是用什麼語言寫的,然後再接著執行一系列針對該語言的操作。Laravel 的應用預設會包含 package.json
檔案,但當 Heroku 檢查到該檔案時,它會認為此應用是用 Node.js 寫的,因此我們需要對應用的 buildpack 進行宣告,告訴 Heroku 我們的應用是用 PHP 寫的。宣告命令如下:
$ heroku buildpacks:set heroku/php
設定 APP key
Laravel 使用 App Key 來完成對使用者會話及其它資訊的編碼加密操作,因此我們也需要將 App Key 加入到 Heroku 的配置中。
生成 App Key:
$ php artisan key:generate
將生成的 App Key 附加到此命令列後面以完成配置:
$ heroku config:set 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
至此,我們便完成了一個 Laravel 應用的部署,十分簡單對吧!這就是為什麼大家都說 Heroku 牛逼的原因!因為這他媽的確實就是牛逼!
參考文件:
本作品採用《CC 協議》,轉載必須註明作者和本文連結