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 makalede, Linux üzerinde Azure App Service'e python web uygulaması dağıtmak için GitHub Actions'daki sürekli tümleştirme ve sürekli teslim (CI/CD) platformunun nasıl kullanılacağı açıklanmaktadır. GitHub Actions iş akışınız, kodu otomatik olarak inşâ eder ve her depoya işleme yapıldığında App Service örneğine dağıtır. GitHub Actions iş akışınıza test betikleri, güvenlik denetimleri ve çoklu dağıtımlar gibi başka otomasyonlar ekleyebilirsiniz.
Uygulama kodu için depo oluşturma
Bu makaledeki yordamları tamamlamak için GitHub deposuna kaydedilmiş bir Python web uygulamasına ihtiyacınız vardır.
Mevcut uygulama: Mevcut bir Python web uygulamasını kullanmak için uygulamanın bir GitHub deposuna işlendiğinden emin olun.
Yeni uygulama: Yeni bir Python web uygulamasına ihtiyacınız varsa GitHub deposunu https://github.com/Microsoft/python-sample-vscode-flask-tutorial çatallayabilir ve kopyalayabilirsiniz. Örnek kod , Visual Studio Code'da Flask öğreticisini destekler ve işlevli bir Python uygulaması sağlar.
Uyarı
Uygulamanız Django ve SQLite veritabanı kullanıyorsa bu yordamlar için çalışmaz. SQLite, yerel dosya tabanlı depolama sınırlamaları nedeniyle bulutta barındırılan ortamların çoğunda desteklenmez. PostgreSQL veya Azure Cosmos DB gibi bulut uyumlu bir veritabanına geçmeyi göz önünde bulundurun. Daha fazla bilgi için bu makalenin devamında Django ile ilgili dikkat edilmesi gereken noktaları gözden geçirin .
Hedef App Service örneği oluşturma
App Service örneği oluşturmanın en hızlı yolu, etkileşimli Azure Cloud Shell aracılığıyla Azure komut satırı arabirimini (CLI) kullanmaktır. Cloud Shell , Git ve Azure CLI'yi içerir. Aşağıdaki yordamda az webapp up komutunu kullanarak hem App Service örneğini oluşturur hem de uygulamanızın ilk dağıtımını yaparsınız.
https://portal.azure.com adresinden Azure portalında oturum açın.
Portal araç çubuğunda Cloud Shell seçeneğini belirleyerek Azure CLI'yi açın:
Cloud Shell'de açılan menüden Bash seçeneğini belirleyin:
Cloud Shell'de git clone komutunu kullanarak deponuzu kopyalayın .
Tavsiye
Komutları veya metni Cloud Shell'e yapıştırmak için Ctrl+Shift+V klavye kısayolunu kullanın veya sağ tıklayıp bağlam menüsünden Yapıştır'ı seçin.
Flask örnek uygulaması için aşağıdaki komutu kullanabilirsiniz.
<github-user>
bölümünü, deposunu çatalladığınız GitHub hesabının adıyla değiştirin.git clone https://github.com/<github-user>/python-sample-vscode-flask-tutorial.git
Uygulamanız farklı bir depodaysa, belirli bir depo için GitHub Actions'ı ayarlayın.
<github-user>
kısmını, depoyu çatalladığınız GitHub hesabının adıyla değiştirin ve<repo-name>
yerine gerçek depo adını yazın:git clone https://github.com/<github-user>/<repo-name>.git
Uyarı
Cloud Shell, cloud-shell-storage-your-region<> adlı kaynak grubundaki bir Azure Depolama hesabı tarafından desteklenir. Bu depolama hesabı, kopyalanan depoyu depolayan Cloud Shell dosya sisteminin bir görüntüsünü içerir. Bu depolama için küçük bir maliyet vardır. Bu makaleyi tamamladıktan sonra, oluşturduğunuz diğer kaynaklarla birlikte depolama hesabını silebilirsiniz.
Cloud Shell'de dizini Python uygulamanızın depo klasörüne dönüştürerek az webapp up komutunun uygulamayı Python olarak tanımasını sağlayın. Flask örnek uygulaması için aşağıdaki komutu kullanırsınız:
cd python-sample-vscode-flask-tutorial
Cloud Shell'de az webapp up komutunu kullanarak bir App Service örneği oluşturun ve uygulamanız için ilk dağıtımı yapın:
az webapp up --name <app-service-name> --runtime "PYTHON:3.9"
Yer tutucu için
<app-service-name>
Azure'da benzersiz bir App Service adı belirtin. Ad 3-60 karakter uzunluğunda olmalıdır ve yalnızca harf, sayı ve kısa çizgi içerebilir. Ad bir harfle başlamalı ve bir harf veya numarayla bitmelidir.Sisteminizdeki kullanılabilir çalışma zamanlarının listesi için komutunu kullanın
az webapp list-runtimes
.komutuna çalışma zamanı değerini girdiğinizde, Python ana ve ikincil sürümü olan
X.Y
biçimini kullanınPYTHON:X.Y
.Parametresini kullanarak
--location
App Service örneğinin bölge konumunu da belirtebilirsiniz. Kullanılabilir konumların listesi için komutunu kullanınaz account list-locations --output table
.
Uygulamanızın özel bir başlangıç betiği varsa, betiği başlatmak için az webapp config komutunu kullanın.
Uygulamanızın özel başlangıç betiği yoksa sonraki adıma geçin.
Flask örnek uygulaması için aşağıdaki komutu çalıştırarak startup.txt dosyasındaki başlangıç betiğine erişmeniz gerekir:
az webapp config set \ --resource-group <resource-group-name> \ --name <app-service-name> \ --startup-file startup.txt
<resource-group-name>
ve<app-service-name>
yer tutucularına kaynak grubu adınızı ve App Service örneği adınızı girin. Kaynak grubu adını bulmak için öncekiaz webapp up
komutun çıkışını denetleyin. Kaynak grubu adı, Azure hesap adını ve ardından _rg sonekini içerir, örneğin, <azure-account-name>_rg_.
Çalışan uygulamayı görüntülemek için bir tarayıcı açın ve App Service örneğinizin dağıtım uç noktasına gidin. Aşağıdaki URL'de yer tutucuyu
<app-service-name>
App Service örnek adınızla değiştirin:http://<app-service-name>.azurewebsites.net
Genel bir sayfa görüyorsanız App Service örneğinin başlatılması için birkaç saniye bekleyin ve sayfayı yenileyin.
- Genel bir sayfa görmeye devam ederseniz, doğru klasörden dağıttığınızı teyit edin.
- Flask örnek uygulaması için python-sample-vscode-flask-tutorial klasöründen dağıtıldığından emin olun. Ayrıca başlangıç komutunu doğru ayarladığınızdan da denetleyin.
App Service'te sürekli dağıtımı ayarlama
Sonraki yordamda sürekli teslimi (CD) ayarlarsınız. Bu, bir iş akışı tetiklendiğinde yeni bir kod dağıtımının gerçekleşdiği anlamına gelir. Makale örneğindeki tetikleyici, deponuzun ana dalında yapılan çekme isteği (PR) gibi herhangi bir değişikliktir.
Cloud Shell'de, python-sample-vscode-flask-tutorial gibi bir uygulama alt klasöründe değil, sisteminizin (
~
) kök dizininde olduğunuzu onaylayın.az webapp deployment github-actions add komutuyla GitHub Actions ekleyin. Yer tutucuları kendi değerlerinizle değiştirin:
az webapp deployment github-actions add \ --repo "<github-user>/<github-repo>" \ --resource-group <resource-group-name> \ --branch <branch-name> \ --name <app-service-name> \ --login-with-github
parametresi,
--login-with-github
kişisel erişim belirteci almak için etkileşimli bir yöntem kullanır. İstemleri izleyin ve kimlik doğrulamasını tamamlayın.Sistem aynı App Service örneği adına sahip mevcut bir iş akışı dosyasıyla karşılaşırsa, istemleri izleyerek iş akışının üzerine yazıp yazmayacağını seçin.
--force
parametresini komutla birlikte kullanarak çakışan iş akışlarının üzerine otomatik olarak yazabilirsiniz.
Komut
add
aşağıdaki görevleri tamamlar:- Deponuzda .github/workflows/<workflow-name>.yml yolunda yeni bir iş akışı dosyası oluşturur. Dosya adı App Service örneğinizin adını içerir.
- App Service örneğiniz için gizli anahtarlar içeren bir yayımlama profili getirir ve bunu GitHub eylem gizli anahtarı olarak ekler. Gizlinin adı AZUREAPPSERVICE_PUBLISHPROFILE_ ile başlar. Bu gizli bilgiye iş akışı dosyasında başvurulmaktadır.
az webapp deployment source show komutuyla kaynak denetimi dağıtım yapılandırmasının ayrıntılarını alın. Yer tutucu parametrelerini kendi değerlerinizle değiştirin:
az webapp deployment source show \ --name <app-service-name> \ --resource-group <resource-group-name>
Komut çıkışında,
repoUrl
vebranch
özelliklerinin değerlerini onaylayın. Bu değerler,add
komutuyla belirttiğiniz değerlerle eşleşmelidir.
GitHub iş akışını ve eylemlerini inceleme
İş akışı tanımı, deponuzdaki /.github/workflows/ yolundaki bir YAML (.yml) dosyasında belirtilir. Bu YAML dosyası, GitHub deposuyla ilişkili otomatik bir işlem olan iş akışını oluşturan çeşitli adımları ve parametreleri içerir. GitHub'da iş akışıyla herhangi bir proje oluşturabilir, test edebilir, paketleyebilir, yayımlayabilir ve dağıtabilirsiniz.
Her iş akışı bir veya daha fazla işten oluşur ve her iş bir adım kümesidir. Her adım bir kabuk betiği veya eylemdir. Her işin iş akışı dosyasında bir Eylem bölümü vardır.
Azure App Service'e dağıtım için Python kodunuzla ayarlanan iş akışı açısından, iş akışı aşağıdaki eylemlere sahiptir:
Eylem | Açıklama |
---|---|
kasa | GitHub Actions aracısı olan bir çalıştırıcıdaki depoya göz atın. |
setup-python | Çalıştırıcıya Python yükleyin. |
appservice-build | Web uygulamasını oluşturun. |
webapps-deploy | Azure'da kimlik doğrulaması yapmak için yayımlama profili kimlik bilgilerini kullanarak web uygulamasını dağıtın. Kimlik bilgisi bir GitHub gizlisinde depolanır. |
İş akışını oluşturmak için kullanılan iş akışı şablonu Azure/actions-workflow-samples şeklindedir.
İş akışı, belirtilen dala gönderme olaylarında tetikleniyor. Olay ve dal iş akışı dosyasının başında tanımlanır. Örneğin, aşağıdaki kod parçacığı, iş akışının ana dala gönderme olaylarında tetiklenmiş olduğunu gösterir:
on:
push:
branches:
- main
OAuth yetkili uygulamaları
Sürekli dağıtımı ayarladığınızda, Azure App Service'i GitHub hesabınız için yetkili bir OAuth Uygulaması olarak yetkilendirmiş olursunuz. App Service, deponuzda .github/workflows</workflow-name>.yml yolunda bir GitHub eylem YAML dosyası oluşturmak için yetkili erişimi kullanır.
Yetkili uygulamalarınızı görmek ve GitHub hesaplarınızın altındaki izinleri iptal etmek için Ayarlar>Tümleştirmeleri/Uygulamalar'a gidin:
İş akışı yayın profili gizli anahtar
Deponuza eklenen .github/workflows/<workflow-name>.yml iş akışı dosyasında, iş akışının dağıtım işi için gereken yayımlama profili kimlik bilgileri için bir yer tutucu bulunur. Yayımlama profili bilgileri depoda şifrelenmiş olarak depolanır.
Gizliyi görüntülemek için Ayarlar>Güvenlik>Gizli ve değişkenler>Eylemler menüsüne gidin:
Bu makalede GitHub eylemi, yayımlama profili kimlik bilgileriyle kimlik doğrulaması yapar. Hizmet sorumlusu veya OpenID Connect gibi başka kimlik doğrulaması yöntemleri de vardır. Daha fazla bilgi için bkz. GitHub Actions kullanarak App Service'e dağıtma.
İş akışını çalıştırma ve test et
Son adım, depoda bir değişiklik yaparak iş akışını test etmektir.
Tarayıcıda örnek depo çatalınıza (veya kullandığınız depoya) gidin ve tetikleyicinin parçası olarak ayarladığınız dalı seçin:
Python web uygulamanızda küçük bir değişiklik yapın.
Flask öğreticisi için basit bir değişiklik:
- Tetikleyici dalının /hello-app/templates/home.html dosyasına gidin.
- Düzenle (kalem) öğesini seçin.
- Düzenleyici'de print
<p>
deyimini bulun ve "Yeniden Dağıtıldı!" metnini ekleyin
Değişikliği doğrudan çalıştığınız dala işleyin.
- Düzenleyici'de sağ üstteki Değişiklikleri işle'yi seçin. Değişiklikleri işle penceresi açılır.
- Değişiklikleri işle penceresinde işleme iletisini istediğiniz gibi değiştirin ve Değişiklikleri işle'yi seçin.
İşleme işlemi GitHub Actions iş akışını tetikler.
İş akışını el ile de tetikleyebilirsiniz:
Sürekli dağıtım için ayarlanan deponun Eylemler sekmesine gidin.
İş akışları listesinden iş akışını seçin ve ardından İş akışını çalıştır'ı seçin.
Başarısız iş akışı sorunlarını giderme
Uygulama deposunun Eylemler sekmesinde iş akışının durumunu denetleyebilirsiniz. Bu makalede oluşturulan iş akışı dosyasını incelediğinizde iki iş görürsünüz: derleme ve dağıtma. Hatırlatmak gerekirse, iş akışı Azure/actions-workflow-samples şablonunu temel alır.
Başarısız bir iş için, hatanın göstergesi için iş görevlerinin çıktısını inceleyin.
Araştırılması gereken bazı yaygın sorunlar şunlardır:
Uygulama eksik bağımlılık nedeniyle başarısız olursa requirements.txt dosyanız dağıtım sırasında işlenmez. Bu davranış, web uygulamasını bu makalede gösterildiği gibi
az webapp up
komutunu kullanarak değil de doğrudan portalda oluşturduysanız oluşur.Uygulama hizmetini portal aracılığıyla sağladıysanız derleme eylemi
SCM_DO_BUILD_DURING_DEPLOYMENT
ayarı ayarlanmamış olabilir. Bu ayar olaraktrue
ayarlanmalıdır. Otomatik olarak,az webapp up
komutu derleme eylemini ayarlar."TLS el sıkışması zaman aşımı" ile ilgili bir hata iletisi görürseniz, uygulama deposunun Eylemler sekmesinde Otomatik dağıtımı tetikle'yi seçerek iş akışını el ile çalıştırın. Zaman aşımının geçici bir sorun olup olmadığını belirleyebilirsiniz.
Bu makalede gösterildiği gibi kapsayıcı uygulaması için sürekli dağıtım ayarlarsanız, ilk iş akışı dosyası .github/workflows/<workflow-name>.yml sizin için otomatik olarak oluşturulur. Dosyayı değiştirdiyseniz, hataya neden olup olmadığını görmek için değişiklikleri kaldırın.
Dağıtım sonrası betiğini çalıştırma
Dağıtım sonrası betik, uygulama kodu tarafından beklenen ortam değişkenlerini tanımlama gibi çeşitli görevleri tamamlayabilir. Betiği uygulama kodunun bir parçası olarak ekler ve başlatma komutunu kullanarak betiği yürütürsiniz.
İş akışı YAML dosyanızda değişken değerlerini sabit kodlamaktan kaçınmak için GitHub'da değişkenleri yapılandırmayı ve betikteki değişken adlarına başvurmayı göz önünde bulundurun. Bir depo veya çalışma ortamı (hesaba bağlı depo) için şifrelenmiş sırlar oluşturabilirsiniz. Daha fazla bilgi için bkz. GitHub Actions'ta gizli bilgileri kullanma.
Django ile ilgili önemli noktaları gözden geçirin
Bu makalede daha önce belirtildiği gibi, ayrı bir veritabanı kullanıyorsanız Django uygulamalarını Linux üzerinde Azure App Service'e dağıtmak için GitHub Actions'ı kullanabilirsiniz. App Service db.sqlite3 dosyasını kilitlediğinden SQLite veritabanı kullanamazsınız ve bu da hem okuma hem de yazma işlemini engeller. Bu davranış dış veritabanını etkilemez.
App Service'te Python uygulamasını yapılandırma - Kapsayıcı başlatma işlemi makalesinde, App Service'in genellikle uygulama nesnesini içeren uygulama kodunuz içinde otomatik olarak bir wsgi.py dosyasını nasıl araydığı açıklanır. Başlatma komutunu ayarlamak için webapp config set
komutunu kullandığınızda, uygulama nesnesini içeren dosyayı belirtmek için --startup-file
parametresini kullandınız. Komut webapp config set
webapps-deploy eyleminde kullanılamaz. Bunun yerine, başlangıç komutunu belirtmek için parametresini kullanabilirsiniz startup-command
. Örneğin, aşağıdaki kod iş akışı dosyasında başlangıç komutunun nasıl belirtileceğini gösterir:
startup-command: startup.txt
Django kullanırken, uygulama kodunu dağıttıktan sonra, python manage.py migrate
komutunu kullanarak genellikle veri modellerini geçirmek istersiniz. Geçiş komutunu dağıtım sonrası betiğinde çalıştırabilirsiniz.
GitHub Actions bağlantısını kesme
GitHub Actions'ın App Service örneğinizle bağlantısını kesmek, uygulama dağıtımını yeniden yapılandırmanıza olanak tanır. Bağlantıyı kestikten sonra iş akışı dosyanıza ne olacağını ve dosyanın kaydedilip silinmeyeceğini seçebilirsiniz.
Aşağıdaki Azure CLI az webapp deployment github-actions remove komutuyla GitHub Actions'ın bağlantısını kesin . Yer tutucuları kendi değerlerinizle değiştirin:
az webapp deployment github-actions remove \
--repo "<github-username>/<github-repo>" \
--resource-group <resource-group-name> \
--branch <branch-name> \
--name <app-service-name> \
--login-with-github
Kaynakları temizle
Bu makalede oluşturulan Azure kaynaklarında ücret yansıtılmasını önlemek için App Service örneğini ve App Service Planını içeren kaynak grubunu silin.
Azure Cloud Shell de dahil olmak üzere Azure CLI'nın yüklendiği her yerde az group delete komutunu kullanarak bir kaynak grubunu silebilirsiniz:
az group delete --name <resource-group-name>
Depolama hesabını silme
Cloud Shell için küçük bir aylık ücret gerektiren dosya sistemini koruyan depolama hesabını silmek için cloud-shell-storage- ile başlayan kaynak grubunu silin. Grubun tek kullanıcısı sizseniz kaynak grubunu silmek güvenlidir. Başka kullanıcılar varsa, kaynak grubundaki bir depolama hesabını silebilirsiniz.
GitHub hesabını ve deposunu güncelleştirme
Azure kaynak grubunu silerseniz, sürekli dağıtım için bağlı olan GitHub hesabında ve deposunda aşağıdaki değişiklikleri yapmayı göz önünde bulundurun:
- Uygulama deposunda .github/workflows/<workflow-name>.yml dosyasını kaldırın.
- Uygulama deposu ayarlarında, iş akışı için oluşturulan AZUREAPPSERVICE_PUBLISHPROFILE_ gizli dizi anahtarını kaldırın.
- GitHub hesabı ayarlarında, GitHub hesabınız için yetkili bir Oauth Uygulaması olarak Azure App Service'i kaldırın.