Tutorial: Menyebarkan aplikasi PHP, MySQL, dan Redis ke Azure App Service

Tutorial ini menunjukkan cara membuat aplikasi PHP aman di Azure App Service yang terhubung ke database MySQL (menggunakan server fleksibel Azure Database for MySQL). Anda juga akan menyebarkan Azure Cache for Redis untuk mengaktifkan kode penembolokan di aplikasi Anda. Azure App Service adalah layanan patch mandiri dan hosting web yang sangat dapat diskalakan, yang dapat dengan mudah menyebarkan aplikasi di Windows atau Linux. Setelah selesai, Anda akan memiliki aplikasi Laravel yang berjalan di Azure App Service di Linux.

Screenshot of the Azure app example titled Task List showing new tasks added.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Aplikasi sampel

Untuk mengikuti tutorial ini, kloning atau unduh sampel aplikasi Laravel dari repositori:

git clone https://github.com/Azure-Samples/laravel-tasks.git

Jika Anda ingin menjalankan aplikasi secara lokal, lakukan hal berikut:

  • Di .env, konfigurasikan pengaturan database (seperti DB_DATABASE, DB_USERNAMEdan DB_PASSWORD) menggunakan pengaturan di database MySQL lokal Anda. Anda memerlukan server MySQL lokal untuk menjalankan sampel ini.

  • Dari akar repositori, mulai Laravel dengan perintah berikut:

    composer install
    php artisan migrate
    php artisan key:generate
    php artisan serve
    

1 - Membuat sumber daya App Service dan MySQL

Dalam langkah ini, Anda membuat sumber daya Azure. Langkah-langkah yang digunakan dalam tutorial ini membuat konfigurasi App Service dan Azure Database for MySQL yang aman secara default. Untuk proses pembuatan, Anda akan menentukan:

  • Nama untuk aplikasi web. Ini adalah nama yang digunakan sebagai bagian dari nama DNS untuk aplikasi web Anda dalam bentuk https://<app-name>.azurewebsites.net.
  • Runtime untuk aplikasi. Di situlah Anda memilih versi PHP yang digunakan untuk aplikasi Anda.
  • Resource Group untuk aplikasi. Grup sumber daya memungkinkan Anda mengelompokkan (dalam kontainer logika) semua sumber daya Azure yang diperlukan untuk aplikasi.

Masuk ke portal Microsoft Azure dan ikuti langkah-langkah ini untuk membuat sumber daya Azure App Service Anda.

Langkah 1: Di portal Azure:

  1. Masukkan "database apl web" di bilah pencarian di bagian atas portal Azure.
  2. Pilih item berlabel Apl Web + Database di bawah judul Marketplace. Anda juga dapat menavigasi ke wizard pembuatan secara langsung.

A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.

Langkah 2: Di halaman Buat Aplikasi Web + Database , isi formulir sebagai berikut.

  1. Grup Sumber Daya → Pilih Buat baru dan gunakan nama dari msdocs-laravel-mysql-tutorial.
  2. Wilayah → Wilayah Azure di dekat Anda.
  3. Namamsdocs-laravel-mysql-XYZ dimana XYZ adalah tiga karakter acak. Nama ini harus unik di seluruh Azure.
  4. Tumpukan runtime → PHP 8.2.
  5. Menambahkan Azure Cache for Redis? → Ya.
  6. Paket hostingDasar. Setelah siap, Anda dapat melakukan peningkatan ke tingkat harga produksi nanti.
  7. MySQL - Server Fleksibel dipilih untuk Anda secara default sebagai mesin database. Azure Database for MySQL adalah database MySQL yang dikelola sepenuhnya sebagai layanan di Azure, kompatibel dengan edisi komunitas terbaru.
  8. Pilih Tinjau + buat.
  9. Setelah validasi selesai, pilih Buat.

A screenshot showing how to configure a new app and database in the Web App + Database wizard.

