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 PostgreSQL için Azure Veritabanı ilişkisel veritabanı hizmetiyle Azure App Service'e veri temelli bir Python web uygulaması (Django) dağıtacaksınız. Azure App Service, Linux sunucu ortamında Python'i destekler. İsterseniz , bunun yerine Flask öğreticisine veya FastAPI öğreticisine bakın.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Varsayılan olarak güvenli bir App Service, PostgreSQL ve Redis önbellek mimarisi oluşturun.
- Yönetilen kimlik ve Key Vault referanslarını kullanarak bağlantı sırlarının güvenliğini sağlama.
- GitHub deposundan App Service'e örnek bir Python uygulaması dağıtın.
- Uygulama kodunda App Service bağlantı dizesi ve uygulama ayarlarına erişin.
- Güncelleştirmeler yapın ve uygulama kodunu yeniden dağıtın.
- Veritabanı geçişlerini çalıştırarak veritabanı şeması oluşturma.
- Azure'dan tanılama günlüklerini akışla aktar.
- Uygulamayı Azure portalında yönetin.
- Azure Geliştirici CLI'sını kullanarak aynı mimariyi sağlayın ve dağıtın.
- GitHub Codespaces ve GitHub Copilot ile geliştirme iş akışınızı iyileştirin.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Azure hesabınız yoksa ücretsiz olarak bir hesap oluşturabilirsiniz.
- GitHub hesabı. Ücretsiz olarak da bir tane alabilirsiniz.
- Django geliştirme ile Python bilgisi.
- (İsteğe bağlı) GitHub Copilot'ı denemek için bir GitHub Copilot hesabı gereklidir. 30 günlük ücretsiz deneme sürümü mevcuttur.
- Etkin aboneliği olan bir Azure hesabı. Azure hesabınız yoksa ücretsiz olarak bir hesap oluşturabilirsiniz.
- Azure Geliştirici CLI'sı yüklü. Azure Geliştirici CLI'sı zaten yüklü olduğundan Azure Cloud Shell ile adımları izleyebilirsiniz.
- Django geliştirme ile Python bilgisi.
- (İsteğe bağlı) GitHub Copilot'ı denemek için bir GitHub Copilot hesabı gereklidir. 30 günlük ücretsiz deneme sürümü mevcuttur.
Sonuna geç
Bu öğreticideki örnek uygulamayı yalnızca Azure'da çalışırken görmek istiyorsanız, Azure Cloud Shell'de aşağıdaki komutları çalıştırmanız ve istemi izlemeniz gerekir:
mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up
1. Örneği çalıştırın
İlk olarak, başlangıç noktası olarak örnek bir veri temelli uygulama ayarlarsınız. Sizin için daha kolay olması adına, örnek depo bir geliştirme kapsayıcısı 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ı GitHub kod alanında çalıştırılabilir; başka bir deyişle örneği web tarayıcısıyla herhangi bir bilgisayarda çalıştırabilirsiniz.
Not
Bu öğreticiyi kendi uygulamanızla birlikte takip ediyorsanız, hangi paketlere ihtiyacınız olduğunu görmek için README.md içindeki requirements.txt dosya açıklamasına bakın.
1. Adım: Yeni bir tarayıcı penceresinde:
- GitHub hesabınıza giriş yapın.
- Şuraya gidin: https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork
- Yalnızca ana dalı kopyala seçimini kaldırın. Tüm dalları istiyorsun.
- Çatal oluştur'u seçin.
2. Adım: GitHub forkunda:
- Başlangıç dalı için main>starter-no-infra öğesini seçin. Bu dal yalnızca örnek projeyi içerir ve Azure ile ilgili dosya veya yapılandırma içermez.
-
Kod>Starter-no-infra üzerinde kod alanı oluştur.
Kod alanı birkaç dakika içinde ayarlanır ve sonunda
pip install -r requirements.txt, deponuz için çalıştırılır. Ayrıca, sağlanan .env dosyası zaten Django'nınSECRET_KEYyerel olarak çalışması için gereken bir sahte değişken içeriyor.
Adım 3: Kod alanı terminalinde:
-
python manage.py migrateile veritabanı geçişlerini çalıştırın. - Uyugulamayı
python manage.py runserverile çalıştırın. - Bildirimi
Your application running on port 8000 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 yazınCtrl+C.
İpucu
GitHub Copilot'a bu depo hakkında soru sorabilirsiniz. Örneğin:
- @workspace Bu proje ne yapar?
- @workspace .devcontainer klasörü ne yapar?
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
2. App Service, veritabanı ve önbellek oluşturma
Bu adımda Azure kaynaklarını oluşturursunuz. Bu öğreticide kullanılan adımlar App Service, PostgreSQL için Azure Veritabanı ve Azure Cache içeren 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.
- Dünyada uygulamayı fiziksel olarak çalıştıran Bölge. Ayrıca uygulamanızın DNS adının bir parçası olarak da kullanılır.
- Uygulamanın Çalışma Zamanı yığını . Burası, uygulamanız için kullanılacak Python 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ı 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:
- Azure portalının üst kısmındaki arama çubuğuna "web uygulaması veritabanı" yazın.
- Market başlığının altında Web Uygulaması + Veritabanı etiketli öğeyi seçin. Doğrudan oluşturma sihirbazına da gidebilirsiniz.
2. Adım:Web Uygulaması + Veritabanı Oluştur sayfasında, formu aşağıdaki gibi doldurun.
- Kaynak Grubu: Yeni oluştur'u seçin ve msdocs-django-postgres-tutorial adını kullanın.
- Bölge: Size yakın herhangi bir Azure bölgesi.
- Ad: msdocs-python-postgres-XYZ.
- Çalışma zamanı yığını: Python 3.14.
- Veritabanı: PostgreSQL - Esnek Sunucu varsayılan olarak veritabanı altyapısı olarak seçilir. Sunucu adı ve veritabanı adı da varsayılan olarak uygun değerlere ayarlanır.
- Redis için Azure Cache ekleme: Evet.
- Barındırma planı: Temel. Hazır olduğunuzda, ölçeği bir üretim fiyatlandırma katmanına kadar artırabilirsiniz.
- Gözden geçir ve oluştur'u seçin.
- Doğrulama tamamlandıktan sonra Oluştur'u seçin.
Adım 3: 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ştirilmiş ve arka uç ağ trafiğini yalıtıyor.
- Özel uç nokta: Sanal ağdaki Redis önbelleği için erişim uç noktası.
- Ağ arabirimleri: Özel uç noktaların her biri için bir tane olan özel IP adreslerini temsil eder.
- PostgreSQL için Azure Veritabanı esnek sunucusu: Yalnızca sanal ağ içinden erişilebilir. Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
- Redis için Azure Cache: Yalnızca özel ağının arkasından erişilebilir.
- Özel DNS bölgeleri: Sanal ağdaki Redis önbelleğinin veritabanı sunucusunun DNS çözümlemesini etkinleştirir.
3. Bağlantı sırlarının güvenliğini sağlama ve SECRET_KEY ekleme
Oluşturma sihirbazı sizin için zaten uygulama ayarları olarak bağlantı değişkenlerini oluşturdu. Ancak en iyi güvenlik uygulaması, gizli bilgileri tamamen App Service'in dışında tutmaktır. Gizli bilgilerinizi bir Anahtar Kasası'na taşıyacak ve Hizmet Bağlayıcılarından yararlanarak uygulama ayarlarınızı Key Vault referansları olarak değiştireceksiniz.
1. Adım: Mevcut bağlantı dizesini alma
- App Service sayfasının sol menüsünde Ayarlar > Ortam değişkenleri'ni seçin.
- AZURE_POSTGRESQL_CONNECTIONSTRING'ı seçin.
- Uygulama ayarı ekle/düzenle bölümünde, Değer alanında dizenin sonundaki password= bölümünü bulun.
- Daha sonra kullanmak üzere password= sonrasındaki parola dizesini kopyalayın.
Bu uygulama ayarları Postgres veritabanına ve özel uç noktaların arkasında güvenliği sağlanan Redis önbelleğine bağlanmanızı sağlar. Ancak gizli bilgiler doğrudan App Service uygulamasına kaydedilir ve bu en uygun olanı değildir. Bunu değiştireceksin. Buna ek olarak, Django uygulamanız için gerekli olan bir
SECRET_KEYayar ekleyebilirsiniz.
2. Adım: Sırların güvenli yönetimi için bir anahtar kasası oluşturun
- Üstteki arama çubuğuna "key vault" yazın ve Marketplace>Anahtar Kasası'nı seçin.
- Kaynak Grubu'ndamsdocs-python-postgres-tutorial öğesini seçin.
- Anahtar kasası adı alanına yalnızca harf ve sayılardan oluşan bir ad yazın.
- "Bölge'yi, kaynak grubuyla aynı konuma ayarlayın."
3. Adım: Özel Uç Nokta ile anahtar kasasının güvenliğini sağlama
- Ağ 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-python-postgres-tutorial öğesini seçin.
- İletişim kutusundaki Konum'da App Service uygulamanızla aynı konumu seçin.
- Ad alanına msdocs-python-postgres-XYZVaultEndpoint yazın.
- Sanal ağ'damsdocs-python-postgres-XYZVnet öğesini seçin.
- Alt ağda, msdocs-python-postgres-XYZSubnet.
- Tamam'ı seçin.
- Gözden geçir ve oluştur'u ve ardından 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: PostgreSQL bağlayıcısını yapılandırma
- Üst arama çubuğuna msdocs-python-postgres yazın, ardından msdocs-python-postgres-XYZ adlı App Service kaynağını seçin.
- App Service sayfasındaki sol menüde Ayarlar > Hizmet Bağlayıcısı'nı seçin. Uygulama oluşturma sihirbazının sizin için oluşturduğu iki bağlayıcı zaten vardır.
- PostgreSQL bağlayıcısının yanındaki onay kutusunu ve ardından Düzenle'yi seçin.
- İstemci türü'ndeDjango'yu seçin. PostgreSQL hizmet bağlayıcısı içindeki Django istemci türü, veritabanı değişkenlerini tek bağlantı dizesi yerine ayrı ayarlarda sunar. Ayrı değişkenleri Django'nun veritabanı ayarlarında daha kolay kullanabilirsiniz.
- Kimlik Doğrulaması sekmesini seçin.
- Parola'da, daha önce kopyaladığınız parolayı yapıştırın.
- Key Vault'ta Gizli Bilgiyi Depola seçeneğini belirle.
- Key Vault Bağlantısı'nın altında Yeni oluştur'u seçin. Düzenle iletişim kutusunun üzerinde Bağlantı oluştur iletişim kutusu açılır.
5. Adım: Key Vault bağlantısını kurma
- 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.
6. Adım: PostgreSQL bağlayıcı ayarlarını son haline getir
- defaultConnector için düzenleme iletişim kutusuna geri dönersiniz. Kimlik Doğrulaması sekmesinde anahtar kasası bağlayıcısının oluşturulmasını bekleyin. Tamamlandığında Key Vault Bağlantısı açılan listesi otomatik olarak seçilir.
- İleri: Ağ'ı seçin.
- Kaydet'i seçin. Güncelleştirme başarılı bildirimi görünene kadar bekleyin.
7. Adım: Redis bağlayıcısını Key Vault gizli dizilerini kullanacak şekilde yapılandırma
- 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 Bilgiyi Depola seçeneğini belirle.
- 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.
8. Adım: Key Vault tümleştirmesini doğrulama
- Sol menüden Ayarlar > Ortam değişkenleri'ni yeniden seçin.
-
AZURE_POSTGRESQL_PASSWORD yanında Değeri göster'i seçin. Değer
@Microsoft.KeyVault(...)olmalıdır, bu da 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 AZURE_REDIS_CONNECTIONSTRING yanındaki Değeri göster'i seçin.
9. Adım: Örnek uygulama , gerekli SECRET_KEY ayarını ayarlamak için SECRET_KEY ortam değişkenini okur. Bu adımda bir uygulama ayarı olarak oluşturursunuz.
- Uygulama ayarları sekmesinde Ekle'yi seçin.
- Ad'ıSECRET_KEY olarak ayarlayın.
- Değer'i uzun bir rastgele dize olarak ayarlayın.
- Uygula'ya, sonra yeniden Uygula'ya ve ardından Onayla'ya tıklayın.
Ö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.
Not
İdeal olan, SECRET_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. SECRET_KEY uygulama ayarını Key Vault başvurusu olarak nasıl değiştirebilirim?
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
4. Ö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 her git push eklendiğinde derleme ve dağıtma işlemi başlatılır.
1. Adım: Sol menüde Dağıtım>Dağıtım Merkezi'ni seçin.
2. Adım: Dağıtım Merkezi sayfasında:
- Kaynak bölümünde GitHub'ı seçin. GitHub Actions varsayılan olarak derleme sağlayıcısı olarak seçilir.
- GitHub hesabınızda oturum açın ve Azure'ı yetkilendirme istemini izleyin.
- Kuruluş'ta hesabınızı seçin.
- Depo'damsdocs-django-postgresql-sample-app öğesini seçin.
- Branch'testarter-no-infra'yı seçin. Bu, Azure ile ilgili dosyalar veya yapılandırmalar olmadan örnek uygulamanızla birlikte çalıştığınız dalla aynıdır.
- Kimlik doğrulama türü içinKullanıcı tarafından atanan kimlik'i seçin.
- Üstteki menüde Kaydet'i seçin.
App Service,
.github/workflowsdizinde seçilen GitHub deposuna bir iş akışı dosyası işler. Varsayılan olarak, dağıtım merkezi, iş akışının Microsoft Entra (OIDC kimlik doğrulaması) kullanarak kimlik doğrulaması yapabilmesi için kullanıcıya atanmış bir kimlik oluşturur. Alternatif kimlik doğrulama seçenekleri için bkz. GitHub Actions kullanarak App Service'e dağıtma.
Adım 3: Örnek çatalınızın GitHub kod alanına dönün ve komutunu çalıştırın git pull origin starter-no-infra.
Bu, yeni yüklenen iş akışı dosyasını kod alanınıza çeker.
4. Adım (Seçenek 1: GitHub Copilot ile):
- Sohbet görünümünü seçip 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 azureproject/development.py ve azureproject/production.py'de nasıl yapılandırıldığı hakkında size bazı açıklamalar verebilir.
- "@workspace Üretim modunda uygulamam, Django istemci türünü kullanarak PostgreSQL esnek sunucusuna bağlanmak için Azure Hizmet Bağlayıcısı'nı kullanan bir App Service web uygulamasında çalışıyor. Kullanmam gereken ortam değişkeni adları nelerdir?" Copilot, aşağıdaki 2. Seçenek: GitHub Copilot olmadan adımlarına benzer bir kod önerisi verebilir ve hatta azureproject/production.py dosyasında değişiklik yapmanızı bile söyleyebilir.
- Gezginde azureproject/production.py açın ve kod önerisini ekleyin.
- "@workspace'a şunu sorun: 'App Service uygulamam, Django istemci türünü kullanarak Redis için Bir Önbelleğe bağlanmak amacıyla Azure Hizmet Bağlayıcıyı da kullanıyor." Hangi ortam değişkeni adlarını kullanmam gerekiyor?*" Copilot, aşağıdaki GitHub Copilot adımları olmadan Seçenek 2'dekine benzer bir kod önerisi verebilir ve hatta azureproject/production.py dosyasında değişiklik yapmanızı bile söyleyebilir.
- 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?.
4. Adım (Seçenek 2: GitHub Copilot olmadan):
- Gezginde azureproject/production.py açın.
- Açıklamalı kodu (satır 29-48) bulun ve açıklamasını kaldırın.
Bu işlem
AZURE_POSTGRESQL_USER,AZURE_POSTGRESQL_PASSWORD,AZURE_POSTGRESQL_HOST,AZURE_POSTGRESQL_NAMEveAZURE_REDIS_CONNECTIONSTRINGkullanarak PostgreSQL ve Redis bağlantıları oluşturur.
5. Adım:
- Kaynak Denetimi uzantısını seçin.
- Metin kutusuna,
Configure Azure database and cache connectionsgibi bir taahhüt mesajı 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'i seçin, ardından Tamam ile onaylayın.
6. Adım: Azure portalında Dağıtım Merkezi sayfasına geri dönün:
- Yeni dağıtım çalıştırmasını görmek için Günlükler sekmesini ve ardından Yenile'yi seçin.
- Dağıtım işleminin günlük öğesinde, en son zaman damgasını içeren Derleme/Dağıtma Günlükleri girişini seçin.
7. 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östermesini bekleyin. Yaklaşık 5 dakika sürer.
Sorun mu yaşıyorsunuz? Sorun giderme kılavuzuna bakın.
5. Veritabanı şeması oluşturma
PostgreSQL veritabanı sanal ağ tarafından korunduğunda , Django veritabanı geçişlerini çalıştırmanın en kolay yolu App Service'te Linux kapsayıcısı ile bir SSH oturumundadır.
1. Adım: App Service sayfasına geri dönün, soldaki menüden
- Geliştirme Araçları>SSH'yi seçin.
- Git'i seçin.
2. Adım: SSH oturumunda komutunu çalıştırın python manage.py migrate. Başarılı olursa App Service 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. SSH oturumu, python manage.py gibi yaygın komutlar çalıştırmak için, örneğin python manage.py createsuperuser ile kullanıcı oluşturma komutunu kullanarak, kullanışlıdır. Daha fazla bilgi için django django-admin ve manage.py belgelerine bakın. Web sitesinin /admin bölümüne erişmek için süper kullanıcı hesabını kullanın.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
6. Uygulamaya göz atın
1. Adım: App Service sayfasında:
- Sol menüden Genel Bakış'ı seçin.
- Uygulamanızın URL'sini seçin.
2. Adım: Listeye birkaç restoran ekleyin. Tebrikler, Azure Uygulaması Hizmeti'nde PostgreSQL için Azure Veritabanı güvenli bağlantısı olan bir web uygulaması çalıştırıyorsunuz.
7. Tanılama günlüklerini akışla aktarma
Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için tüm konsol günlüklerini yakalar. Örnek uygulama, aşağıda gösterildiği gibi bu özelliği gösteren deyimler içerir print() .
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
1. Adım: App Service sayfasında:
- Sol menüden İzleme> seçeneğini ve ardından App Service günlüklerini seçin.
- Uygulama günlüğü'nin altında Dosya Sistemi'ne tıklayın.
- Üstteki menüde Kaydet'i seçin.
2. Adım: Sol menüden Günlük akışı'nı seçin. Kapsayıcının içinden ve platformdan gelen günlükler de dahil olmak üzere uygulamanızın günlüklerini görürsünüz.
Python uygulamanız için Azure İzleyici'yi ayarlama konusundaki serideki Python uygulamalarında oturum açma hakkında daha fazla bilgi edinin.
8. 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.
Adım 3:
- Silme işleminizi onaylamak için kaynak grubu adını girin.
- Sil'i seçin.
2. 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, PostgreSQL için Azure Veritabanı ve Redis için Azure Cache içeren varsayılan olarak güvenli bir kaynak kümesi oluşturur.
Geliştirme kapsayıcısı zaten Azure Geliştirici CLI'sine (AZD) sahiptir.
Depo kökünden komutunu çalıştırın
azd init.azd init --template python-app-service-postgresql-infraİstendiğinde aşağıdaki yanıtları verin:
Soru Yanıt Geçerli dizin boş değil. Burada '<your-directory>' içinde bir proje başlatmak istiyor musunuz? Y Bu dosyalarla ne yapmak istiyorsunuz? Mevcut dosyalarımı değiştirmeden tut 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.komutunu çalıştırıp
azd auth loginistemi izleyerek Azure'da oturum açın:azd auth loginkomutuyla
azd provisiongerekli Azure kaynaklarını oluşturun. İstemi izleyerek Azure kaynakları için istenen aboneliği ve konumu seçin.azd provisionKomutun
azd provisiontamamlanması yaklaşık 15 dakika sürer (Redis önbelleği en çok zaman alır). Daha sonra kodunuzu App Service ile çalışacak şekilde değiştirecek ve değişiklikleriazd deployile dağıtacaksınız. 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.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. 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: Sanal ağdaki anahtar kasası ve 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.
- PostgreSQL için Azure Veritabanı esnek sunucusu: Yalnızca sanal ağ içinden erişilebilir. Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
- Özel DNS bölgesi: Sanal ağdaki PostgreSQL sunucusunun DNS çözümlemesini etkinleştirir.
- 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.
- Redis için Azure Cache: Yalnızca özel uç noktasının arkasından erişilebilir.
- Anahtar kasası: Yalnızca özel uç noktasının arkasından erişilebilir. App Service uygulaması için gizli bilgileri yönetmek amacıyla kullanılır.
Komut kaynak oluşturmayı ve uygulama kodunu ilk kez dağıtmayı tamamladıktan sonra, Azure'daki veritabanına bağlanmak için küçük değişiklikler yapmanız gerektiğinden dağıtılan örnek uygulama henüz çalışmaz.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
3. Veritabanına bağlantı dizesini kullanarak erişin
Kullandığınız AZD şablonu, sizin için zaten uygulama ayarları olarak bağlantı değişkenlerini oluşturmuş ve size kolaylık sağlamak için bunları terminale çıkış olarak göndermektedir. Uygulama ayarları, bağlantı gizli dizilerini kod deponuzun dışında tutmanın bir yoludur.
AZD çıkışında
AZURE_POSTGRESQL_USER,AZURE_POSTGRESQL_PASSWORD,AZURE_POSTGRESQL_HOST,AZURE_POSTGRESQL_NAMEveAZURE_REDIS_CONNECTIONSTRINGayarlarını bulun. Gizli bilgileri güvende tutmak için yalnızca ayar adları görüntülenir. AZD çıkışında şu şekilde görünürler:App Service app has the following connection settings: - AZURE_POSTGRESQL_NAME - AZURE_POSTGRESQL_HOST - AZURE_POSTGRESQL_USER - AZURE_POSTGRESQL_PASSWORD - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPESize kolaylık sağlamak için AZD şablonu size uygulamanın uygulama ayarları sayfasının doğrudan bağlantısını gösterir. Bağlantıyı bulun ve yeni bir tarayıcı sekmesinde açın.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
4. Örnek kodu değiştirme ve yeniden dağıtma
GitHub kod alanında Sohbet görünümünü ve ardından öğesini seçerek + oturumu başlatın.
"@workspace Uygulama veritabanına nasıl bağlanır? " Copilot, bağlantı ayarlarının azureproject/development.py ve azureproject/production.py'de nasıl yapılandırıldığı hakkında size bazı açıklamalar verebilir.
"@workspace Üretim modunda uygulamam, Django istemci türünü kullanarak PostgreSQL esnek sunucusuna bağlanmak için Azure Hizmet Bağlayıcısı'nı kullanan bir App Service web uygulamasında çalışıyor. Kullanmam gereken ortam değişkeni adları nelerdir?" Copilot, aşağıdaki 2. Seçenek: GitHub Copilot olmadan adımlarına benzer bir kod önerisi verebilir ve hatta azureproject/production.py dosyasında değişiklik yapmanızı bile söyleyebilir.
Gezginde azureproject/production.py açın ve 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?.
Terminalde
azd deploykomutunu çalıştırın.azd deploy
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
5. Veritabanı şeması oluşturma
PostgreSQL veritabanı sanal ağ tarafından korunduğunda, Django veritabanı geçişlerini çalıştırmanın en kolay yolu App Service'te Linux kapsayıcısı ile bir SSH oturumundadır.
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 komutunu çalıştırın
python manage.py migrate. Başarılı olursa App Service veritabanına başarıyla bağlanıyor.Not
Yalnızca
/homeiçindeki dosyalarda yapılan değişiklikler, uygulama yeniden başlatıldığında kalıcıdır. dışındaki/homedeğişiklikler kalıcı olmaz.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
6. 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ç restoran ekleyin.
Tebrikler, Azure Uygulaması Hizmeti'nde PostgreSQL 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.
7. Tanılama günlüklerini akışla aktarma
Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsol günlüklerini yakalayabilir. Kolaylık sağlamak amacıyla, AZD şablonu yerel dosya sistemine kaydetmeyi zaten etkinleştirmiştir ve logları bir Log Analytics çalışma alanına göndermektedir.
Örnek uygulama, bu özelliği göstermek için print() ifadelerini, aşağıdaki kod parçacığında gösterildiği gibi içerir.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
AZD çıkışında App Service günlüklerinin akışının bağlantısını bulun ve tarayıcıda bu bağlantıya gidin.
Stream App Service logs at: <URL>
Python uygulamanız için Azure İzleyici'yi ayarlama konusundaki serideki Python uygulamalarında oturum açma hakkında daha fazla bilgi edinin.
Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.
8. 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
Bu öğreticide çalışmaya çalışırken karşılaşabileceğiniz sorunlar ve bunları çözme adımları aşağıda listelenmiştir.
SSH oturumuna bağlanamıyorum
SSH oturumuna bağlanamıyorsanız uygulamanın kendisi başlatılamadı. Ayrıntılar için tanılama günlüklerine bakın. Örneğin, gibi KeyError: 'AZURE_POSTGRESQL_HOST'bir hata görürseniz bu, ortam değişkeninin eksik olduğu anlamına gelebilir (uygulama ayarını kaldırmış olabilirsiniz).
Veritabanı geçişlerini çalıştırırken hata alıyorum
Veritabanına bağlanmayla ilgili hatalarla karşılaşırsanız, uygulama ayarlarının (AZURE_POSTGRESQL_USER, AZURE_POSTGRESQL_PASSWORD, AZURE_POSTGRESQL_HOSTve AZURE_POSTGRESQL_NAME) değiştirilip değiştirilmediğini veya silindiğini denetleyin. Bu bağlantı dizesi olmadan, geçiş komutu veritabanıyla iletişim kuramaz.
Sık sorulan sorular
- Bu kurulumun maliyeti ne kadardır?
- Diğer araçlarla sanal ağın arkasında güvenliği sağlanan PostgreSQL sunucusuna nasıl bağlanabilirim?
- Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?
- Django örneği Azure App Service'te çalışacak şekilde nasıl yapılandırılır?
- SECRET_KEY uygulama ayarını Key Vault başvurusu olarak nasıl değiştirebilirim?
- GitHub Actions dağıtımı sırasında hataları nasıl ayıklarım?
- 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ği sağlanan PostgreSQL sunucusuna nasıl bağlanabilirim?
- Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?
- Django örneği Azure App Service'te çalışacak şekilde nasıl yapılandırılır?
- GitHub Actions dağıtımı sırasında hataları nasıl ayıklarım?
- 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ı.
- PostgreSQL esnek sunucusu, en düşük depolama boyutu ve artırılıp azaltılabilen Standard_B1ms en düşük patlama katmanında oluşturulur. Bkz. PostgreSQL için Azure Veritabanı fiyatlandırması.
- 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 bir şekilde korunmuş PostgreSQL sunucusuna nasıl bağlanabilirim?
- Komut satırı aracından temel erişim için uygulamanın SSH oturumundan çalıştırabilirsiniz
psql. - Bir masaüstü aracından bağlanmak için makinenizin sanal ağ içinde olması gerekir. Örneğin, alt ağlardan birine bağlı bir Azure VM veya Azure sanal ağıyla siteden siteye VPN bağlantısı olan bir şirket içi ağda bulunan bir makine olabilir.
- Ayrıca Azure Cloud Shell'i sanal ağ ile tümleştirebilirsiniz.
Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?
App Service'ten otomatik olarak oluşturulan iş akışı dosyası örnek olarak alındığında, her git push yeni bir derleme ve dağıtım çalıştırmasını başlatır. GitHub deposunun yerel bir kopyasından istediğiniz güncelleştirmeleri yapar ve GitHub'a gönderebilirsiniz. Örneğin:
git add .
git commit -m "<some-message>"
git push origin main
Django örneği Azure Uygulaması Hizmetinde çalışacak şekilde nasıl yapılandırılır?
Django örnek uygulamasıazureproject/production.py dosyasındaki ayarları Yapılandırarak Azure App Service'te çalışabilmesini sağlar. Bu değişiklikler, Django'yu üretim ortamına dağıtmada yaygındır ve App Service'e özgü değildir.
Django, gelen isteklerde HTTP_HOST üst bilgisini doğrular. Örnek kod, Uygulamanın etki alanı adını Django'nun
WEBSITE_HOSTNAMEayarına eklemek için App Service'teki ortam değişkenini kullanır.# Configure the domain name using the environment variable # that Azure automatically creates for us. ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []Django , üretimde statik dosyaların sunulmasını desteklemez. Bu öğreticide, dosyaların sunulmasını etkinleştirmek için WhiteNoise kullanırsınız. WhiteNoise paketi requirements.txt ile zaten yüklüdür ve ara yazılımı listeye eklenir.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',Ardından statik dosya ayarları Django belgelerine göre yapılandırılır.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Daha fazla bilgi için bkz . Django uygulamaları için üretim ayarları.
SECRET_KEY uygulama ayarını Key Vault referansı olarak nasıl değiştiririm?
Yukarıdaki portal adımlarından, SECRET_KEY aşağıdaki Azure CLI komutlarını çalıştırarak öğesini bir Key Vault başvurusuna dönüştürebilirsiniz.
# 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=djangoSecretKey
# 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 $(python -c 'import secrets; print(secrets.token_hex())')
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "SECRET_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Aynı işlemi portalda da yapabilirsiniz. Daha fazla bilgi için bkz.
GitHub Actions dağıtımı sırasında hata ayıklama Nasıl yaparım??
Otomatik olarak oluşturulan GitHub iş akışı dosyasında bir adım başarısız olursa, daha ayrıntılı çıkış oluşturmak için başarısız olan komutu değiştirmeyi deneyin. Örneğin, python komutuna -d seçeneğini ekleyerek daha fazla çıktı alabilirsiniz. App Service'e başka bir dağıtım tetiklemek için değişikliklerinizi işleyin ve gönderebilirsiniz.
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 etmiş olabilirsiniz. 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 değişiklikleri önerebilir ve (ile
@workspace) değişikliklerin yapılacağı yeri bile önerebilir, ancak değişiklikleri sizin için yapmasına izin verilmez. Önerilen değişiklikleri eklemek ve test etmek size bağlı.
Sonraki adımlar
Özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğrenmek için sonraki öğreticiye ilerleyin.
App Service'in python uygulamasını nasıl çalıştıracağınızı öğrenin: