在 Azure 一樣可以使用我們喜愛的 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

選擇 ClearDBMySQL 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

注意其 HOSTNAMEPORTUSERNAMEPASSWORDCONNECTION STRING 欄位。

其中 CONNECTION STRINGDatabase,即為我們剛剛建立的資料庫。

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

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

執行 seeding,將預設資料寫入 Azure 的 MySQL 資料庫。

設定 PhpStorm Database


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

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

Data Source -> MySQL

將之前的 Azure 的 HostDatabaseUserPassword 設定填過來。

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_CONNECTIONDB_HOSTDB_DATABASEDB_USERNAMEDB_PASSWORD 這些 key,並將 .env 的這些值設定在這裡。

在 Azure 執行 Laravel


Azure 上的 Laravel 已經能順利讀取到 Azure 上的 MySQL 了。

Conclusion


  • Azure 雖然沒有原生支援 MySQL,但透過 ClearDB 所提供的 MySQL 服務,我們依然可以在 Azure 上使用 PHP + Laravel + MySQL。

Sample Code


完整的範例可以在我的 GitHub 上找到。

Reference