Langkah 3: Penyebaran membutuhkan waktu beberapa menit untuk diselesaikan. Setelah penyebaran selesai, pilih tombol Buka sumber daya. Anda diarahkan ke aplikasi App Service, tetapi sumber daya berikut dibuat:

  • Grup sumber daya → Kontainer untuk semua sumber daya yang dibuat.
  • App Service → Menentukan sumber daya komputasi untuk App Service. Paket Linux di tingkat Dasar dibuat.
  • App Service → Mewakili aplikasi Anda dan berjalan dalam paket App Service.
  • Jaringan virtual → Terintegrasi dengan aplikasi App Service dan mengisolasi lalu lintas jaringan back-end.
  • Titik akhir privat → Titik akhir Akses untuk server database dan cache Redis di jaringan virtual.
  • Antarmuka jaringan → Mewakili alamat IP privat, satu untuk setiap titik akhir privat.
  • Server fleksibel Azure Database for MySQL → Hanya dapat diakses dari belakang titik akhir privatnya. Database dan pengguna dibuat untuk Anda di server.
  • Azure Cache for Redis → Hanya dapat diakses dari belakang titik akhir privatnya.
  • Zona DNS privat → Mengaktifkan resolusi DNS server database dan cache Redis di jaringan virtual.

A screenshot showing the deployment process completed.

2 - Menyiapkan konektivitas database

Langkah 1: Di halaman App Service, di menu sebelah kiri, pilih Konfigurasi.

A screenshot showing how to open the configuration page in App Service.

Langkah 2:

  1. Temukan pengaturan aplikasi yang dimulai dengan AZURE_MYSQL_. Mereka dihasilkan dari database MySQL baru oleh wizard pembuatan.
  2. Selain itu, temukan pengaturan aplikasi yang dimulai dengan AZURE_REDIS_. Cache tersebut dihasilkan dari cache Redis baru oleh wizard pembuatan. Untuk menyiapkan aplikasi Anda, nama ini adalah semua yang Anda butuhkan.
  3. Jika mau, Anda dapat memilih tombol Edit di sebelah kanan setiap pengaturan dan melihat atau menyalin nilainya. Nantinya, Anda akan mengubah kode aplikasi untuk menggunakan pengaturan ini.

A screenshot showing how to create an app setting.

Langkah 3: Di tab Pengaturan aplikasi di halaman Konfigurasi , buat CACHE_DRIVER pengaturan:

  1. Pilih Pengaturan aplikasi baru.
  2. Di bidang Nama, masukkan CACHE_DRIVER.
  3. Di bidang Nilai, masukkan redis.
  4. Pilih OK. CACHE_DRIVER sudah digunakan dalam kode aplikasi Laravel. Pengaturan ini memberi tahu Laravel untuk menggunakan Redis sebagai cache-nya.

A screenshot showing how to see the autogenerated connection string.

Langkah 4: Menggunakan langkah yang sama di Langkah 3, buat pengaturan aplikasi berikut:

  • MYSQL_ATTR_SSL_CA: Use /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem sebagai nilai. Pengaturan aplikasi ini menunjuk ke jalur sertifikat TLS/SSL yang Anda butuhkan untuk mengakses server MySQL. Ini termasuk dalam repositori sampel untuk kenyamanan.
  • LOG_CHANNEL: Gunakan stderr sebagai nilai. Pengaturan ini memberi tahu Laravel untuk menyalurkan log ke stderr, yang membuatnya tersedia untuk log App Service.
  • APP_DEBUG: Gunakan true sebagai nilai. Ini adalah variabel debugging Laravel yang memungkinkan halaman mode debug.
  • APP_KEY: Gunakan base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= sebagai nilai. Ini adalah variabel enkripsi Laravel.
  1. Di bilah menu di bagian atas, pilih Simpan.
  2. Saat diminta, pilih Lanjutkan.

A screenshot showing how to save settings in the configuration page.

Penting

Nilai APP_KEY digunakan di sini untuk kenyamanan. Untuk skenario produksi, skenario tersebut harus dihasilkan khusus untuk penyebaran Anda menggunakan php artisan key:generate --show di baris perintah.

3 - Menyebarkan kode sampel

Dalam langkah ini, Anda akan mengonfigurasi penyebaran GitHub menggunakan GitHub Actions. Ini hanya salah satu dari banyak cara untuk menyebarkan ke App Service, tetapi juga cara yang bagus untuk memiliki integrasi berkelanjutan dalam proses penyebaran Anda. Secara default, setiap git push repositori GitHub Anda memulai tindakan build dan deploy. Anda akan membuat beberapa perubahan pada basis kode Anda dengan Visual Studio Code langsung di browser, lalu membiarkan GitHub Actions menyebarkan secara otomatis untuk Anda.

Langkah 1: Di jendela browser baru:

  1. Masuk ke akun GitHub Anda.
  2. Buka https://github.com/Azure-Samples/laravel-tasks.
  3. Pilih Fork.
  4. Pilih Buat fork.

A screenshot showing how to create a fork of the sample GitHub repository.

Langkah 2: Di halaman GitHub, buka Visual Studio Code di browser dengan menekan tombol . .

A screenshot showing how to open the Visual Studio Code browser experience in GitHub.

Langkah 3: Di Visual Studio Code di browser, buka config/database.php di explorer. Temukan bagian mysql dan buat perubahan berikut:

  1. Ganti DB_HOST dengan AZURE_MYSQL_HOST.
  2. Ganti DB_DATABASE dengan AZURE_MYSQL_DBNAME.
  3. Ganti DB_USERNAME dengan AZURE_MYSQL_USERNAME.
  4. Ganti DB_PASSWORD dengan AZURE_MYSQL_PASSWORD.
  5. Ganti DB_PORT dengan AZURE_MYSQL_PORT. Ingatlah bahwa pengaturan ini AZURE_MYSQL_ dibuat untuk Anda oleh wizard buat.

A screenshot showing Visual Studio Code in the browser and an opened file with modified MySQL variables.

Langkah 4: Dalam gulir config/database.php ke bagian Redis cache dan buat perubahan berikut:

  1. Ganti REDIS_HOST dengan AZURE_REDIS_HOST.
  2. Ganti REDIS_PASSWORD dengan AZURE_REDIS_PASSWORD.
  3. Ganti REDIS_PORT dengan AZURE_REDIS_PORT.
  4. Ganti REDIS_CACHE_DB dengan AZURE_REDIS_DATABASE.
  5. Di bagian yang sama, tambahkan baris dengan 'scheme' => 'tls',. Konfigurasi ini memberi tahu Laravel untuk menggunakan enkripsi untuk terhubung ke Redis. Ingatlah bahwa pengaturan ini AZURE_REDIS_ dibuat untuk Anda oleh wizard buat.

A screenshot showing Visual Studio Code in the browser and an opened file with modified Redis variables.

Langkah 5:

  1. Pilih ekstensi Kontrol Sumber.
  2. Di kotak teks, ketik pesan penerapan seperti Configure DB & Redis variables.
  3. Pilih Terapkan dan Dorong.

A screenshot showing the changes being committed and pushed to GitHub.

Langkah 6: Kembali ke halaman App Service, di menu sebelah kiri, pilih Pusat Penyebaran.

A screenshot showing how to open the deployment center in App Service.

Langkah 7: Di halaman Pusat Penyebaran:

  1. Di Sumber, pilih GitHub. Secara default, GitHub Actions dipilih sebagai penyedia build.
  2. Masuk ke akun GitHub Anda dan ikuti perintah untuk mengotorisasi Azure.
  3. Di Organisasi, pilih akun Anda.
  4. Di Repositori, pilih laravel-task.
  5. Di Cabang, pilih utama.
  6. Di menu atas, pilih Simpan. App Service menerapkan file alur kerja ke dalam repositori GitHub yang dipilih, di direktori .github/workflows.

A screenshot showing how to configure CI/CD using GitHub Actions.

Langkah 8: Di halaman Pusat Penyebaran:

  1. Pilih Log. Eksekusi penyebaran sudah dimulai.
  2. Di item log untuk eksekusi penyebaran, pilih Build/Sebarkan Log.

A screenshot showing how to open deployment logs in the deployment center.

Langkah 9: Anda dibawa ke repositori GitHub Anda dan melihat bahwa tindakan GitHub sedang berjalan. File alur kerja menentukan dua tahap terpisah, mem-build dan menyebarkan. Tunggu hingga eksekusi GitHub menampilkan status Selesai. Memakan waktu 15 menit.

A screenshot showing a GitHub run in progress.

4 - Membuat skema database

Wizard pembuatan menempatkan server database MySQL di belakang titik akhir privat, sehingga hanya dapat diakses dari jaringan virtual. Karena aplikasi App Service sudah terintegrasi dengan jaringan virtual, cara termudah untuk menjalankan migrasi database dengan database Anda adalah langsung dari dalam kontainer App Service.

Langkah 1: Kembali ke halaman App Service, di menu sebelah kiri, pilih SSH.

A screenshot showing how to open the SSH shell for your app from the Azure portal.

Langkah 2: Di terminal SSH:

  1. Jalankan cd /home/site/wwwroot. Berikut adalah semua file yang Anda sebarkan.
  2. Jalankan php artisan migrate --force. Jika berhasil, App Service berhasil tersambung ke database MySQL. Hanya perubahan pada file di /home yang dapat bertahan di luar mulai ulang aplikasi. Perubahan di luar /home tidak dipertahankan.

A screenshot showing the commands to run in the SSH shell and their output.

5 - Mengubah akar situs

Sebagai gantinya, Siklus hidup aplikasi Laravel dimulai di direktori /publik. Kontainer PHP default untuk App Service menggunakan Nginx, yang dimulai di direktori akar aplikasi. Untuk mengubah akar situs, Anda perlu mengubah file konfigurasi Nginx di kontainer PHP (/etc/nginx/sites-available/default). Untuk kenyamanan Anda, repositori sampel berisi file konfigurasi kustom yang disebut default. Seperti disebutkan sebelumnya, Anda tidak ingin mengganti file ini menggunakan shell SSH, karena perubahan berada di luar /home dan akan hilang setelah aplikasi dimulai ulang.

Langkah 1:

  1. Dari menu kiri, pilih Konfigurasi.
  2. Pilih tab Pengaturan umum.

A screenshot showing how to open the general settings tab in the configuration page of App Service.

Langkah 2: Di tab Pengaturan umum:

  1. Dalam kotak Perintah Startup, masukkan perintah berikut: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
  2. Pilih Simpan. Perintah menggantikan file konfigurasi Nginx dalam kontainer PHP dan memulai ulang Nginx. Konfigurasi ini memastikan bahwa perubahan yang sama dilakukan pada kontainer setiap kali dimulai.

A screenshot showing how to configure a startup command in App Service.

6 - Menelusuri aplikasi

Langkah 1: Di halaman App Service:

  1. Dari menu kiri, pilih Ringkasan.
  2. Pilih URL aplikasi Anda. Anda juga dapat menavigasi langsung ke https://<app-name>.azurewebsites.net.

A screenshot showing how to launch an App Service from the Azure portal.

Langkah 2: Tambahkan beberapa tugas ke daftar. Selamat, Anda menjalankan aplikasi PHP berbasis data yang aman di Azure App Service.

A screenshot of the Laravel app running in App Service.

Tip

Aplikasi sampel mengimplementasikan pola cache-aside . Saat Anda memuat ulang halaman setelah membuat perubahan data, Waktu respons di halaman web menunjukkan waktu yang jauh lebih cepat karena memuat data dari cache alih-alih database.

7 - Mengalirkan log diagnostik

Azure App Service menangkap semua pesan yang masuk ke konsol untuk membantu Anda mendiagnosis masalah dengan aplikasi Anda. Aplikasi sampel mengeluarkan pesan log konsol dalam setiap titik akhirnya untuk menunjukkan kemampuan ini. Secara default, fungsionalitas pengelogan Laravel (misalnya, Log::info()) output ke file lokal. Pengaturan aplikasi Anda LOG_CHANNEL dari sebelumnya membuat entri log dapat diakses dari aliran log App Service.

Langkah 1: Di halaman App Service:

  1. Dari menu kiri, pilih Log App Service.
  2. Di Pengelogan aplikasi, pilih Sistem File.

A screenshot showing how to enable native logs in App Service in the Azure portal.

Langkah 2: Dari menu sebelah kiri, pilih Aliran log. Anda melihat log untuk aplikasi Anda, termasuk log platform dan log dari dalam kontainer.

A screenshot showing how to view the log stream in the Azure portal.

Membersihkan sumber daya

Setelah selesai, Anda dapat menghapus semua sumber daya dari langganan Azure dengan menghapus grup sumber daya.

Langkah 1: Di bilah pencarian di bagian atas portal Azure:

  1. Masukkan nama grup sumber daya.
  2. Pilih grup sumber daya.

A screenshot showing how to search for and navigate to a resource group in the Azure portal.

Langkah 2: Di halaman grup sumber daya, pilih Hapus grup sumber daya.

A screenshot showing the location of the Delete Resource Group button in the Azure portal.

Langkah 3:

  1. Masukkan nama grup sumber daya untuk mengonfirmasi penghapusan Anda.
  2. Pilih Hapus.

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal. :

Pertanyaan yang Sering Ditanyakan

Berapa biaya untuk penyiapan ini?

Harga untuk buat sumber daya adalah sebagai berikut:

  • Paket App Service dibuat di tingkat Dasar dan dapat ditingkatkan atau diturunkan. Lihat Harga App Service.
  • Server fleksibel MySQL dibuat di tingkat B1ms dan dapat ditingkatkan atau diturunkan skalanya. Dengan akun gratis Azure, tingkat B1ms gratis selama 12 bulan, hingga batas bulanan. Lihat Harga Azure Database for MySQL.
  • Azure Cache for Redis dibuat di tingkat Dasar dengan ukuran cache minimum. Ada biaya kecil yang terkait dengan tingkat ini. Anda dapat meningkatkannya ke tingkat performa yang lebih tinggi untuk ketersediaan, pengklusteran, dan fitur lainnya yang lebih tinggi. Lihat Harga Azure Cache for Redis.
  • Jaringan virtual tidak dikenakan biaya kecuali Anda mengonfigurasi fungsionalitas tambahan, seperti peering. Lihat Harga Azure Virtual Network.
  • Zona DNS privat dikenakan biaya kecil. Lihat Harga Azure DNS.

Bagaimana cara menyambungkan ke database MySQL yang diamankan di belakang jaringan virtual dengan alat lain?

  • Untuk akses dasar dari alat baris perintah, Anda dapat menjalankan mysql dari terminal SSH aplikasi.
  • Untuk terhubung dari alat desktop seperti MySQL Workbench, komputer Anda harus berada dalam jaringan virtual. Misalnya, itu bisa berupa Azure VM yang terhubung ke salah satu subnet, atau komputer di jaringan lokal yang memiliki koneksi VPN situs-ke-situs dengan jaringan virtual Azure.
  • Anda juga dapat mengintegrasikan Azure Cloud Shell dengan jaringan virtual.

Bagaimana cara kerja pengembangan aplikasi lokal dengan GitHub Actions?

Ambil file alur kerja yang dibuat secara otomatis dari App Service sebagai contoh, masing-masing git push memulai eksekusi build dan penyebaran baru. Dari klon lokal repositori GitHub, Anda membuat pembaruan yang diinginkan mendorongnya ke GitHub. Misalnya:

git add .
git commit -m "<some-message>"
git push origin main

Mengapa penyebaran GitHub Actions begitu lambat?

File alur kerja yang dibuat secara otomatis dari App Service mendefinisikan eksekusi dua pekerjaan, build-then-deploy. Karena setiap pekerjaan berjalan di lingkungannya sendiri yang bersih, file alur kerja memastikan bahwa pekerjaan deploy memiliki akses ke file dari pekerjaan build:

Sebagian besar waktu yang dibutuhkan oleh proses dua pekerjaan dihabiskan untuk mengunggah dan mengunduh artefak. Jika mau, Anda dapat menyederhanakan file alur kerja dengan menggabungkan dua pekerjaan menjadi satu, yang menghilangkan kebutuhan untuk langkah-langkah pengunggahan dan pengunduhan.

Langkah berikutnya

Lanjutkan ke tutorial berikutnya untuk mempelajari cara mengamankan aplikasi Anda dengan domain dan sertifikat kustom.

Atau, lihat sumber daya lainnya: