如何在 Azure 使用 Laravel + MySQL ?
Azure 除了可以跑 PHP 與 Laravel 外,更可以跑我們喜愛的 MySQL 資料庫。本文將實際在 Azure 建立 MySQL 資料庫,透過 .env 的設定,讓 Laravel 可以連上 MySQL,並透過 PhpStorm 直接管理 Azure 雲端的 MySQL 資料庫。
Motivation
在 如何使用 PhpStorm 部署 Laravel 到 Azure 一文中,我們已經可以順利在 Azure 跑 PHP 7.0 與 Laravel,唯一就是 MySQL 還沒連上,本文將以前一篇為基礎,繼續設定 MySQL 部分。
Version
PHP 7.0.8
Laravel 5.2.41
PhpStorm 2016.2
建立 Laravel 專案
請參考 如何使用 PhpStorm 部署 Laravel 到 Azure,將本機的 Laravel 專案部署到 Azure。
在 Azure 建立 MySQL 資料庫
登入 Azure portal,在 Azure 建立 MySQL 資料庫。

New -> Data + Analytics,選擇 See all。

在 Data services 下選擇 More。

選擇 ClearDB 的 MySQL Database。

按 Create 建立 MySQL 資料庫。

- Database Name : 輸入資料庫名稱。
- Resource group : 可以新建 group,也可以使用目前既有 group,使用 group 的優點是方便管理,若要刪除可以整個 group 一起刪除。
- Location : 選擇離我們最近的
East Asia。

- Pricing Tier : 選擇免費的
Mercury。

- Legal Terms : 確認是
0.00 TWD/month,按Purchase。

建議將 Pin to dashboard 打勾,方便我們管理。
按 Create 開始建立 MySQL 資料庫。

MySQL 資料庫建立完成,會顯示 Healthy。
設定本機 .env
MySQL 資料庫建立完成後,馬上來測試資料庫是否建立成功。

Settings -> General -> Properties

注意其 HOSTNAME、PORT、USERNAME、PASSWORD 與 CONNECTION STRING 欄位。
其中 CONNECTION STRING 的 Database,即為我們剛剛建立的資料庫。

將本機 .env 的設定與 Azure 的設定一致。

執行 php artisan migrate,若能成功執行 migration,表示 MySQL 資料庫已經順利建立成功。

執行 seeding,將預設資料寫入 Azure 的 MySQL 資料庫。
設定 PhpStorm Database
目前為止,我們已經將資料 seeding 到 Azure 的 MySQL,不過還無法確定資料是否真的已經寫入成功,因此要設定 PhpStorm 的 Database 工具連到 Azure 查看資料。

點選右側的 Database,按 + 新增資料庫連線。

Data Source -> MySQL。

將之前的 Azure 的 Host、Database、User 與 Password 設定填過來。
按 Test Connection 測試是否可連線成功。
若第一次在 PhpStorm 連接 MySQL,需安裝 MySQL 的 Java driver。

PhpStorm 的 Database 工具可以看到 Azure MySQL 上所有的 table,也能看到 posts 上剛剛 seeding 的三筆資料。
設定 Azure .env
資料已經上 Azure 的 MySQL了,不過在 Azure 上的 Laravel 還不認識我們剛剛建立的 MySQL 資料庫。
Laravel 雖然提供了 .env,可以設定些敏感資訊,如資料庫連線。但預設 .gitignore 有排除 .env,所以並沒有上 GitHub,因此也不會上 Azure。
我們須在 Azure 的 Application settings 設定資料庫連線資訊。

選擇我們的 Laravel Web App。

Settings -> General -> Application Settings

建立 DB_CONNECTION、DB_HOST、DB_DATABASE、DB_USERNAME 與 DB_PASSWORD 這些 key,並將 .env 的這些值設定在這裡。
在 Azure 執行 Laravel

Azure 上的 Laravel 已經能順利讀取到 Azure 上的 MySQL 了。
Conclusion
- Azure 雖然沒有原生支援 MySQL,但透過 ClearDB 所提供的 MySQL 服務,我們依然可以在 Azure 上使用 PHP + Laravel + MySQL。
Sample Code
完整的範例可以在我的 GitHub 上找到。
Reference
- Cephas Lin, Create and connect to a MySQL database in Azure
- Mikhail Vink, Working with Windows Azure SQL Database in PhpStorm