Öğretici: Azure Uygulaması Hizmetine PHP, MySQL ve Redis uygulaması dağıtma

Bu öğreticide, MySQL veritabanına (MySQL için Azure Veritabanı esnek sunucu kullanılarak) bağlı Azure Uygulaması Hizmetinde güvenli bir PHP uygulamasının nasıl oluşturulacağı gösterilmektedir. Ayrıca uygulamanızda önbelleğe alma kodunu etkinleştirmek için bir Redis için Azure Cache dağıtacaksınız. Azure Uygulaması Hizmeti, Windows veya Linux'ta kolayca uygulama dağıtabilen yüksek oranda ölçeklenebilir, kendi kendine düzeltme eki uygulamalı bir web barındırma hizmetidir. İşiniz bittiğinde, Linux'ta Azure Uygulaması Hizmeti üzerinde çalışan bir Laravel uygulamasına sahip olursunuz.

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

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Örnek uygulama

Bu öğreticiyi takip etmek için depodan örnek Laravel uygulamasını 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'de, yerel MySQL veritabanınızdaki ayarları kullanarak veritabanı ayarlarını (, ve DB_PASSWORDgibiDB_DATABASEDB_USERNAME) yapılandırın. Bu örneği çalıştırmak için yerel bir MySQL sunucusuna 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 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ı yapılandırması oluşturur. Oluşturma işlemi için şunları belirteceksiniz:

  • Web uygulamasının Adı. Web uygulamanızın DNS adının bir parçası olarak biçiminde kullanılan addır https://<app-name>.azurewebsites.net.
  • 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.

1. Adım: 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 sihirbazına da gidebilirsiniz.

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

2. Adım:Web Uygulaması + Veritabanı Oluştur sayfasında, formu aşağıdaki gibi doldurun.

  1. Kaynak Grubu → Yeni 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. msdocs-laravel-mysql-XYZ →, burada XYZ herhangi bir rastgele karakterdir. Bu ad Azure genelinde benzersiz olmalıdır.
  4. PHP 8.2çalışma zamanı yığını.
  5. Redis için Azure Cache eklensin mi? → Evet.
  6. Barındırma planıBasic. Hazır olduğunuzda, daha sonra bir üretim fiyatlandırma katmanına ölçek artırabilirsiniz.
  7. 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.
  8. Gözden geçir ve oluştur’u seçin.
  9. Doğrulama tamamlandıktan sonra Oluştur'u seçin.

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

3. Adım: Dağıtımın tamamlanması birkaç dakika sürer. Dağıtım tamamlandıktan sonra Kaynağa git düğmesini seçin. Doğrudan App Service uygulamasına yönlendirilirsiniz, ancak aşağıdaki kaynaklar oluşturulur:

  • Kaynak grubu → Oluşturulan tüm kaynaklar için kapsayıcı.
  • App Service planı → App Service için işlem kaynaklarını tanımlar. Temel katmanda 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.
  • Özel uç noktalar , veritabanı sunucusu ve sanal ağdaki Redis önbelleği için Erişim uç noktaları →.
  • ağ arabirimleri → Özel IP adreslerini temsil eder ve özel uç noktaların her biri için bir tane olur.
  • MySQL için Azure Veritabanı esnek sunucu → Yalnızca özel uç noktasının arkasından erişilebilir. Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
  • Redis için Azure Cache → Yalnızca özel uç noktasının arkasından erişilebilir.
  • Özel DNS bölgeleri → Sanal ağda veritabanı sunucusunun ve Redis önbelleğinin DNS çözümlemesini etkinleştirin.

A screenshot showing the deployment process completed.

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

1. Adım: App Service sayfasının sol menüsünde Yapılandırma'yı seçin.

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

2. Adım:

  1. AZURE_MYSQL_ ile başlayan uygulama ayarlarını bulun. Oluşturma sihirbazı tarafından yeni MySQL veritabanından oluşturuldular.
  2. Ayrıca, AZURE_REDIS_ ile başlayan uygulama ayarlarını bulun. Oluşturma sihirbazı tarafından yeni Redis önbelleğinden oluşturuldular. Uygulamanızı ayarlamak için ihtiyacınız olan tek şey bu addır.
  3. İsterseniz, her ayarın sağındaki Düzenle düğmesini seçip değerini görebilir veya kopyalayabilirsiniz. Daha sonra uygulama kodunuzu bu ayarları kullanacak şekilde değiştireceksiniz.

A screenshot showing how to create an app setting.

3. Adım:Yapılandırma sayfasının Uygulama ayarları sekmesinde bir CACHE_DRIVER ayar oluşturun:

  1. Yeni uygulama ayarı'nı seçin.
  2. Ad alanına CACHE_DRIVER girin.
  3. Değer alanına redis girin.
  4. Tamam seçeneğini işaretleyin. CACHE_DRIVER zaten Laravel uygulama kodunda kullanılır. Bu ayar, Laravel'e önbelleği olarak Redis'i kullanmasını söyler.

A screenshot showing how to see the autogenerated connection string.

4. Adım: 3. Adım'da aynı adımları kullanarak aşağıdaki uygulama ayarlarını oluşturun:

  • MYSQL_ATTR_SSL_CA: Değer olarak /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem kullanın. 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 depoya dahildir.
  • LOG_CHANNEL: Değer olarak stderr kullanın. Bu ayar Laravel'e günlükleri stderr'a yöneltmesini ve bu sayede App Service günlüklerinin kullanımına sunulmasını sağlar.
  • APP_DEBUG: Değer olarak true kullanın. Hata ayıklama modu sayfalarını etkinleştiren bir Laravel hata ayıklama değişkenidir .
  • APP_KEY: Değer olarak base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= kullanın. Bu bir Laravel şifreleme değişkenidir.
  1. Üstteki menü çubuğunda Kaydet'i seçin.
  2. İstendiğinde Devam'ı seçin.

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

Önemli

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

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şlatıyor. 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.

1. Adım: 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. Çatal oluştur'u seçin.

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

2. Adım: GitHub sayfasında, tuşa basarak tarayıcıda Visual Studio Code'ı . açın.

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

3. Adım: Tarayıcıda Visual Studio Code'da gezginde config/database.php dosyasını açın. mysql bölümünü bulun ve aşağıdaki değişiklikleri yapın:

  1. DB_HOST öğesini AZURE_MYSQL_HOST ile değiştirin.
  2. DB_DATABASE öğesini AZURE_MYSQL_DBNAME ile değiştirin.
  3. DB_USERNAME öğesini AZURE_MYSQL_USERNAME ile değiştirin.
  4. DB_PASSWORD öğesini AZURE_MYSQL_PASSWORD ile değiştirin.
  5. DB_PORT öğesini AZURE_MYSQL_PORT ile değiştirin. Bu AZURE_MYSQL_ ayarların oluşturma sihirbazı tarafından sizin için oluşturulduğunu unutmayın.

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

4. Adım:config/database.php dosyasında Redis cache bölümüne kaydırın ve aşağıdaki değişiklikleri yapın:

  1. REDIS_HOST öğesini AZURE_REDIS_HOST ile değiştirin.
  2. REDIS_PASSWORD öğesini AZURE_REDIS_PASSWORD ile değiştirin.
  3. REDIS_PORT öğesini AZURE_REDIS_PORT ile değiştirin.
  4. REDIS_CACHE_DB öğesini AZURE_REDIS_DATABASE ile değiştirin.
  5. Aynı bölümde ile 'scheme' => 'tls',bir satır ekleyin. Bu yapılandırma, Laravel'e Redis'e bağlanmak için şifreleme kullanmasını söyler. Bu AZURE_REDIS_ ayarların oluşturma sihirbazı tarafından sizin için oluşturulduğunu unutmayın.

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

5. Adım:

  1. Kaynak Denetimi uzantısını seçin.
  2. Metin kutusuna gibi Configure DB & Redis variablesbir işleme iletisi yazın.
  3. İşleme ve Gönderme'yi seçin.

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

6. Adım: App Service sayfasının sol menüsünde Dağıtım Merkezi'ni seçin.

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

7. Adım: 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-task öğesini seçin.
  5. Dal'da ana'yı seçin.
  6. Üstteki menüde Kaydet'i seçin. App Service, .github/workflows dizinde seçilen GitHub deposuna bir iş akışı dosyası işler.

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

8. Adım: Dağıtım Merkezi sayfasında:

  1. Günlükler’i seçin. Dağıtım çalıştırması zaten başlatıldı.
  2. Dağıtım çalıştırmasının günlük öğesinde Günlükleri Derle/Dağıt'ı seçin.

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

9. Adım: 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. GitHub çalıştırmasının Tamamlandı durumunu göstermesini bekleyin. Yaklaşık 15 dakika sürer.

A screenshot showing a GitHub run in progress.

4 - Veritabanı şeması oluşturma

Oluşturma sihirbazı, MySQL veritabanı sunucusunu ö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.

1. Adım: App Service sayfasında, soldaki menüdeN SSH'yi seçin.

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

2. Adım: SSH terminalinde:

  1. cd /home/site/wwwroot'i çalıştırın. Dağıtılan tüm dosyalarınız aşağıdadır.
  2. php artisan migrate --force'i çalıştırın. Başarılı olursa, App Service MySQL veritabanına başarıyla bağlanıyor. Yalnızca içindeki dosyalarda /home yapılan değişiklikler uygulama yeniden başlatmalarının ötesinde kalıcı olabilir. dışındaki /home değişiklikler kalıcı olmaz.

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

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 kapsayıcısı, uygulamanın kök dizininde başlayan Nginx'i kullanır. Site kökünü değiştirmek için PHP 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 belirtildiği gibi, değişiklik dışında /home olduğundan ve bir uygulama yeniden başlatıldıktan sonra kaybolacağından bu dosyayı SSH kabuğunu kullanarak değiştirmek istemezsiniz.

1. Adım:

  1. Soldaki menüden Yapılandırma'yı seçin.
  2. Genel ayarlar sekmesini seçin.

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

2. Adım: Genel ayarlar sekmesinde:

  1. Başlangıç Komutu kutusuna şu komutu girin: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
  2. Kaydet'i seçin. komutu PHP kapsayıcısındaki 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 kapsayıcıda aynı değişikliğin yapılmasını sağlar.

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

6 - Uygulamaya göz atın

1. Adım: App Service sayfasında:

  1. Sol menüden Genel Bakış'ı seçin.
  2. Uygulamanızın URL'sini seçin. Doğrudan adresine https://<app-name>.azurewebsites.netde gidebilirsiniz.

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

2. Adım: Listeye birkaç görev ekleyin. Tebrikler, Azure Uygulaması Hizmeti'nde güvenli bir veri temelli PHP uygulaması çalıştırıyorsunuz.

A screenshot of the Laravel app running in App Service.

Bahşiş

Örnek uygulama, edilgen önbellek düzenini uygular. Veri değişiklikleri yaptıktan sonra sayfayı yeniden yüklerken, verileri veritabanı yerine önbellekten yüklediğinden web sayfasındaki Yanıt süresi çok daha hızlı bir zaman gösterir.

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

Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsola kaydedilen tüm iletileri yakalar. Örnek uygulama, bu özelliği göstermek için uç noktalarının her birinde konsol günlük iletilerinin çıkışını alır. Varsayılan olarak, Laravel'in günlük işlevi (örneğin, Log::info()) yerel bir dosyaya çıkış oluşturur. Önceki uygulama ayarlarınız LOG_CHANNEL , günlük girişlerine App Service günlük akışından erişilebilir hale getirir.

1. Adım: App Service sayfasında:

  1. Sol menüden App Service günlükleri'ni seçin.
  2. Uygulama günlüğü'nin altında Dosya Sistemi'ne tıklayın.

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

2. Adım: Soldaki menüden Günlük akışı'nı seçin. Kapsayıcının içinden platform günlükleri ve günlükler de dahil olmak üzere uygulamanızın günlüklerini görürsünüz.

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

Kaynakları temizleme

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

1. Adım: Azure portalının üst kısmındaki arama çubuğunda:

  1. Kaynak grubu adını girin.
  2. Kaynak grubunu seçin.

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

2. Adım: Kaynak grubu sayfasında Kaynak grubunu sil'i seçin.

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

3. Adım:

  1. Silme işleminizi onaylamak için kaynak grubu adını girin.
  2. Sil'i seçin.

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

Sık sorulan sorular

Bu kurulumun maliyeti ne kadardır?

Kaynak oluşturma fiyatlandırması aşağıdaki gibidir:

  • App Service planı Temel katmanda oluşturulur ve ölçeği artırılabilir veya azaltılabilir. Bkz. App Service fiyatlandırması.
  • MySQL esnek sunucusu B1ms katmanında oluşturulur ve ölçeği artırılabilir veya azaltılabilir. Ücretsiz Azure hesabıyla B1ms katmanı, aylık sınırlara kadar 12 ay boyunca ücretsizdir. Bkz. MySQL için Azure Veritabanı fiyatlandırma.
  • Redis için Azure Cache temel katmanda en düşük önbellek boyutuyla oluşturulur. Bu katmanla ilişkili küçük bir maliyet vardır. Daha yüksek kullanılabilirlik, kümeleme ve diğer özellikler için ölçeğini daha yüksek performans katmanlarına artırabilirsiniz. Bkz. Redis için Azure Cache fiyatlandırma.
  • Eşleme gibi ek işlevler yapılandırmadığınız sürece sanal ağ ücret ödemez. Bkz. Azure Sanal Ağ fiyatlandırması.
  • Özel DNS bölgesi küçük bir ücrete tabi. Bkz. Azure DNS fiyatlandırması.

Nasıl yaparım? diğer araçlarla sanal ağın arkasında güvenliği sağlanan MySQL veritabanına bağlanın?

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'ten otomatik olarak oluşturulan iş akışı dosyası, derleme ve sonra dağıtma, iki iş çalıştırmasını tanımlar. Her iş kendi temiz ortamında çalıştığından, iş akışı dosyası işin işten dosyalara erişmesini build sağlardeploy:

  • İşin sonunda build dosyaları yapıt olarak karşıya yükleyin.
  • İşin başında deploy yapıtları indirin.

İki işli işlem tarafından geçen sürenin çoğu yapıtları karşıya yüklemek ve indirmek için harcanmıştı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.

Sonraki adımlar

Özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğrenmek için sonraki öğreticiye ilerleyin.

Alternatif olarak, diğer kaynaklara da göz atın: