Öğretici: Azure Uygulama Hizmeti'nde PHP (Laravel) ve MySQL için Azure Veritabanı - Esnek Sunucu uygulaması oluşturma

Azure App Service, Linux işletim sistemini kullanan, yüksek düzeyde ölçeklenebilir ve otomatik olarak düzeltme uygulayan bir web barındırma hizmeti sunar. Bu öğreticide, Azure App Service'te bir MySQL veritabanına (MySQL için Azure Veritabanı Esnek Sunucusu kullanılarak) bağlı güvenli bir PHP uygulamasının nasıl oluşturulacağı gösterilmektedir. İşiniz bittiğinde, Linux'ta Azure Uygulaması Hizmeti üzerinde çalışan bir Laravel uygulamanız olur.

Eklenen yeni görevleri gösteren Görev Listesi başlıklı Azure uygulaması örneğinin ekran görüntüsü.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Azure'da varsayılan olarak güvenli bir PHP ve MySQL uygulaması oluşturma
  • Uygulama ayarlarını kullanarak MySQL için bağlantı gizli bilgilerini yapılandırma
  • GitHub Actions kullanarak uygulama kodunu dağıtma
  • Uygulamayı güncelleştirme ve yeniden dağıtma
  • Veritabanı geçişlerini güvenli bir şekilde çalıştırma
  • Azure’daki tanılama günlüklerinin akışını sağlama
  • Uygulamayı Azure portalında yönetme

Önkoşullar

Örnek uygulama

Bu öğreticiyi takip etmek için örnek uygulamayı depodan kopyalayın veya indirin:

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

Uygulamayı yerel olarak çalıştırmak istiyorsanız aşağıdakileri yapın:

  • .env dosyasında, yerel MySQL için Azure Veritabanı Flexible Server veritabanınızdaki ayarları kullanarak veritabanı ayarlarını (DB_DATABASE, DB_USERNAME, ve DB_PASSWORD gibi) yapılandırın. Bu örneği çalıştırmak için yerel bir MySQL için Azure Veritabanı Esnek Sunucu örneğine ihtiyacınız vardır.

  • Deponun kökünden aşağıdaki komutlarla Laravel'i başlatın:

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

1 - App Service ve MySQL için Azure Veritabanı Esnek Sunucu kaynakları oluşturma

Bu adımda Azure kaynaklarını oluşturursunuz. Bu öğreticide kullanılan adımlar, varsayılan olarak güvenli bir App Service ve MySQL için Azure Veritabanı Esnek Sunucu yapılandırması oluşturur. Oluşturma işlemi için şunları belirteceksiniz:

  • Web uygulamasının Adı. Bu, web uygulamanızın https://<app-name>.azurewebsites.net biçimindeki DNS adının bir parçası olarak kullanılan addır.
  • Uygulama için Çalışma Zamanı . Burası, uygulamanız için kullanılacak PHP sürümünü seçtiğiniz yerdir.
  • Uygulamanın Kaynak Grubu . Kaynak grubu, uygulama için gereken tüm Azure kaynaklarını gruplandırmanıza (mantıksal bir kapsayıcıda) olanak tanır.

Azure portalında oturum açın ve Azure Uygulaması Hizmeti kaynaklarınızı oluşturmak için bu adımları izleyin.

Yönergeler Ekran görüntüsü
Azure portalında:
  1. Azure portalının üst kısmındaki arama çubuğuna "web uygulaması veritabanı" yazın.
  2. Market başlığının altında Web Uygulaması + Veritabanı etiketli öğeyi seçin.
Doğrudan oluşturma yardımcısı öğesine de gidebilirsiniz.
Web Uygulaması + Veritabanı oluşturma sihirbazını bulmak için üst araç çubuğundaki arama kutusunun nasıl kullanılacağını gösteren ekran görüntüsü.
Web Uygulaması + Veritabanı Oluştur sayfasında, formu aşağıdaki gibi doldurun.
  1. Kaynak grubuYeni oluştur'u seçin ve msdocs-laravel-mysql-tutorial adını kullanın.

  2. Bölge → Yakınınızda herhangi bir Azure bölgesi.

  3. Admsdocs-laravel-mysql-XYZ; burada XYZ rastgele üç karakterdir. Bu ad Azure genelinde benzersiz olmalıdır.

  4. Çalışma zamanı yığınıPHP 8.0.

    MySQL - Esnek Sunucu , veritabanı altyapısı olarak varsayılan olarak sizin için seçilir. MySQL için Azure Veritabanı, Azure'da en son topluluk sürümleriyle uyumlu, tam olarak yönetilen bir hizmet olarak MySQL veritabanıdır.

  5. Sizin için oluşturulan veritabanı adını (<app-name-database>) not edin. Buna daha sonra ihtiyacınız olacak.

  6. Gözden geçir ve oluştur’u seçin.

Doğrulama tamamlandıktan sonra Oluştur'u seçin.
Web Uygulaması + Veritabanı sihirbazında yeni bir uygulama ve veritabanını yapılandırmayı gösteren ekran görüntüsü.
Dağıtımın tamamlanması birkaç dakika sürer ve aşağıdaki kaynakları oluşturur:
  • Kaynak grubu → Oluşturulan tüm kaynaklar için kapsayıcı.
  • App Service planı → App Service için işlem kaynaklarını tanımlar. P1v2 katmanında bir Linux planı oluşturulur.
  • App Service → Uygulamanızı temsil eder ve App Service planında çalışır.
  • Sanal ağ → App Service uygulamasıyla tümleşiktir ve arka uç ağ trafiğini yalıttır.
  • MySQL için Azure Veritabanı - Esnek Sunucu → Yalnızca sanal ağdan erişilebilir. Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
  • Özel DNS bölge → Sanal ağdaki MySQL veritabanı sunucusunun DNS çözümlemesini etkinleştirir.
Dağıtım tamamlandıktan sonra Kaynağa git düğmesini seçin. Doğrudan App Service uygulamasına yönlendirilirsiniz.
Azure'da web uygulaması oluşturmak için doldurulacak formu gösteren ekran görüntüsü.

2 - Veritabanı bağlantısını ayarlama

Oluşturma sihirbazı, veritabanına bağlanmak için kullanabileceğiniz uygulama ayarlarını oluşturdu, ancak henüz kodunuz için kullanılabilecek bir biçimde değil. Bu adımda, uygulama ayarlarını uygulamanızın ihtiyaç duyduğu biçimde düzenler ve güncelleştirirsiniz.

Yönergeler Ekran görüntüsü
App Service sayfasının sol menüsünde Yapılandırma'yı seçin. App Service'te yapılandırma sayfasını açmayı gösteren ekran görüntüsü.
Yapılandırma sayfasının Uygulama ayarları sekmesinde, aşağıdaki ayarların her biri için Düzenle'yi seçin, Ad alanını yeni değerlerle güncelleştirin ve Tamam'ı seçin.
Geçerli Ad Yeni Ad
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
Otomatik oluşturulan bağlantı dizesi nasıl göreceğinizi gösteren ekran görüntüsü.
Yeni MYSQL_ATTR_SSL_CA bir veritabanı ayarı oluşturun:
  1. Yeni uygulama ayarı'nı seçin.

  2. Ad alanına MYSQL_ATTR_SSL_CA girin.

  3. Değer alanına /home/site/wwwroot/ssl/DigiCertGlobalRootG2.crt.pem girin.

    Bu uygulama ayarı, MySQL sunucusuna erişmek için ihtiyacınız olan TLS/SSL sertifikasının yolunu gösterir. Kolaylık sağlamak için örnek depo bu sertifikayı içerir.

  4. Tamam'ı seçin.

Uygulama ayarının nasıl oluşturulacağını gösteren ekran görüntüsü.
Aynı adımları izleyerek aşağıdaki ek uygulama ayarlarını oluşturun ve kaydet'i seçin.
  • APP_DEBUG: Değer olarak true kullanın. Bu bir Laravel hata ayıklama değişkenidir.

  • APP_KEY: base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= değer olarak kullanın. Bu bir Laravel şifreleme değişkenidir.

    Önemli

    Bu APP_KEY değer burada kolaylık sağlamak için kullanılır. Üretim senaryoları için, komut satırında php artisan key:generate --show kullanılarak özellikle dağıtımınız için oluşturulmalıdır.

Yapılandırma sayfasındaki tüm gerekli uygulama ayarlarını gösteren ekran görüntüsü.

3 - Örnek kodu dağıtma

Bu adımda GitHub Actions'ı kullanarak GitHub dağıtımını yapılandıracaksınız. App Service'e dağıtmanın birçok yolundan yalnızca biridir, aynı zamanda dağıtım sürecinizde sürekli tümleştirmeye sahip olmanın harika bir yoludur. Varsayılan olarak, GitHub deponuzun her git push örneği derleme ve dağıtma eylemini başlatacaktır. Doğrudan tarayıcıda Visual Studio Code ile kod tabanınızda bazı değişiklikler yapacak, ardından GitHub Actions'ın sizin için otomatik olarak dağıtılmasına izin vereceksiniz.

Yönergeler Ekran görüntüsü
Yeni bir tarayıcı penceresinde:
  1. GitHub hesabınıza giriş yapın.

  2. Şuraya gidin: https://github.com/Azure-Samples/laravel-tasks

  3. Çatal'ı seçin.

  4. Çatallama oluştur seçeneğini belirleyin.

Örnek GitHub deposunun nasıl çatallanacağını gösteren ekran görüntüsü.
GitHub sayfasında, . tuşuna basarak Visual Studio Code'u tarayıcıda açın. GitHub'da Visual Studio Code tarayıcı deneyimini açmayı gösteren ekran görüntüsü.
Tarayıcıdaki Visual Studio Code'da, Gezgin'de config/database.php dosyasını açın. mysql bağlantısında, MySQL bağlantısı için daha önce oluşturduğunuz uygulama ayarlarının (DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, MYSQL_ATTR_SSL_CA) zaten kullanıldığını görün. Tarayıcıda Visual Studio Code'un ve açık bir dosyanın gösterildiği ekran görüntüsü.
App Service sayfasına geri dönün, soldaki menüde Dağıtım Merkezi'ni seçin. App Service'te dağıtım merkezini açmayı gösteren ekran görüntüsü.
Dağıtım Merkezi sayfasında:
  1. Kaynak bölümünde GitHub'ı seçin. GitHub Actions varsayılan olarak derleme sağlayıcısı olarak seçilir.

  2. GitHub hesabınızda oturum açın ve Azure'ı yetkilendirme istemini izleyin.

  3. Kuruluş'ta hesabınızı seçin.

  4. Depo'da laravel-tasks'ı seçin.

  5. Dal içinde main'i seçin.

  6. Üstteki menüde Kaydet'i seçin.

App Service, .github/workflows dizindeki seçili GitHub deposuna bir iş akışı dosyası işler.
GitHub Actions kullanarak CI/CD'yi yapılandırmayı gösteren ekran görüntüsü.
Dağıtım Merkezi sayfasında:
  1. Günlükler’i seçin. Bir dağıtım çalıştırması zaten başlatılmış.

  2. Dağıtım çalıştırmasının günlük öğesinde Derleme/Dağıtım Günlükleri'ni seçin.

    GitHub deponuza yönlendirilirsiniz ve GitHub eyleminin çalıştığını görürsünüz. İş akışı dosyası derleme ve dağıtma olarak iki ayrı aşama tanımlar.

Dağıtım merkezinde dağıtım günlüklerini açmayı gösteren ekran görüntüsü.
Kodunuzda değişiklik yapmak için tarayıcıda Visual Studio Code'a gidin:
  1. Kaynak Denetimi uzantısını seçin.

  2. Değiştirilen dosyanın yanında, örneğin database.php, değişikliklerinizi hazırlama alanına almak için + öğesini seçin.

  3. Metin kutusuna bir işleme iletisi yazın, örneğin add certificate.

  4. İşlemek ve GitHub'a göndermek için onay işaretini seçin.

Dağıtım Merkezi sayfasına geri dönerseniz, yeni bir çalışma başlatıldığı için yeni bir günlük girdisi görürsünüz. Çalıştırma işleminin tamamlanmasını bekleyin. Yaklaşık 15 dakika sürer.

İpucu

GitHub eylemi, .github/workflow içindeki GitHub deponuzdaki dosya tarafından tanımlanır. Dosyayı özelleştirerek daha hızlı hale getirebilirsiniz.

Visual Studio Code tarayıcı deneyiminde değişikliklerinizi işlemeyi gösteren ekran görüntüsü.

4 - Veritabanı şeması oluşturma

Oluşturma sihirbazı, MySQL için Azure Veritabanı Esnek Sunucu örneğini özel bir uç noktanın arkasına yerleştirir, bu nedenle yalnızca sanal ağdan erişilebilir. App Service uygulaması zaten sanal ağ ile tümleşik olduğundan veritabanı geçişlerini veritabanınızla çalıştırmanın en kolay yolu doğrudan App Service kapsayıcısının içindendir.

Yönergeler Ekran görüntüsü
App Service sayfasında:
  1. Soldaki menüden SSH'yi seçin.

  2. Git'i seçin.

Tarayıcıda App Service kapsayıcınızla bir SSH oturumu başlatılır. İsterseniz bunun yerine doğrudan https://<app-name>.scm.azurewebsites.net/webssh/host adresine gidebilirsiniz.
Azure portalından uygulamanızın SSH kabuğunu açmayı gösteren ekran görüntüsü.
SSH terminalinde:
  1. Uygulama kodunuzun köküne CD:

    cd /home/site/wwwroot
    
  2. Uygulama kökünden veritabanı geçişlerini çalıştırın.

    php artisan migrate --force
    

    Not

    Yalnızca /home içindeki dosyalarda yapılan değişiklikler uygulama yeniden başlatıldıktan sonra da kalıcı olabilir. dışındaki /home değişiklikler kalıcı olmaz.

SSH kabuğunda çalıştırılacak komutları ve bunların çıkışını gösteren ekran görüntüsü.

5 - Site kökünü değiştirme

Laravel uygulama yaşam döngüsü bunun yerine /public dizininde başlar. App Service için varsayılan PHP 8.0 kapsayıcısı, uygulamanın kök dizininde başlayan Nginx'i kullanır. Site kökünü değiştirmek için PHP 8.0 kapsayıcısında (/etc/nginx/sites-available/default) Nginx yapılandırma dosyasını değiştirmeniz gerekir. Kolaylık sağlamak için örnek depo varsayılan adlı özel bir yapılandırma dosyası içerir. Daha önce de belirtildiği gibi, bir uygulama yeniden başlatıldıktan sonra değişiklikleriniz kaybolacağından bu dosyayı SSH kabuğunu kullanarak değiştirmek istemezsiniz.

Yönergeler Ekran görüntüsü
App Service sayfasında:
  1. Soldaki menüden Yapılandırma'yı seçin.

  2. Genel ayarlar sekmesini seçin.

App Service'in yapılandırma sayfasında genel ayarlar sekmesini açmayı gösteren ekran görüntüsü.
Genel ayarlar sekmesinde:
  1. Başlangıç Komutu kutusuna şu komutu girin: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.

    PHP 8.0 kapsayıcısında Nginx yapılandırma dosyasının yerini alır ve Nginx'i yeniden başlatır. Bu yapılandırma, kapsayıcı her başlatıldığında bu değişikliğin kapsayıcıya uygulanmasını sağlar.

  2. Kaydet'i seçin.

App Service'te başlangıç komutunu yapılandırmayı gösteren ekran görüntüsü.

6 - Uygulamaya göz atın

Yönergeler Ekran görüntüsü
App Service sayfasında:
  1. Sol menüden Genel Bakış'ı seçin.

  2. Uygulamanızın URL'sini seçin.

    Ayrıca doğrudan https://<app-name>.azurewebsites.net adresine de gidebilirsiniz.

Azure portalından App Service başlatmayı gösteren ekran görüntüsü.
Listeye birkaç görev ekleyin. Tebrikler, Azure Uygulaması Hizmeti'nde veri temelli bir PHP uygulaması çalıştırıyorsunuz. App Service'te çalışan Laravel uygulamasının ekran görüntüsü.

7 - Tanılama günlüklerini akışla aktarma

Yönergeler Ekran görüntüsü
App Service sayfasında:
  1. Sol menüden App Service günlükleri'ni seçin.

  2. Uygulama günlüğü altında, Dosya Sistemi'ni seçin.

Azure portalında App Service'te yerel günlükleri etkinleştirmeyi gösteren ekran görüntüsü.
Sol menüden Günlük akışı seçeneğini belirleyin. Uygulamanızın günlüklerini, platform günlükleri ile kapsayıcı içindeki günlükler dahil, görürsünüz. Azure portalında günlük akışını görüntülemeyi gösteren ekran görüntüsü.

Kaynakları temizleme

İşiniz bittiğinde, kaynak grubunu silerek Azure aboneliğinizdeki tüm kaynakları silebilirsiniz.

Yönergeler Ekran görüntüsü
Azure portalının üst kısmındaki arama çubuğunda:
  1. Kaynak grubu adını girin.

  2. Kaynak grubunu seçin.

Azure portalında bir kaynak grubunu arama ve bu gruba gitme adımlarını gösteren ekran görüntüsü.
Kaynak grubu sayfasında Kaynak grubunu sil'i seçin. Azure portalında Kaynak Grubunu Sil düğmesinin konumunu gösteren ekran görüntüsü.
  1. Silme işleminizi onaylamak için kaynak grubu adını girin.

  2. Sil'i seçin.

Azure portalında kaynak grubunu silmeye yönelik onay iletişim kutusunun ekran görüntüsü.

Sık sorulan sorular

Bu kurulumun maliyeti ne kadardır?

Kaynak oluşturma ücretlendirmesi aşağıdaki gibidir:

Sanal ağın arkasında güvenliği sağlanan MySQL için Azure Veritabanı Esnek Sunucu veritabanına nasıl bağlanabilirim?

MySQL için Azure Veritabanı Esnek Sunucu veritabanına bağlanmak için, kullanabileceğiniz araçlara ve ortamlara göre çeşitli yöntemler kullanabilirsiniz:

  • Komut satırı aracı erişimi:
    • mysql Temel erişim için uygulamanın SSH terminalinden komutunu kullanın.
  • Masaüstü araçları (örneğin, MySQL Workbench):
    • Azure CLI ile SSH tüneli kullanma:
      • Azure CLI kullanarak web uygulamasında bir SSH oturumu oluşturun.
      • Trafiği MySQL'e tünel olarak eklemek için SSH oturumunu kullanın.
    • Siteden siteye VPN'yi veya Azure VM'yi kullanma:
      • Makineniz sanal ağın parçası olmalıdır.
      • Aşağıdakileri kullanmayı göz önünde bulundurun:
  • Azure Cloud Shell tümleştirmesi:

Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?

App Service'ten otomatik olarak oluşturulan iş akışı dosyasını örnek olarak alın; her git push birinde yeni bir derleme ve dağıtım çalıştırması başlar. GitHub deposunun yerel bir kopyasından, istenen güncelleştirmelerin GitHub'a göndermesini sağlarsınız. Örneğin:

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

GitHub Actions dağıtımı neden bu kadar yavaş?

App Service tarafından otomatik olarak oluşturulan iş akışı dosyası, önce derleme sonra dağıtım yapan iki işli bir çalıştırma tanımlar. Her iş kendi temiz ortamında çalıştığından, iş akışı dosyası deploy işinin build işindeki dosyalara erişebilmesini sağlar:

İki işten oluşan süreçte harcanan sürenin çoğu, artefaktları yükleme ve indirme işlemlerine ayrılır. İsterseniz, iki işi tek bir işte birleştirerek iş akışı dosyasını basitleştirebilir ve bu sayede karşıya yükleme ve indirme adımları gereksinimi ortadan kalkar.

Özet

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

  • Azure'da varsayılan olarak güvenli bir PHP ve MySQL için Azure Veritabanı Esnek Sunucu uygulaması oluşturma
  • Uygulama ayarlarını kullanarak MySQL için Azure Veritabanı Esnek Sunucusu'na bağlantı gizli bilgilerini yapılandır
  • GitHub Actions kullanarak uygulama kodunu dağıtma
  • Uygulamayı güncelleştirme ve yeniden dağıtma
  • Veritabanı geçişlerini güvenli bir şekilde çalıştırma
  • Azure’daki tanılama günlüklerinin akışını sağlama
  • Uygulamayı Azure portalında yönetme