Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide, Azure App Service'te MySQL için Azure Veritabanı Esnek Sunucusu'nu kullanarak MySQL veritabanına bağlanan 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 Azure Redis önbelleği dağıtırsınız. Azure Uygulama Hizmeti, Windows veya Linux'ta kolayca uygulamaları dağıtabilecek yüksek oranda ölçeklenebilir, kendi kendine yama yapan bir web barındırma hizmetidir. İşiniz bittiğinde, Linux üzerinde Azure App Service üzerinde çalışan bir Laravel uygulamanız vardır.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Azure hesabınız yoksa ücretsiz olarak bir hesap oluşturabilirsiniz.
- GitHub hesabı. Ayrıca ücretsiz olarak da alabilirsiniz.
- Laravel geliştirme ile PHP bilgisi.
- (İsteğe bağlı) GitHub Copilot'ı denemek için bir GitHub Copilot hesabı gerekir. 30 günlük ücretsiz deneme sürümü mevcuttur.
Örneği çalıştırma
Örnek bir veri temelli uygulamayı başlangıç noktası olarak ayarlayın. Örnek deposu bir dev container yapılandırması içerir. Geliştirme kapsayıcısı veritabanı, önbellek ve örnek uygulamanın ihtiyaç duyduğu tüm ortam değişkenleri dahil olmak üzere bir uygulama geliştirmek için ihtiyacınız olan her şeye sahiptir. Geliştirme kapsayıcısı bir GitHub kod alanında çalıştırılabilir; bu da örneği web tarayıcısı olan herhangi bir bilgisayarda çalıştırabileceğiniz anlamına gelir.
1. Adım: Yeni bir tarayıcı penceresinde:
- GitHub hesabınıza giriş yapın.
- Şuraya gidin: https://github.com/Azure-Samples/laravel-tasks/fork
- 'Çatal oluştur' seçin.
2. Adım: GitHub fork'unda:
3. Adım: Codespace terminalinde:
-
composer install'i çalıştırın. -
php artisan migrateile veritabanı geçişlerini çalıştırın. - Uyugulamayı
php artisan serveile çalıştırın. - Bildirimi
Your application running on port 80 is available.gördüğünüzde Tarayıcıda Aç'ı seçin. Örnek uygulamayı yeni bir tarayıcı sekmesinde görmeniz gerekir. Uygulamayı durdurmak için Ctrl + C yazın.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
App Service, veritabanı ve önbellek oluşturma
Bu adımda Azure kaynaklarını oluşturursunuz. Bu öğreticide kullanılan adımlar App Service, MySQL için Azure Veritabanı ve Redis için Azure Cache gibi varsayılan olarak güvenli bir kaynak kümesi oluşturur. Oluşturma işlemi için şunları belirtirsiniz:
- Web uygulamasının Adı. Uygulamanızın DNS adının bir parçası olarak kullanılır.
- Uygulamanın dünyada fiziksel olarak çalıştırılacağı Bölge. Ayrıca uygulamanızın DNS adının bir parçasıdır.
- Uygulamanın Çalışma Zamanı yığını . Burası, uygulamanız için kullanılacak PHP sürümünü seçtiğiniz yerdir.
- Uygulama için Barındırma planı . Bu, uygulamanız için özellik kümesini ve ölçeklendirme kapasitesini içeren fiyatlandırma katmanıdır.
- Uygulamanın Kaynak Grubu . Kaynak grubu, uygulama için gereken tüm Azure kaynaklarını bir mantıksal kapsayıcıda gruplandırmanıza olanak tanır.
Azure portalınaoturum açın. Azure App Service kaynaklarınızı oluşturmak için bu adımları izleyin.
1. Adım: Azure portalında:
- Üstteki arama çubuğuna app service yazın.
- Hizmetler başlığı altında App Service etiketli öğeyi seçin.
- Web Uygulaması Oluştur'u> seçin. Doğrudan Web Uygulaması Oluştur'a da gidebilirsiniz.
2. Adım:Web Uygulaması Oluştur sayfasında formu aşağıdaki gibi doldurun.
- Ad: msdocs-laravel-mysql. Azure portalı msdocs-laravel-mysql_group adlı bir kaynak grubu oluşturur.
- Çalışma zamanı yığını: PHP 8.4.
- İşletim sistemi: Linux.
- Bölge: Size yakın herhangi bir Azure bölgesi.
- Linux Planı: Yeni oluşturun ve msdocs-laravel-mysql adını kullanın.
- Fiyatlandırma planı: Temel. Hazır olduğunuzda ölçeği farklı bir fiyatlandırma katmanına artırabilirsiniz.
3. Adım:
- Veritabanı sekmesine gitmek için İleri'yi seçin.
- Veritabanı Oluştur'u seçin.
- Altyapı'daMySQL - Esnek Sunucu'ya tıklayın.
- Redis için Azure Cache oluştur'u seçin.
- Ad alanına (Önbellek'in altında), önbellek için bir ad girin.
- SKU'daTemel'i seçin.
4. Adım:
- Dağıtım sekmesine geçmek için İleri'yi seçin.
- Sürekli dağıtımı etkinleştirin.
- Kuruluş'ta GitHub diğer adınızı seçin.
- Depo'da laravel-tasks öğesini seçin.
- Branch'da main'i seçin.
- Temel kimlik doğrulamasının devre dışı olduğundan emin olun.
- Gözden geçir ve oluştur’u seçin.
- Doğrulama tamamlandıktan sonra Oluştur'u seçin.
5. Adım: Dağıtımın tamamlanması birkaç dakika sürer. Web uygulamasını görmek için Kaynağa git'i seçin. Dağıtım 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. 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ştirilmiş ve arka uç ağ trafiğini yalıtıyor.
- Özel uç noktalar: Veritabanı sunucusu ve sanal ağdaki Redis önbelleği için erişim uç noktaları.
- Ağ arabirimleri: Özel uç noktaların her biri için bir tane olan özel IP adreslerini temsil eder.
- MySQL için Azure Veritabanı Esnek Sunucusu: 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.
Güvenli bağlantı sırları
Dağıtım, bağlantı değişkenlerini sizin için zaten uygulama ayarları olarak oluşturdu. Güvenlik açısından en iyi yöntem, gizlilikleri App Service tamamen dışında tutmaktır. Gizli verilerinizi bir anahtar kasasına taşıyın ve Hizmet Bağlayıcıları yardımıyla uygulama ayarınızı Key Vault referansları olarak değiştirin.
1. Adım: Mevcut bağlantı dizesini alın.
- App Service sayfasının sol menüsünde Ayarlar>Ortam değişkenleri'ni seçin.
- Bağlantı dizeleri seçin.
- AZURE_MYSQL_CONNECTIONSTRING'ı seçin.
- Uygulama ayarı ekle/düzenle bölümünde, Değer alanında, daha sonra kullanmak üzere kullanıcı adını ve parolayı kopyalayın. Bağlantı dizesi, özel uç noktaların arkasında güvenliği sağlanan MySQL veritabanına bağlanmanızı sağlar. Gizli bilgiler doğrudan App Service uygulamasına kaydedilir ve bu şekilde en iyisi değildir. Bu yapılandırmayı değiştireceksiniz.
2. Adım: Gizli bilgilerin güvenli yönetimi için bir anahtar kasası oluşturun.
- Üstteki arama çubuğuna "key vault" yazın, ardından Pazaryeri>Anahtar Kasası'nı seçin.
- Kaynak Grubu'ndamsdocs-laravel-mysql_group öğesini seçin.
- Anahtar kasası adı alanına yalnızca harf ve sayılardan oluşan bir ad girin.
- Bölge'de, kaynak grubuyla aynı konumu seçin.
Adım 3: Anahtar kasayı Özel Uç Nokta ile güvenceye alın.
- Ağ Ayarları sekmesini seçin.
- Genel erişimi etkinleştir'in seçimini kaldırın.
- Özel uç nokta oluştur'u seçin.
- Kaynak Grubu'ndamsdocs-laravel-mysql_group öğesini seçin.
- İletişim kutusundaki Konum'da App Service uygulamanızla aynı konumu seçin.
- Ad alanına msdocs-laravel-mysqlVaultEndpoint girin.
- Sanal ağ'damsdocs-laravel-mysql_group grubunda sanal ağı seçin.
- Alt ağ'da kullanılabilir uyumlu alt ağı seçin.
- Tamam'ı seçin.
- Gözden Geçir + oluştur’u ve sonra da Oluştur’u seçin. Anahtar kasası dağıtımının tamamlanmasını bekleyin. Dağıtımınız tamamlandı ifadesini görmeniz gerekir.
4. Adım: MySQL bağlayıcısını oluşturun.
- Üst arama çubuğuna msdocs-laravel-mysql yazın ve ardından msdocs-laravel-mysql adlı App Service kaynağını seçin.
- App Service sayfasındaki sol menüde Ayarlar>Hizmet Bağlayıcısı'nı seçin.
- Oluştur'i seçin.
- Hizmet türüiçin MySQL esnek sunucusu için DB'yi seçin.
- MySQL esnek sunucusu için sunucunuzu seçin; örneğin, msdocs-laravel-mysql-server.
- MySQL veritabanı için veritabanınızı seçin; örneğin, msdocs-laravel-mysql-database.
5. Adım: MySQL bağlayıcısı için kimlik doğrulamasını yapılandırın.
- Kimlik Doğrulaması sekmesini seçin.
- Bağlantı dizesi'ni seçin.
- Parola'da, daha önce kopyaladığınız parolayı yapıştırın.
- Key Vault'ta Gizli Anahtarı Depola'yı Seçin.
- Key Vault Bağlantısı altında, Yeni oluştur'u seçin. Düzenle iletişim kutusunun üzerinde Bağlantı oluştur iletişim kutusu açılır.
6. Adım: Key Vault bağlantısını kurun.
- Key Vault bağlantısı için bağlantı oluştur iletişim kutusunda, Key Vault'ta daha önce oluşturduğunuz anahtar kasasını seçin.
- Gözden geçir + Oluştur’u seçin.
- Doğrulama tamamlandığında Oluştur'u seçin.
7. Adım: MySQL bağlayıcısı ayarlarını sonlandırın.
- MySQL bağlayıcısı iletişim kutusuna geri döndüniz. Kimlik Doğrulaması sekmesinde anahtar kasası bağlayıcısının oluşturulmasını bekleyin. Tamamlandığında Key Vault Bağlantı otomatik olarak seçilir.
- Gözden geçir + Oluştur’u seçin.
- Oluştur'i seçin. Güncelleştirme başarılı bildirimi görünene kadar bekleyin.
8. Adım: Redis bağlayıcısını Key Vault gizli dizilerini kullanacak şekilde yapılandırın.
- Hizmet Bağlayıcıları sayfasında, Redis için Cache bağlayıcısının yanındaki onay kutusunu ve ardından Düzenle'yi seçin.
- Kimlik Doğrulaması sekmesini seçin.
- Key Vault'ta Gizli Anahtarı Depola'yı Seçin.
- Key Vault Bağlantısı'nın altında, oluşturduğunuz anahtar kasasını seçin.
- İleri: Ağ'ı seçin.
- Hedef hizmete erişimi etkinleştirmek için Güvenlik duvarı kurallarını yapılandır'ı seçin. Uygulama oluşturma sihirbazı sql veritabanının güvenliğini özel bir uç noktayla zaten sağladı.
- Kaydet'i seçin. Güncelleştirme başarılı bildirimi görünene kadar bekleyin.
9. Adım: Key Vault tümleştirmesini doğrulayın.
- Sol menüden Ayarlar>Ortam değişkenleri'ni yeniden seçin.
-
AZURE_MYSQL_PASSWORD yanında Değeri göster'i seçin. Değeri
@Microsoft.KeyVault(...)olmalıdır, bu bir anahtar kasası referansı olduğu anlamına gelir çünkü gizli bilgi artık anahtar kasasında yönetilmektedir. - Redis bağlantı dizesini doğrulamak için Değeri Göster seçeneğini AZURE_REDIS_CONNECTIONSTRING'in yanında seçin.
Özetlemek gerekirse, bağlantı sırlarınızın güvenliğini koruma işlemi şunları içerir:
- App Service uygulamasının ortam değişkenlerinden bağlantı gizli bilgilerini alma.
- Anahtar kasası oluşturma.
- Sistem tarafından atanan yönetilen kimlikle Key Vault bağlantısı oluşturma.
- Anahtar kasasında gizli bilgileri depolamak için hizmet bağlayıcılarını güncelleme.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
Laravel değişkenlerini yapılandırma
1. Adım: Uygulama ayarı olarak oluşturun CACHE_DRIVER .
- Web uygulamanızda Ayarlar>Ortam değişkenleri'ne tıklayın.
- Uygulama ayarları sekmesinde Ekle'yi seçin.
- Ad kısmına CACHE_DRIVER girin.
- Değer alanına redis girin.
- Uygula'yı, sonra yeniden Uygula'yı ve ardından Onayla'yı seçin.
2. Adım:1. Adımda aynı adımları kullanarak aşağıdaki uygulama ayarlarını oluşturun. bitirdikten sonra Uygulama ayarlarınızı güncelleştirmek için Uygula'yı seçin.
- 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. Örnek depoya eklenir.
- LOG_CHANNEL: Değer olarak stderr kullanın. Bu ayar, Laravel'e günlükleri stderr'a yönlendirmesini söyler ve böylece günlükler, App Service günlüklerine erişilebilir hale gelir.
- 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: base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= değerini kullanın. Bu bir Laravel şifreleme değişkenidir.
Önemli
Değer APP_KEY burada kolaylık sağlamak için kullanılır. Üretim senaryoları için dağıtımınızda özel olarak oluşturulmalı ve komut satırında php artisan key:generate --show kullanılarak yapılmalıdır.
İdeal olan, APP_KEY uygulama ayarının da çok adımlı bir işlem olan anahtar kasası referansı olarak yapılandırılmasıdır. Daha fazla bilgi için bkz. APP_KEY uygulama ayarını Key Vault başvurusu olarak nasıl değiştirebilirim?
Ö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 deponuza yapılan her git push derleme ve dağıtma eylemini başlatır.
1. Adım: Örnek çatalınızın GitHub kod alanında git pull origin main çalıştırmak için geri dönün.
Bu komut, yeni işlenen iş akışı dosyasını kod alanınıza çeker.
2. Adım (Seçenek 1: GitHub Copilot ile):
- Sohbet görünümünü ve ardından + öğesini seçerek yeni bir sohbet oturumu başlatın.
- "@workspace Uygulama veritabanına ve redis'e nasıl bağlanır? " Copilot, ayarların yapılandırma/database.php'de nasıl yapılandırıldığı hakkında size bazı açıklamalar verebilir.
- "@workspace Üretim modunda uygulamam, MySQL esnek sunucusuna bağlanmak için Azure Service Bağlayıcısı'nı kullanan bir App Service web uygulamasında çalışıyor. Kullanmam gereken ortam değişkeni adları nelerdir?" Copilot size Seçenek 2'dekine benzer bir kod önerisi verebilir : GitHub Copilot adımları olmadan ve hatta yapılandırma/database.php dosyasında değişiklik yapmanızı bile söyleyebilir.
- Gezginde config/database.php açın ve kod önerisini ekleyin.
- "@workspace App Service uygulamam, Django istemci türünü kullanarak Redis için Cache'e bağlanmak için Azure Hizmet Bağlayıcısı'nı da kullanır. Kullanmam gereken ortam değişkeni adları nelerdir?" Copilot size Seçenek 2'dekine benzer bir kod önerisi verebilir : GitHub Copilot adımları olmadan ve hatta yapılandırma/database.php dosyasında değişiklik yapmanızı bile söyleyebilir. İstenirse daha doğru yanıtlar almak için Azure için GitHub Copilot'ta oturum açın.
- Kod önerisini ekleyin.
GitHub Copilot her seferinde aynı yanıtı vermez ve her zaman doğru değildir. Yanıtta ince ayar yapmak için daha fazla soru sormanız gerekebilir. İpuçları için bkz . Kod alanımda GitHub Copilot ile ne yapabilirim?.
2. Adım (Seçenek 2: GitHub Copilot olmadan):
-
Explorer'da config/database.php açın.
mysqlbölümünü bulun ve aşağıdaki değişiklikleri yapın: -
DB_HOSTdeğeriniAZURE_MYSQL_HOSTile değiştirin (satır 49). -
DB_DATABASEdeğerini (satır 51)AZURE_MYSQL_DBNAMEile değiştirin. -
DB_USERNAMEyerineAZURE_MYSQL_USERNAME(satır 52) değiştirin. -
DB_PASSWORDdeğeriniAZURE_MYSQL_PASSWORDile değiştirin (satır 53). -
DB_PORT(satır 50) ifadesiniAZURE_MYSQL_PORTile değiştirin. - Redis
cachebölümüne kaydırın ve aşağıdaki değişiklikleri yapın: -
REDIS_HOSTöğesini (satır 142)AZURE_REDIS_HOSTile değiştirin. -
REDIS_PASSWORDdeğeriniAZURE_REDIS_PASSWORDile değiştirin (satır 144). -
REDIS_PORTdeğeriniAZURE_REDIS_PORTile değiştirin (satır 145). - (c0 /> öğesini (satır 146)
REDIS_CACHE_DBile değiştirin. - Aynı bölümde,
'scheme' => 'tls',ile bir satır ekleyin. Bu yapılandırma, Laravel'e Redis'e bağlanmak için şifreleme kullanmasını söyler.
3. Adım:
- Kaynak Denetimi uzantısını seçin.
- Metin kutusuna Azure veritabanı ve önbellek bağlantılarını yapılandırma gibi bir işleme iletisi yazın. Alternatif olarak,
öğesini seçip GitHub Copilot'un sizin için bir işleme iletisi oluşturmasına izin verin. - İşle'yi seçin, ardından Evet ile onaylayın.
- Değişiklikleri eşitle 1 seçin, ardından Tamam ile onaylayın.
4. Adım:
- Azure portalında web uygulamanızı açın ve ardından Dağıtım>Dağıtım Merkezi'ni seçin.
- Yeni dağıtım çalıştırmasını görmek için Günlükler'i ve ardından Yenile'yi seçin.
- Dağıtım çalıştırmasının log öğesinde, en son zaman damgasını içeren Derleme/Dağıtma Logları girdisini seçin.
5. 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 Başarılı durumunu gösterdiğini görene kadar bekleyin. Yaklaşık 10 dakika sürer.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
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ına, soldaki menüden geri dönün:
- Geliştirme Araçları
- Git'i seçin.
2. Adım: SSH terminalinde:
-
cd /home/site/wwwroot'i çalıştırın. Dağıtılan tüm dosyalarınız aşağıdadır. -
php artisan migrate --force'i çalıştırın. Başarılı olursa, App Service MySQL veritabanına başarıyla bağlanıyor.
İpucu
SSH oturumunda, /home klasöründeki dosyalarda yapılan yalnızca değişiklikler uygulama yeniden başlatmalarının ötesinde kalıcı olabilir. dışındaki /home değişiklikler kalıcı olmaz.
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. Örnek depo , varsayılan adlı özel bir yapılandırma dosyası içerir. Daha önce belirtildiği gibi, bu dosyayı SSH kabuğunu kullanarak değiştirmek istemiyorsunuz. Değişiklik /home dışındadır ve bir uygulama yeniden başlatıldığında kaybolur.
1. Adım:
- Sol menüden Ayarlar>Yapılandırması'nı seçin.
- Genel ayarlar sekmesini seçin.
2. Adım:Genel ayarlar sekmesinde:
- Başlangıç Komutu kutusuna şu komutu girin: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
- Kaydet'i ve ardından Devam'ı 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 aynı değişikliğin yapılmasını sağlar.
Uygulamaya göz atın
1. Adım: App Service sayfasında:
- Sol menüden Genel Bakış'ı seçin.
- Uygulamanızın Varsayılan etki alanını seçin.
2. Adım: Listeye birkaç görev ekleyin. Tebrikler, Azure Uygulaması Hizmeti'nde güvenli bir veri temelli PHP uygulaması çalıştırıyorsunuz.
İpucu
Örnek uygulama, önbellek kenara koyma modelini 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.
Tanılama günlüklerini akış halinde iletmek
Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsola kaydedilen tüm iletileri yakalar. Örnek uygulama, özelliğin gösterimi için uç noktalarının her birine konsol günlük iletileri çıkarır. Varsayılan olarak, Laravel'in günlüğe kaydetme işlevi (örneğin, Log::info()) yerel bir dosyaya çıkış oluşturur. Daha önce belirtilen LOG_CHANNEL uygulama ayarınız, günlük girişlerine App Service günlük akışından erişim sağlar.
1. Adım: App Service sayfasında:
- Sol menüden Monitoring>App Service logs'u seçin.
- Uygulama günlüğü altında Dosya Sistemi'ni seçin.
2. Adım: Soldaki menüden Günlük akışı'nı seçin. Uygulamanızın platform günlükleri de dahil olmak üzere, kapsayıcının içindeki günlüklerini görürsünüz.
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:
- Kaynak grubu adını girin.
- Kaynak grubunu seçin.
2. Adım: Kaynak grubu sayfasında Kaynak grubunu sil'i seçin.
3. Adım:
- Silme işleminizi onaylamak için kaynak grubu adını girin.
- Sil'i seçin.
Azure kaynakları oluşturma ve örnek uygulama dağıtma
Bu adımda Azure kaynaklarını oluşturur ve Linux üzerinde App Service için örnek bir uygulama dağıtırsınız. Bu öğreticide kullanılan adımlar, App Service ve MySQL için Azure Veritabanı içeren varsayılan olarak güvenli bir kaynak kümesi oluşturur.
GitHub kod alanı zaten Azure Geliştirici CLI'sine (AZD) sahiptir.
ile
php artisan key:generate --showbir Laravel şifreleme anahtarı oluşturun:php artisan key:generate --showkomutunu çalıştırıp
azd auth loginistemi izleyerek Azure'da oturum açın:azd auth loginGerekli Azure kaynaklarını oluşturun ve
azd upkomutunu çalıştırarak uygulama kodunu dağıtın. İstemi izleyerek Azure kaynakları için istenen aboneliği ve konumu seçin.azd upİstendiğinde aşağıdaki yanıtları verin:
Soru Cevap Yeni bir ortam adı girin Benzersiz bir ad yazın. AZD şablonu, Azure'da ( <app-name>-<hash>.azurewebsites.net) web uygulamanızın DNS adının bir parçası olarak bu adı kullanır. Alfasayısal karakterlere ve kısa çizgilere izin verilir.Kullanılacak Azure Aboneliğini seçin Aboneliğinizi seçin. Kullanılacak Bir Azure konumu seçin Bir konum seçin. 'appKey' altyapısı güvenli parametresi için bir değer girin Burada php artisan key:generate --showçıktısını kullanın. AZD şablonu, uygulamanızda kullanabileceğiniz bir Key Vault gizli anahtarı oluşturur.'databasePassword' altyapısı güvenli parametresi için bir değer girin MySQL için veritabanı parolası. En az 8 karakter uzunluğunda olmalı ve büyük harfler, küçük harfler, sayılar ve özel karakterler içermelidir. Komutun
azd uptamamlanması yaklaşık 15 dakika sürer. Redis önbelleği en çok zaman alır. Komut ayrıca uygulama kodunuzu derleyip dağıtır, ancak kodunuzu daha sonra App Service ile çalışacak şekilde değiştirirsiniz. Komutu çalışırken, Azure'daki dağıtıma bir bağlantı da dahil olmak üzere sağlama ve dağıtım işlemiyle ilgili iletiler sağlar. Tamamlandığında, komut dağıtım uygulamasının bağlantısını da görüntüler.Bu AZD şablonu, aşağıdaki Azure kaynaklarıyla varsayılan olarak güvenli bir mimari oluşturan dosyaları (azure.yaml ve infra dizini) içerir:
- Kaynak grubu: Oluşturulan tüm kaynaklar için kapsayıcı.
- App Service planı: App Service için işlem kaynaklarını tanımlar. B1 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ştirilmiş ve arka uç ağ trafiğini yalıtıyor.
- MySQL için Azure Veritabanı Esnek Sunucu: Yalnızca DNS bölgesi tümleştirmesi aracılığıyla sanal ağdan erişilebilir. Sunucuda sizin için bir veritabanı oluşturulur.
- Redis için Azure Cache: Yalnızca sanal ağ içinden erişilebilir.
- Özel uç noktalar: Sanal ağdaki anahtar kasası ve Redis önbelleği için erişim uç noktaları.
- Özel DNS bölgeleri: Sanal ağda anahtar kasasının, veritabanı sunucusunun ve Redis önbelleğinin DNS çözümlemesini etkinleştirin.
- Log Analytics çalışma alanı: Uygulamanızın günlüklerini göndermesi için hedef kapsayıcı görevi görür ve burada günlükleri de sorgulayabilirsiniz.
- Anahtar kasası: AZD ile yeniden dağıttığınızda veritabanı parolanızın aynı kalmasını sağlamak için kullanılır.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
Uygulama kodunda Azure bağlantı dizelerini kullanma
Kullandığınız AZD şablonu zaten uygulama ayarları olarak sizin için bağlantı değişkenlerini oluşturmuş ve bunları terminale çıkış olarak göndermektedir. Uygulama ayarları, bağlantı gizli dizilerini kod deponuzun dışında tutmanın bir yoludur.
AZD çıkışında
AZURE_MYSQL_veAZURE_REDIS_ile başlayan uygulama ayarlarını bulun. Yalnızca ayar adları görüntülenir. AZD çıkışında şu şekilde görünürler:App Service app has the following app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_DBNAME - AZURE_MYSQL_FLAG - AZURE_MYSQL_HOST - AZURE_MYSQL_PASSWORD - AZURE_MYSQL_PORT - AZURE_MYSQL_USERNAME - AZURE_REDIS_DATABASE - AZURE_REDIS_HOST - AZURE_REDIS_PASSWORD - AZURE_REDIS_PORT - AZURE_REDIS_SSLile
AZURE_MYSQL_başlayan ayarlar, MySQL veritabanının bağlantı değişkenleridir. ileAZURE_REDIS_başlayan ayarlar Redis önbelleği içindir. Bunları daha sonra kodunuzda kullanmanız gerekir. AZD şablonu, Azure portalında uygulamanın uygulama ayarları sayfasına doğrudan bağlantıyı gösterir.Dosya yöneticisinden config/database.php dosyasını açın. Bu dosya, veritabanı ve Redis önbellek bağlantılarının yapılandırma dosyasıdır.
Bağlantıyı tanımlayan
mysqlbölümü bulun (satır 46-64) veDB_HOST,DB_PORT,DB_DATABASE,DB_USERNAMEveDB_PASSWORDyerine AZD çıkışındakiAZURE_MYSQL_uygulama ayarlarını yazın. Bağlantınızmysqlaşağıdaki kod gibi görünmelidir.'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('AZURE_MYSQL_HOST', '127.0.0.1'), 'port' => env('AZURE_MYSQL_PORT', '3306'), 'database' => env('AZURE_MYSQL_DBNAME', 'forge'), 'username' => env('AZURE_MYSQL_USERNAME', 'forge'), 'password' => env('AZURE_MYSQL_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],Laravel'de veritabanı yapılandırması hakkında daha fazla bilgi için Laravel belgelerine bakın.
Redis önbellek bağlantısını tanımlayan bölümü bulun (satır 140-147) ve , ,
REDIS_HOSTveREDIS_PASSWORDyerineREDIS_PORTREDIS_CACHE_DBAZD çıkışındakiAzure_REDIS_uygulama ayarlarını yazın. Ayrıca, bağlantıya ekleyin'scheme' => 'tls',. Önbellek bağlantınız aşağıdaki kod gibi görünmelidir:'cache' => [ 'scheme' => 'tls', 'url' => env('REDIS_URL'), 'host' => env('AZURE_REDIS_HOST', '127.0.0.1'), 'username' => env('REDIS_USERNAME'), 'password' => env('AZURE_REDIS_PASSWORD'), 'port' => env('AZURE_REDIS_PORT', '6379'), 'database' => env('AZURE_REDIS_DATABASE', '1'), ],Laravel'de Redis önbelleği yapılandırması hakkında daha fazla bilgi için Laravel belgelerine bakın.
Uyarı
Değişikliklerinizin henüz yayınlanmadığını unutmayın. Bunları bir sonraki adımın sonunda dağıtacaksınız.
Web uygulamasında Laravel ayarlarını yapılandırma
Gezginden infra/resources.bicep dosyasını açın. Bu dosya, oluşturulan Azure kaynaklarını tanımlayan Bicep dosyasıdır.
Uygulama ayarlarını tanımlayan bölümü bulun (satır 510-514) ve açıklamalarını kaldırın. Bu uygulama ayarları şunlardır:
Ayarlar Açıklama CACHE_DRIVERLaravel'e önbelleği olarak Redis'i kullanmasını söyler ( Laravel belgelerine bakın). MYSQL_ATTR_SSL_CAAzure'da MySQL'e tls bağlantısı açmak için gereklidir. Sertifika dosyası kolaylık sağlamak için örnek depoya eklenir. Bu değişken, yapılandırma/database.php mysql bağlantısı tarafından kullanılır LOG_CHANNELLaravel'e günlükleri stderriçine yönlendirmesini söyler ve bu, App Service günlüklerine erişimi mümkün kılar (bkz. Laravel belgeleri).APP_DEBUGLaravel'de hata ayıklama modu sayfalarını etkinleştirin ( Laravel belgelerine bakın). APP_KEYLaravel şifreleme değişkeni. AZD şablonu zaten bir Key Vault sırrı (satır 212-217) oluşturmuştur, bu nedenle Key Vault referansı ile erişebilirsiniz. infra/resources.bicep dosyasında App Service uygulaması için kaynak tanımını bulun ve 315. satırı açıklamayı kaldırın:
appCommandLine: 'cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload'Laravel uygulama yaşam döngüsü, uygulama kökü yerine /public dizininde başlar. App Service için varsayılan PHP kapsayıcısı, uygulama kökünde 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.
Örnek depo, Nginx'e /public dizinine bakmasını söyleyen varsayılan adlı yeni bir yapılandırma dosyası içerir. Uygulama her başlatıldığında,
appCommandLineiçindeki bu özel komut çalışır ve Linux kapsayıcısı temiz bir durumdan her yeniden yüklendiğinde dosya değişimini uygular.Kod alanı terminaline geri dönün ve
azd upkomutunu tekrar çalıştırın.azd up
İpucu
azd up altyapı ve uygulama değişiklikleri yaptığınız için azd package, azd provision ve azd deploy birlikte çalıştırılır. Yalnızca altyapı değişiklikleri yapmak için komutunu çalıştırın azd provision. Değişiklikleri uygulama koduna dağıtmak için komutunu çalıştırın azd deploy.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
Veritabanı şeması oluşturma
MySQL veritabanı sanal ağ tarafından korunduğunda, Laravel veritabanı geçişlerini çalıştırmanın en kolay yolu App Service'te Linux kapsayıcısı ile bir SSH oturumudur.
AZD çıkışında SSH oturumunun URL'sini bulun ve tarayıcıda URL'ye gidin. Çıktıda şöyle görünür:
Open SSH session to App Service container at: <URL>SSH oturumunda ,home/site/wwwroot dizininden veritabanı geçişlerini çalıştırın:
cd /home/site/wwwroot php artisan migrate --forceBaşarılı olursa App Service veritabanına başarıyla bağlanıyor.
Uyarı
Yalnızca /home içindeki dosyalarda yapılan değişiklikler uygulama yeniden başlatmalarının ötesinde kalıcılık gösterebilir.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
Uygulamaya göz atın
AZD çıkışında uygulamanızın URL'sini bulun ve tarayıcıda bu URL'ye gidin. URL, AZD çıkışında şöyle görünür:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>Listeye birkaç görev ekleyin.
Tebrikler, Azure Uygulaması Hizmeti'nde MySQL için Azure Veritabanı güvenli bağlantısı olan bir web uygulaması çalıştırıyorsunuz.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
Tanılama günlüklerini akış halinde iletmek
Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsola kaydedilen tüm iletileri yakalar. Kolaylık olması için AZD şablonu yerel dosya sisteminde günlüğe kaydın etkinleştirildiğini ve günlüklerin Log Analytics çalışma alanına gönderildiğini zaten sağlıyor.
Örnek uygulama, özelliğin gösterimi için uç noktalarının her birine konsol günlük iletileri çıkarır. Varsayılan olarak, Laravel'in günlüğe kaydetme işlevi (örneğin, Log::info()) yerel bir dosyaya çıkış oluşturur. Daha önce belirtilen LOG_CHANNEL uygulama ayarınız, günlük girişlerine App Service günlük akışından erişim sağlar.
Route::get('/', function () {
Log::info("Get /");
$startTime = microtime(true);
// Simple cache-aside logic
if (Cache::has('tasks')) {
$data = Cache::get('tasks');
} else {
$data = Task::orderBy('created_at', 'asc')->get();
Cache::add('tasks', $data);
}
return view('tasks', ['tasks' => $data, 'elapsed' => microtime(true) - $startTime]);
});
AZD çıkışında App Service günlüklerini izlemek için bağlantıyı bulun ve tarayıcıda bu bağlantıya gidin. Bağlantı, AZD çıkışında şöyle görünür:
Stream App Service logs at: <URL>
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
Kaynakları temizleme
Geçerli dağıtım ortamındaki tüm Azure kaynaklarını silmek için komutunu çalıştırın azd down ve istemleri izleyin.
azd down
Sorun giderme
Veritabanı geçişleri sırasında hatayı alıyorum php_network_getaddresses: getaddrinfo for mysqldb failed: No address associated with hostname...
MySQL bağlantı değişkenlerinin düzgün yapılandırılmadığını gösterir. Uygulama kodunda AZURE_MYSQL_Azure bağlantı dizelerini kullanma bölümünde uygulama ayarlarının düzgün yapılandırıldığını doğrulayın.
Tarayıcıda boş bir sayfa alıyorum.
App Service'in PHP başlangıç dosyalarını /public içinde bulamadığını gösterir. Web uygulamasında Laravel ayarlarını yapılandırma'daki adımları izleyin.
Tarayıcıda şunu söyleyen bir hata ayıklama sayfası alıyorum: Unsupported cipher or incorrect key length.
Ayarın APP_KEY geçersiz bir anahtara ayarlandığını gösterir.
azd up çalıştırdığınızda, appKey'yi php artisan key:generate --show çıkışına ayarladığınızdan emin olun.
Tarayıcıda şunu söyleyen bir hata ayıklama sayfası alıyorum: Uncaught Error: Class "Illuminate\..." not found.
Bu hata ve benzer hatalar, öncesinde composer installçalışmadığınız azd up veya /vendor dizinindeki paketlerin eski olduğunu gösterir.
composer install ve azd deploy tekrar çalıştırın.
Tarayıcıda şunu söyleyen bir hata ayıklama sayfası alıyorum: php_network_getaddresses: getaddrinfo for redishost failed: Name or service not known.
Redis bağlantı değişkenlerinin düzgün yapılandırılmadığını gösterir. Uygulama kodunda AZURE_REDIS_Azure bağlantı dizelerini kullanma bölümünde uygulama ayarlarının düzgün yapılandırıldığını doğrulayın.
Tarayıcıda şunu söyleyen bir hata ayıklama sayfası alıyorum: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'XXXX-XXXXXXXXX-mysql-database.tasks' doesn't exist
Bu, veritabanı geçişlerini çalıştırmadığınız veya veritabanı geçişlerinin başarılı olmadığı anlamına gelir. Veritabanı şeması oluşturma'daki adımları izleyin.
Sık sorulan sorular
- Bu kurulumun maliyeti ne kadardır?
- Diğer araçlarla sanal ağın arkasında güvenli hale getirilmiş olan MySQL veritabanına nasıl bağlanırım?
- APP_KEY uygulama ayarını Key Vault başvurusu olarak nasıl değiştirebilirim?
- Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?
- GitHub Actions dağıtımı neden bu kadar yavaş?
- Kullanıcı tarafından atanan kimlik oluşturma iznim yok
- Kod alanımda GitHub Copilot ile ne yapabilirim?
- Bu kurulumun maliyeti ne kadardır?
- Diğer araçlarla sanal ağın arkasında güvenli hale getirilmiş olan MySQL veritabanına nasıl bağlanırım?
- Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?
- GitHub Actions dağıtımı neden bu kadar yavaş?
- Kullanıcı tarafından atanan kimlik oluşturma iznim yok
- Kod alanımda GitHub Copilot ile ne yapabilirim?
Bu kurulumun maliyeti ne kadardır?
Oluşturulan kaynakların 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ı.
Diğer araçlarla sanal ağın arkasında güvenliği sağlanan MySQL veritabanına nasıl bağlanırım?
- Komut satırı aracından temel erişim için uygulamanın SSH terminalinden çalıştırabilirsiniz
mysql. - MySQL Workbench gibi bir masaüstü aracından bağlanmak için bilgisayarınızın sanal ağ içinde olması gerekir. Örneğin, alt ağlardan birine bağlı bir Azure sanal makinesi veya Azure sanal ağıyla siteden siteye VPN bağlantısı olan bir şirket içi ağdaki bir bilgisayar olabilir.
- Ayrıca Azure Cloud Shell'i sanal ağ ile tümleştirebilirsiniz.
APP_KEY uygulama ayarını Key Vault referansı olarak nasıl değiştirebilirim?
Laravel değişkenlerini yapılandırma'daki Azure portalı adımlarından, GitHub kod alanında aşağıdaki Azure CLI komutlarını çalıştırarak Key Vault başvurusuna geçiş APP_KEY yapabilirsiniz:
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=laravelAppKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(php artisan key:generate --show)
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "APP_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Aynı işlemi Azure portalında da yapabilirsiniz. Daha fazla bilgi için bkz:
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, yeni bir derleme ve dağıtım sürecini başlatır. 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ı, önce derleme ardından dağıtım olmak üzere iki görevli bir çalıştırmayı tanımlar. Her iş kendi temiz ortamında çalıştığı için, iş akışı dosyası deploy işinin build işindeki dosyalara erişimini sağlar.
- İşin sonunda
builddosyaları artefaktlar olarak yükleyin. - İşin başlangıcında
deployartifaktları indirin.
İki aşamalı işlem sırasında geçen sürenin çoğu, öğeleri karşıya yüklemek ve indirmek için harcanı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.
Kullanıcı tarafından atanan kimlik oluşturma iznim yok
"Bkz: Dağıtım Merkezi'nden GitHub Actions dağıtımını ayarlama."
Kod alanımda GitHub Copilot ile ne yapabilirim?
Kod alanını oluştururken GitHub Copilot sohbet görünümünün zaten sizin için orada olduğunu fark edebilirsiniz. Kolaylık sağlamak için kapsayıcı tanımına GitHub Copilot sohbet uzantısını dahil ediyoruz (bkz . .devcontainer/devcontainer.json). Ancak, bir GitHub Copilot hesabına ihtiyacınız vardır (30 günlük ücretsiz deneme sürümü kullanılabilir).
GitHub Copilot ile konuşurken size birkaç ipucu:
- Tek bir sohbet oturumunda, sorular ve yanıtlar birbirleri üzerinde derlenebilir ve sorularınızı ayarlayarak, elde ettiğiniz yanıta ince ayar yapabilirsiniz.
- Varsayılan olarak, GitHub Copilot'un deponuzdaki hiçbir dosyaya erişimi yoktur. Dosya hakkında soru sormak için önce düzenleyicide dosyayı açın.
- GitHub Copilot'ın yanıtlarını hazırlarken depodaki tüm dosyalara erişmesine izin vermek için sorunuza ile
@workspacebaşlayın. Daha fazla bilgi için bkz. Use the @workspace agent. - Sohbet oturumunda, GitHub Copilot ile
@workspacedeğişiklik önerisinde bulunabilir ve hatta değişiklikleri nerede yapacağınızı bile, ancak sizin için değişiklikleri yapmasına izin verilmez. Önerilen değişiklikleri eklemek ve test etmek size bağlı.
İlgili içerik
Özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğrenmek için sonraki öğreticiye ilerleyin.
Veya şu kaynağı gözden geçirin: