Tutorial: Membangun aplikasi PHP dan MySQL di Azure App Service

Azure App Service menyediakan layanan hosting web yang sangat dapat diskalakan dan melakukan patch mandiri menggunakan sistem operasi Windows. Tutorial ini menunjukkan cara membuat aplikasi PHP di Azure dan menghubungkannya ke database MySQL. Setelah selesai, Anda akan memiliki aplikasi Laravel yang berjalan di Azure App Service di Windows.

Azure App Service menyediakan layanan hosting web yang sangat dapat diskalakan dan melakukan patch mandiri menggunakan sistem operasi Linux. Tutorial ini menunjukkan cara membuat aplikasi PHP di Azure dan menghubungkannya ke database MySQL. Setelah selesai, Anda akan memiliki aplikasi Laravel yang berjalan di Azure App Service di Linux.

Cuplikan layar contoh aplikasi PHP berjudul Daftar Tugas.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat database MySQL di Azure
  • Menyambungkan aplikasi PHP ke MySQL
  • Menyebarkan aplikasi ke Azure
  • Memperbarui model data dan menyebarkan ulang aplikasi
  • Mengalirkan log diagnostik dari Azure
  • Mengelola aplikasi di portal Microsoft Azure

Jika Anda tidak memiliki langganan Azure, buatlah akun gratis sebelum Anda memulai.

Prasyarat

Untuk menyelesaikan tutorial ini:

  • Gunakan lingkungan Bash di Azure Cloud Shell.

    Luncurkan Cloud Shell di jendela baru

  • Jika mau, instal Azure CLI untuk menjalankan perintah referensi CLI.

    • Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk tambahan, lihat Masuk dengan Azure CLI.

    • Saat diminta, instal ekstensi saat pertama kali menggunakan Azure CLI. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.

    • Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk memutakhirkan ke versi terbaru, jalankan pemutakhiran az.

Menyiapkan MySQL lokal

Dalam langkah ini, Anda membuat database di server MySQL lokal Anda untuk penggunaan Anda dalam tutorial ini.

Menyambungkan ke server MySQL lokal

Di jendela terminal, sambungkan ke server MySQL lokal Anda. Anda dapat menggunakan jendela terminal ini untuk menjalankan semua perintah dalam tutorial ini.

mysql -u root -p

Jika Anda dimintai kata sandi, masukkan kata sandi untuk akun root tersebut. Jika Anda tidak ingat kata sandi akun root Anda, lihat MySQL: Cara Mengatur Ulang Kata Sandi Root.

Jika perintah Anda berjalan dengan sukses, maka server MySQL Anda berjalan. Jika tidak, pastikan server MySQL lokal Anda dimulai dengan mengikuti langkah-langkah pasca-instalasi MySQL.

Membuat database secara lokal

  1. Pada perintah mysql, buat database.

    CREATE DATABASE sampledb;
    
  2. Keluar dari koneksi server Anda dengan mengetik quit.

    quit
    

Membuat aplikasi PHP secara lokal

Dalam langkah ini, Anda mendapatkan aplikasi sampel Laravel, mengonfigurasikan koneksi databasenya, dan menjalankannya secara lokal.

Mengkloning sampel

Di jendela terminal, cd ke direktori kerja.

  1. Klon repositori sampel dan ubah ke akar repositori.

    git clone https://github.com/Azure-Samples/laravel-tasks
    cd laravel-tasks
    
  2. Pastikan cabang default adalah main.

    git branch -m main
    

    Tip

    Perubahan nama cabang tidak diperlukan oleh Azure App Service. Namun, karena banyak repositori mengubah cabang defaultnya menjadi main, tutorial ini juga menampilkan cara menyebarkan repositori dari main. Untuk mengetahui informasi selanjutnya, lihat Mengubah cabang penyebaran.

  3. Memasang paket yang diperlukan.

    composer install
    

Mengonfigurasikan koneksi MySQL

Di root repositori, buat file bernama .env. Salin variabel berikut ke dalam file .env. Ganti <root_password> tempat penampung dengan kata sandi pengguna root MySQL.

APP_ENV=local
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=sampledb
DB_USERNAME=root
DB_PASSWORD=<root_password>

Untuk informasi tentang cara Laravel menggunakan file .env, lihat Konfigurasi Lingkungan Laravel.

Jalankan sampel secara lokal

  1. Jalankan migrasi database Laravel untuk membuat tabel yang dibutuhkan aplikasi. Untuk melihat tabel mana yang dibuat dalam migrasi, lihat di direktori database/migrasi di repositori Git.

    php artisan migrate
    
  2. Hasilkan kunci aplikasi Laravel baru.

    php artisan key:generate
    
  3. Jalankan aplikasi.

    php artisan serve
    
  4. Buka http://localhost:8000 di browser. Menambahkan beberapa tugas di halaman.

    PHP berhasil tersambung ke MySQL

  5. Untuk menghentikan PHP, ketik Ctrl + C di terminal.

Membuat MySQL di Azure

Dalam langkah ini, Anda membuat database MySQL di Azure Database for MySQL. Kemudian, Anda mengonfigurasikan aplikasi PHP untuk menyambungkan ke database ini.

Membuat grup sumber daya

Grup sumber daya Azure adalah kontainer logis tempat sumber daya Azure seperti aplikasi web, database, dan akun penyimpanan disebarkan dan dikelola. Misalnya, Anda dapat memilih untuk menghapus seluruh grup sumber daya dalam satu langkah sederhana nanti.

Di Cloud Shell, buat grup sumber daya dengan perintah az group create. Contoh berikut ini menampilkan grup sumber daya dengan nama myResourceGroup di lokasi Eropa Barat. Untuk melihat semua lokasi yang didukung untuk App Service di Linux pada tingkat Standar, jalankan perintah az appservice list-locations --sku FREE.

az group create --name myResourceGroup --location "West Europe"

Anda biasanya membuat grup sumber daya dan sumber daya di wilayah sekitar Anda.

Saat perintah selesai, output JSON memperlihatkan kepada Anda properti grup sumber daya.

Membuat server MySQL

Di Cloud Shell, buat server di Azure Database for MySQL dengan perintah az mysql server create.

Dalam perintah berikut ini, ganti nama server unik untuk tempat penampung <mysql-server-name> , nama pengguna untuk <admin-user> , dan kata sandi untuk tempat penampung <admin-password> . Nama server digunakan sebagai bagian dari titik akhir MySQL Anda (https://<mysql-server-name>.mysql.database.azure.com), sehingga namanya harus unik di semua server di Azure. Untuk detail tentang memilih MySQL DB SKU, lihatMembuat server Database Azure for MySQL.

az mysql server create --resource-group myResourceGroup --name <mysql-server-name> --location "West Europe" --admin-user <admin-user> --admin-password <admin-password> --sku-name B_Gen5_1

`Saat server MySQL dibuat, Azure CLI menampilkan informasi yang mirip dengan contoh berikut:

{
  "administratorLogin": "<admin-user>",
  "administratorLoginPassword": null,
  "fullyQualifiedDomainName": "<mysql-server-name>.mysql.database.azure.com",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>",
  "location": "westeurope",
  "name": "<mysql-server-name>",
  "resourceGroup": "myResourceGroup",
  ...
  -  < Output has been truncated for readability >
}

Mengonfigurasikan aturan firewall server

  1. Di Cloud Shell, buat aturan firewall untuk server MySQL Anda untuk mengizinkan koneksi klien dengan menggunakan perintah az mysql server firewall-rule create. Ketika IP awal dan IP akhir diatur ke 0.0.0.0, firewall hanya dibuka untuk sumber daya Azure lainnya.

    az mysql server firewall-rule create --name allAzureIPs --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0
    

    Tip

    Anda dapat lebih membatasi aturan firewall dengan hanya menggunakan alamat IP keluar yang digunakan aplikasi Anda.

  2. Di Azure Cloud Shell, jalankan kembali perintah untuk mengizinkan akses dari komputer lokal Anda dengan mengganti <your-ip-address> dengan alamat IP IPv4 lokal Anda.

    az mysql server firewall-rule create --name AllowLocalClient --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address=<your-ip-address> --end-ip-address=<your-ip-address>
    

Membuat database produksi

  1. Di jendela terminal lokal, sambungkan ke server MySQL di Azure. Gunakan nilai yang Anda tentukan sebelumnya untuk < admin-pengguna> dan <mysql-server-name> . Saat dimintai kata sandi, gunakan kata sandi yang Anda tentukan saat Anda membuat database di Azure.

    mysql -u <admin-user>@<mysql-server-name> -h <mysql-server-name>.mysql.database.azure.com -P 3306 -p
    
  2. Pada perintah mysql, buat database.

    CREATE DATABASE sampledb;
    
  3. Buat pengguna database yang disebut phpappuser dan berikan semua hak istimewa dalam sampledb database. Agar lebih sederhana tutorial, gunakan MySQLAzure2017 sebagai kata sandi.

    CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2017'; 
    GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';
    
  4. Keluar dari koneksi server dengan mengetik quit.

    quit
    

Menyambungkan aplikasi ke Azure MySQL

Dalam langkah ini, Anda menyambungkan aplikasi PHP ke database MySQL yang Anda buat di Azure Database for MySQL.

Mengonfigurasikan koneksi database

Di root repositori, buat file .env.production dan salin variabel berikut ke dalamnya. Ganti tempat penampung_<mysql-server-name>_ di DB_HOST dan DB_USERNAME.

APP_ENV=production
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=<mysql-server-name>.mysql.database.azure.com
DB_DATABASE=sampledb
DB_USERNAME=phpappuser@<mysql-server-name>
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true

Simpan perubahan.

Tip

Untuk mengamankan informasi koneksi MySQL Anda, file ini sudah dikecualikan dari repositori Git (Lihat .gitignore di root repositori). Kemudian, Anda mempelajari cara mengonfigurasikan variabel lingkungan di App Service untuk menyambungkan ke database Anda di Azure Database for MySQL. Dengan variabel lingkungan, Anda tidak memerlukan file .env di App Service.

Mengonfigurasikan sertifikat TLS/SSL

Secara default, Azure Database for MySQL memberlakukan koneksi TLS dari klien. Untuk menyambungkan ke database MySQL Anda di Azure, Anda harus menggunakan sertifikat .pem yang disediakan oleh Azure Database for MySQL.

Buka konfigurasi/database.php dan tambahkan parameter sslmode dan options ke connections.mysql, seperti yang ditunjukkan dalam kode berikut.

'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem', 
    ] : []
],
'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL') && extension_loaded('pdo_mysql')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem',
    ] : []
],

Sertifikat BaltimoreCyberTrustRoot.crt.pem disediakan di repositori untuk kenyamanan dalam tutorial ini.

Menguji aplikasi secara lokal

  1. Jalankan migrasi database Laravel dengan .env.production sebagai file lingkungan untuk membuat tabel dalam database MySQL Anda di Azure Database for MySQL. Ingat bahwa .env.production memiliki informasi koneksi ke database MySQL Anda di Azure.

    php artisan migrate --env=production --force
    
  2. .env.production belum memiliki kunci aplikasi yang valid. Hasilkan yang baru untuk itu di terminal.

    php artisan key:generate --env=production --force
    
  3. Jalankan aplikasi sampel dengan .env.production sebagai file lingkungan.

    php artisan serve --env=production
    
  4. Navigasikan ke http://localhost:8000. Jika halaman dimuat tanpa kesalahan, aplikasi PHP tersambung ke database MySQL di Azure.

  5. Menambahkan beberapa tugas di halaman.

    PHP berhasil menyambungkan ke Azure Database for MySQL

  6. Untuk menghentikan PHP, ketik Ctrl + C di terminal.

Terapkan perubahan Anda

Jalankan perintah Git berikut untuk menerapkan perubahan Anda:

git add .
git commit -m "database.php updates"

Aplikasi Anda siap untuk disebarkan.

Sebarkan ke Azure

Dalam langkah ini, Anda menyebarkan aplikasi PHP yang terhubung dengan MySQL ke Azure App Service.

Mengonfigurasikan manifes penyebaran

FTP dan Git lokal dapat disebarkan ke aplikasi web Azure dengan menggunakan pengguna penyebaran. Setelah mengonfigurasikan pengguna penyebaran, Anda dapat menggunakannya untuk semua penyebaran Azure Anda. Nama pengguna dan kata sandi penyebaran tingkat akun Anda berbeda dari info masuk langganan Azure Anda.

Untuk mengonfigurasi pengguna penyebaran, jalankan perintah az webapp deployment user set di Azure Cloud Shell. Ganti <username> dan <password> dengan nama pengguna dan kata sandi pengguna penyebaran.

  • Nama pengguna harus unik dalam Azure, dan untuk dorongan Git lokal, tidak boleh berisi simbol ‘@’.
  • Kata sandi setidaknya harus delapan karakter, dengan dua dari tiga elemen berikut: huruf, angka, dan simbol.
az webapp deployment user set --user-name <username> --password <password>

Output JSON menunjukkan kata sandi sebagai null. Jika Anda mendapatkan kesalahan 'Conflict'. Details: 409, ubah nama pengguna. Jika Anda mendapatkan kesalahan 'Bad Request'. Details: 400, gunakan kata sandi yang lebih kuat.

Rekam nama pengguna dan kata sandi Anda untuk digunakan guna menyebarkan aplikasi web Anda.

Membuat Paket App Service

Di Cloud Shell, buat paket App Service dengan perintah az appservice plan create.

Contoh berikut membuat paket App Service yang dinamai myAppServicePlan dalam tingkat harga Gratis:

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE

Setelah paket App Service dibuat, Azure CLI memperlihatkan informasi yang mirip dengan contoh berikut:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "app",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Di Cloud Shell, buat paket App Service dengan perintah az appservice plan create.

Contoh berikut membuat rencana App Service yang dinamai myAppServicePlan dalam tingkat harga Gratis:

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE --is-linux

Setelah paket App Service dibuat, Azure CLI memperlihatkan informasi yang mirip dengan contoh berikut:

{ 
  "freeOfferExpirationTime": null,
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Membuat aplikasi web

Buat aplikasi web di paket App ServicemyAppServicePlan.

Di Cloud Shell, Anda dapat menggunakan perintah az webapp create. Dalam contoh berikut, ganti <app-name> dengan nama aplikasi unik global (karakter yang valid adalah a-z, 0-9, dan -). Runtime diatur ke PHP|7.2. Untuk melihat semua runtime yang didukung, jalankan az webapp list-runtimes --linux.

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git

Saat aplikasi web telah dibuat, Azure CLI menampilkan output yang mirip dengan contoh berikut:

Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Anda telah membuat aplikasi web baru kosong, dengan penyebaran git diaktifkan.

Catatan

URL jarak jauh Git ditampilkan di properti deploymentLocalGitUrl, dalam format https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Simpan URL ini saat Anda membutuhkannya nanti.

Buat aplikasi web di paket App ServicemyAppServicePlan.

Di Cloud Shell, Anda dapat menggunakan perintah az webapp create. Dalam contoh berikut, ganti <app-name> dengan nama aplikasi unik global (karakter yang valid adalah a-z, 0-9, dan -). Runtime diatur ke PHP|7.2. Untuk melihat semua runtime yang didukung, jalankan az webapp list-runtimes --linux.

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git

Saat aplikasi web telah dibuat, Azure CLI menampilkan output yang mirip dengan contoh berikut:

Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Anda telah membuat aplikasi web baru kosong, dengan penyebaran git diaktifkan.

Catatan

URL jarak jauh Git ditampilkan di properti deploymentLocalGitUrl, dalam format https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Simpan URL ini saat Anda membutuhkannya nanti.

Konfigurasikan pengaturan database

Di App Service, Anda menetapkan variabel lingkungan sebagai pengaturan aplikasi dengan menggunakan perintah az webapp config appsettings set.

Perintah berikut mengonfigurasikan pengaturan aplikasi DB_HOST, DB_DATABASE, DB_USERNAME, dan DB_PASSWORD. Ganti nama aplikasi tempat penampung <nama aplikasi> dan < mysql-server-name> .

az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DB_HOST="<mysql-server-name>.mysql.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="phpappuser@<mysql-server-name>" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"

Anda dapat menggunakan metode PHP getenv untuk mengakses pengaturan. kode Laravel menggunakan pembungkus env di atas PHPgetenv. Misalnya, konfigurasi MySQL dalam konfigurasi/database.php terlihat seperti kode berikut:

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    ...
],

Mengonfigurasikan variabel lingkungan Laravel

Laravel membutuhkan kunci aplikasi dalam App Service. Anda dapat mengonfigurasikannya dengan pengaturan aplikasi.

  1. Di jendela terminal lokal, gunakan php artisan untuk menghasilkan kunci aplikasi baru tanpa menyimpannya ke .env.

    php artisan key:generate --show
    
  2. Di Cloud Shell, atur kunci aplikasi di aplikasi App Service dengan menggunakan az webapp config appsettings set perintah. Ganti tempat penampung < nama aplikasi> dan <outputofphpartisankey:generate> .

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings APP_KEY="<output_of_php_artisan_key:generate>" APP_DEBUG="true"
    

    APP_DEBUG="true" perintahkan Laravel untuk mengembalikan informasi penelusuran kesalahan saat aplikasi yang disebarkan mengalami kesalahan. Saat menjalankan aplikasi produksi, atur ke false, yang lebih aman.

Atur jalur aplikasi virtual

Atur jalur aplikasi virtual untuk aplikasi tersebut. Langkah ini diperlukan karena Siklus hidup aplikasi Laravel dimulai di direktori publik bukan di direktori root aplikasi. Kerangka kerja PHP lain yang siklus hidupnya dimulai di direktori root dapat bekerja tanpa konfigurasi manual jalur aplikasi virtual.

Di Cloud Shell, atur jalur aplikasi virtual dengan menggunakan perintah az resource update. Ganti tempat penampung <nama aplikasi> .

az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01

Secara default, Azure App Service menunjuk jalur aplikasi virtual root ( / ) ke direktori root file aplikasi yang disebarkan (sites\wwwroot).

Siklus hidup aplikasi Laravel dimulai di direktori publik bukan di direktori root aplikasi. Gambar PHP Docker default untuk App Service menggunakan Apache, dan tidak memungkinkan Anda untuk menyesuaikan DocumentRoot untuk Laravel. Namun, Anda dapat menggunakan .htaccess untuk menulis ulang semua permintaan untuk menunjuk ke /publik bukan ke direktori root. Di root repositori, .htaccess sudah ditambahkan untuk tujuan ini. Dengan demikian, aplikasi Laravel Anda siap untuk disebarkan.

Untuk informasi selengkapnya, lihat Mengubah root situs.

Dorong ke Azure dari Git

  1. Karena Anda menyebarkan cabang main, Anda perlu menetapkan cabang penyebaran default untuk aplikasi App Service Anda ke main (lihat Mengubah penyebaran cabang). Di Azure Cloud Shell, tetapkan pengaturan aplikasi DEPLOYMENT_BRANCH dengan perintah az webapp config appsettings set.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  2. Kembali ke jendela terminal lokal, tambahkan remote Azure ke repositori Git lokal Anda. Ganti <deploymentLocalGitUrl-from-create-step> dengan URL jarak jauh Git yang Anda simpan dari Buat aplikasi web.

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  3. Gunakan perintah berikut untuk mendorong ke akses jarak jauh Azure untuk menyebarkan aplikasi Anda. Saat Git Credential Manager meminta info masuk kepada Anda, pastikan Anda memasukkan info masuk yang Anda buat di Mengonfigurasikan pengguna penyebaran, bukan info masuk yang Anda gunakan untuk masuk ke portal Microsoft Azure.

    git push azure main
    

    Perlu beberapa menit untuk menjalankan perintah ini. Saat dijalankan, perintah ini menampilkan informasi yang mirip dengan contoh berikut:

   Counting objects: 3, done.
   Delta compression using up to 8 threads.
   Compressing objects: 100% (3/3), done.
   Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
   Total 3 (delta 2), reused 0 (delta 0)
   remote: Updating branch 'main'.
   remote: Updating submodules.
   remote: Preparing deployment for commit id 'a5e076db9c'.
   remote: Running custom deployment command...
   remote: Running deployment command...
   ...
   < Output has been truncated for readability >
   

Catatan

Anda mungkin melihat bahwa proses penyebaran memasang paket Composer di bagian akhir. App Service tidak menjalankan otomatisasi ini selama penyebaran default, sehingga repositori sampel ini memiliki tiga file tambahan dalam direktori root-nya untuk mengaktifkannya:

  • .deployment - File ini memberitahu App Service untuk menjalankan bash deploy.sh sebagai skrip penyebaran kustom.
  • deploy.sh - Skrip penyebaran kustom. Jika Anda meninjau file, Anda akan melihat bahwa file tersebut berjalan php composer.phar install setelah npm install.
  • composer.phar - Manajer paket Composer.

Anda dapat menggunakan pendekatan ini untuk menambahkan langkah apa pun ke penyebaran berbasis Git Anda ke App Service. Untuk informasi selengkapnya, lihat Skrip Penerapan Kustom.

  1. Karena Anda menyebarkan cabang main, Anda perlu menetapkan cabang penyebaran default untuk aplikasi App Service Anda ke main (lihat Mengubah penyebaran cabang). Di Azure Cloud Shell, tetapkan pengaturan aplikasi DEPLOYMENT_BRANCH dengan perintah az webapp config appsettings set.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  2. Kembali ke jendela terminal lokal, tambahkan remote Azure ke repositori Git lokal Anda. Ganti <deploymentLocalGitUrl-from-create-step> dengan URL jarak jauh Git yang Anda simpan dari Buat aplikasi web.

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  3. Gunakan perintah berikut untuk mendorong ke akses jarak jauh Azure untuk menyebarkan aplikasi Anda. Saat Git Credential Manager meminta info masuk kepada Anda, pastikan Anda memasukkan info masuk yang Anda buat di Mengonfigurasikan pengguna penyebaran, bukan info masuk yang Anda gunakan untuk masuk ke portal Microsoft Azure.

    git push azure main
    

    Perlu beberapa menit untuk menjalankan perintah ini. Saat dijalankan, perintah ini menampilkan informasi yang mirip dengan contoh berikut:

   Counting objects: 3, done.
   Delta compression using up to 8 threads.
   Compressing objects: 100% (3/3), done.
   Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
   Total 3 (delta 2), reused 0 (delta 0)
   remote: Updating branch 'main'.
   remote: Updating submodules.
   remote: Preparing deployment for commit id 'a5e076db9c'.
   remote: Running custom deployment command...
   remote: Running deployment command...
   ...
   < Output has been truncated for readability >
   

Telusuri aplikasi Azure

Telusuri http://<app-name>.azurewebsites.net dan tambahkan beberapa tugas ke daftar.

Cuplikan layar contoh aplikasi Azure berjudul Daftar Tugas memperlihatkan tugas baru ditambahkan.

Selamat, Anda menjalankan aplikasi PHP berbasis data di Azure App Service.

Perbarui model secara lokal dan sebarkan ulang

Pada langkah ini, Anda membuat perubahan sederhana pada model data dan aplikasi web task, lalu menerbitkan pembaruan ke Azure.

Untuk skenario tugas, Anda memodifikasi aplikasi sehingga Anda bisa menandai tugas sebagai selesai.

Tambahkan kolom

  1. Di jendela terminal lokal, navigasikan ke root repositori Git.

  2. Hasilkan migrasi database baru untuk tasks tabel:

    php artisan make:migration add_complete_column --table=tasks
    
  3. Perintah ini memperlihatkan nama file migrasi yang dihasilkan. Temukan file ini dalam database/ migrasi dan buka.

  4. Ganti metode up dengan kode berikut:

    public function up()
    {
        Schema::table('tasks', function (Blueprint $table) {
            $table->boolean('complete')->default(False);
        });
    }
    

    Kode sebelumnya menambahkan kolom boolean dalam tabel tasks yang disebut complete.

  5. Ganti metode down dengan kode berikut untuk tindakan putar kembali:

    public function down()
    {
        Schema::table('tasks', function (Blueprint $table) {
            $table->dropColumn('complete');
        });
    }
    
  6. Di jendela terminal lokal, jalankan migrasi database Laravel untuk melakukan perubahan dalam database lokal.

    php artisan migrate
    

    Berdasarkan konvensi penamaan Laravel, model Task (lihat peta app/Task.php) ke tasks tabel secara default.

Perbarui logika aplikasi

  1. Buka file rute/web.php. Aplikasi ini mendefinisikan rute dan logika bisnisnya di sini.

  2. Di akhir file, tambahkan rute dengan kode berikut:

    /**
     * Toggle Task completeness
     */
    Route::post('/task/{id}', function ($id) {
        error_log('INFO: post /task/'.$id);
        $task = Task::findOrFail($id);
    
        $task->complete = !$task->complete;
        $task->save();
    
        return redirect('/');
    });
    

    Kode sebelumnya membuat pembaruan sederhana untuk model data dengan beralih ke nilai complete.

Perbarui tampilan ini

  1. Buka file resources/views/tasks.blade.php. Temukan <tr> tag pembuka dan ganti dengan:

    <tr class="{{ $task->complete ? 'success' : 'active' }}" >
    

    Kode sebelumnya mengubah warna baris tergantung pada penyelesaian tugas.

  2. Di baris berikutnya, Anda menemukan kode berikut:

    <td class="table-text"><div>{{ $task->name }}</div></td>
    

    Ganti seluruh baris dengan kode berikut:

    <td>
        <form action="{{ url('task/'.$task->id) }}" method="POST">
            {{ csrf_field() }}
    
            <button type="submit" class="btn btn-xs">
                <i class="fa {{$task->complete ? 'fa-check-square-o' : 'fa-square-o'}}"></i>
            </button>
            {{ $task->name }}
        </form>
    </td>
    

    Kode sebelumnya menambahkan tombol kirim yang mereferensikan rute yang Anda tentukan sebelumnya.

Menguji perubahan secara lokal

  1. Di jendela terminal lokal, jalankan server pengembangan dari direktori root repositori Git.

    php artisan serve
    
  2. Untuk melihat perubahan status tugas, navigasikan ke http://localhost:8000 dan pilih kotak centang.

    Kotak centang ditambahkan ke tugas

  3. Untuk menghentikan PHP, ketik Ctrl + C di terminal.

Menerbitkan perubahan pada Azure

  1. Di jendela terminal lokal, jalankan migrasi database Laravel dengan string koneksi produksi untuk membuat perubahan dalam database Azure.

    php artisan migrate --env=production --force
    
  2. Terapkan semua perubahan di Git, lalu dorong perubahan kode ke Azure.

    git add .
    git commit -m "added complete checkbox"
    git push azure main
    
  3. Setelah git push selesai, buka aplikasi Azure dan uji fungsionalitas yang baru.

    Perubahan model dan database yang diterbitkan ke Azure

Jika Anda menambahkan suatu tugas, tugas tersebut dipertahankan dalam database. Pembaruan pada skema data membiarkan data yang ada tetap utuh.

Mengalirkan log diagnostik

Saat aplikasi PHP berjalan di Azure App Service, Anda bisa mendapatkan log konsol yang disalurkan ke terminal Anda. Dengan demikian, Anda bisa mendapatkan pesan diagnostik yang sama untuk membantu Anda men-debug kesalahan aplikasi.

Untuk memulai streaming log, gunakan perintah az webapp log tail di Cloud Shell.

az webapp log tail --name <app_name> --resource-group myResourceGroup

Setelah streaming log dimulai, refresh aplikasi Azure di browser untuk mendapatkan lalu lintas web. Anda sekarang dapat melihat log konsol yang disalurkan ke terminal. Jika Anda tidak segera melihat log konsol, periksa lagi dalam 30 detik.

Untuk menghentikan streaming log kapan saja, tekan Ctrl+C.

Untuk mengakses log konsol yang dihasilkan dari dalam kode aplikasi Anda di App Service, aktifkan pembuatan log diagnostik dengan menjalankan perintah berikut di Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

Nilai yang mungkin untuk --level adalah: Error, Warning, Info, dan Verbose. Setiap level berikutnya mencakup level sebelumnya. Misalnya: Error hanya menyertakan pesan kesalahan, dan Verbose menyertakan semua pesan.

Setelah pembuatan log diagnostik diaktifkan, jalankan perintah berikut untuk melihat aliran log:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Jika Anda tidak segera melihat log konsol, periksa lagi dalam 30 detik.

Catatan

Anda juga dapat memeriksa file log dari browser di https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Untuk menghentikan streaming log kapan saja, ketikkan Ctrl+C.

Tip

Aplikasi PHP dapat menggunakan standar error_log() untuk keluaran ke konsol. Aplikasi sampel menggunakan pendekatan ini dalam aplikasi / Http / rute.php.

Sebagai web framework, Laravel menggunakan Monolog sebagai penyedia logging. Untuk melihat cara mendapatkan Monolog untuk menghasilkan pesan ke konsol, lihat PHP: Cara menggunakan monolog untuk masuk ke konsol (php://out).

Mengelola aplikasi Azure

  1. Buka portal Microsoft Azure untuk mengelola aplikasi yang Anda buat.

  2. Dari menu sebelah kiri, klik App Services, lalu klik nama aplikasi Azure Anda.

    Navigasi portal ke aplikasi Azure

    Anda akan melihat halaman Ringkasan aplikasi Anda. Di sini, Anda dapat melakukan tugas manajemen dasar seperti menghentikan, memulai, menghidupkan ulang, menelusuri, dan menghapus.

    Menu sebelah kiri menyediakan halaman khusus untuk mengonfigurasikan aplikasi Anda.

    Halaman App Service di portal Microsoft Azure

Membersihkan sumber daya

Dalam langkah-langkah sebelumnya, Anda sudah membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut ini di Cloud Shell:

az group delete --name myResourceGroup

Perintah ini mungkin perlu waktu satu menit untuk dijalankan.

Langkah berikutnya

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat database MySQL di Azure
  • Menyambungkan aplikasi PHP ke MySQL
  • Menyebarkan aplikasi ke Azure
  • Memperbarui model data dan menyebarkan ulang aplikasi
  • Mengalirkan log diagnostik dari Azure
  • Mengelola aplikasi di portal Microsoft Azure

Lanjutkan ke tutorial berikutnya untuk mempelajari cara memetakan nama DNS kustom ke aplikasi.

Atau, lihat sumber daya lainnya: