Aracılığıyla paylaş


Azure App Service'te Python uygulamaları için özel başlangıç dosyası yapılandırma

Bu makalede, Azure App Service'te barındırılan bir Python web uygulaması için özel başlangıç dosyasının ne zaman ve nasıl yapılandıracağınızı öğreneceksiniz. Yerel geliştirme için bir başlangıç dosyası gerekli olmasa da, Azure App Service dağıtılan web uygulamanızı sağlanan başlatma komutlarını kullanabilen bir Docker kapsayıcısı içinde çalıştırır.

Aşağıdaki durumlarda özel bir başlangıç dosyası gerekir:

  • Özel Gunicorn Bağımsız Değişkenleri: Gunicorn varsayılan web sunucusunu varsayılanlarının ötesindeki ek bağımsız değişkenlerle başlatmak istiyorsunuz.--bind=0.0.0.0 --timeout 600

  • Alternatif Çerçeveler veya Sunucular: Uygulamanız Flask veya Django dışında bir çerçeveyle oluşturulmuş veya Gunicorn dışında farklı bir web sunucusu kullanmak istiyorsunuz.

  • Standart Olmayan Flask Uygulama Yapısı: Ana kod dosyası app.py veya application.py* dışında bir adla adlandırılmış bir Flask uygulamanız var veya uygulama nesnesi app başka bir adla adlandırılıyor.

Başka bir deyişle, projenizde adlı bir Flask uygulama nesnesi bulunan kök klasörde bir app.py veya app dosyası yoksa özel bir başlangıç komutu gerekir.

Daha fazla bilgi için bkz . Python Uygulamalarını Yapılandırma - Kapsayıcı başlatma işlemi.

Başlangıç dosyası oluşturma

Özel bir başlangıç dosyasına ihtiyacınız olduğunda aşağıdaki adımları kullanın:

  1. Projenizde startup.txt, startup.sh adlı bir dosya veya başlangıç komutlarınızı içeren başka bir ad oluşturun. Django, Flask ve diğer çerçevelerle ilgili ayrıntılar için bu makalenin sonraki bölümlerine bakın.

    Başlangıç dosyası gerekirse birden çok komut içerebilir.

  2. Dosyanın uygulamanın geri kalanıyla dağıtılabilmesi için dosyayı kod deponuza kaydedin.

  3. Visual Studio Code'da Etkinlik Çubuğu'nda Azure simgesini seçin, KAYNAKLAR'ı genişletin, aboneliğinizi bulun ve genişletin, App Services'i genişletin, App Service'e sağ tıklayın ve Portalda Aç'ı seçin.

  4. Azure portalında, soldaki hizmet menüsünden Ayarlar>Yapılandırması'nı seçin. App Service'in Yapılandırma sayfasında Genel ayarlar'ı seçin, Başlangıç dosyanızın adını ( startup.txt veya startup.sh gibi) Yığın ayarları>Başlangıç Komutu'nun altına girin ve kaydet'i seçin.

    Uyarı

    Başlangıç komut dosyası kullanmak yerine, başlangıç komutunun kendisini doğrudan Azure portalındaki Başlangıç Komutu alanına yerleştirebilirsiniz. Yapılandırmanızı deponuzda depoladığı için bir başlangıç komut dosyası kullanmanız önerilir. Bu, sürüm denetiminin değişiklikleri izlemesini sağlar ve diğer Azure App Service örneklerine yeniden dağıtmayı kolaylaştırır.

  5. App Service'i yeniden başlatmanız istendiğinde Devam'ı seçin.

    Uygulama kodunuzu dağıtmadan önce Azure App Service sitenize erişiyorsanız, isteği işlemek için kullanılabilir kod olmadığından "Uygulama Hatası" görüntülenir.

Django başlangıç komutları

Varsayılan olarak, Azure App Service wsgi.py dosyanızı içeren klasörü bulur ve Gunicorn'u aşağıdaki komutla başlatır:

# <module> is the folder that contains wsgi.py. If you need to use a subfolder,
# specify the parent of <module> using --chdir.
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi

Zaman aşımı değerini 1.200 saniyeye--timeout 1200() çıkarmak gibi herhangi bir Gunicorn bağımsız değişkenini değiştirmek istiyorsanız, özel bir başlangıç komut dosyası oluşturun. Bu, varsayılan ayarları belirli gereksinimlerinizle geçersiz kılmanıza olanak tanır. Daha fazla bilgi için bkz . Kapsayıcı başlatma işlemi - Django uygulaması.

Flask başlangıç komutları

Varsayılan olarak, Linux üzerinde App Service Flask uygulamanızın aşağıdaki ölçütlere uyduğunu varsayar:

  • WSGI çağrılabilen adıdır app.
  • Uygulama kodu, application.py veya app.py adlı bir dosyada bulunur.
  • Uygulama dosyası, uygulamanın kök klasöründe bulunur.

Projeniz bu yapıdan farklıysa, özel başlangıç komutunuz uygulama nesnesinin konumunu file:app_object biçiminde tanımlamalıdır:

  • Farklı dosya adı ve/veya uygulama nesnesi adı: Uygulamanın ana kod dosyası hello.py ve uygulama nesnesi olarak adlandırılırsa myapp, başlangıç komutu aşağıdaki gibidir:

    gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
    
  • Başlangıç dosyası bir alt klasörde: Başlangıç dosyası myapp/website.py ve uygulama nesnesi ise appklasörü belirtmek için Gunicorn'un --chdir bağımsız değişkenini kullanın ve başlangıç dosyasını ve uygulama nesnesini her zamanki gibi adlandırın:

    gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:app
    
  • Başlangıç dosyası bir modülün içindedir: python-sample-vscode-flask-tutorial kodunda, webapp.py başlangıç dosyası __init__.py dosyası içeren bir modül olan klasör hello_app içinde yer alır. Uygulama nesnesi adlandırılır app ve __init__.py içinde tanımlanır ve webapp.py göreli içeri aktarma kullanır.

    Bu düzenleme nedeniyle, Gunicorn üzerinde webapp:app işaret etmek, "Paket dışı göreli içeri aktarma girişimi" hatasını verir ve uygulama başlatılamaz.

    Bu durumda, uygulama nesnesini modülden içeri aktaran bir dolgu dosyası oluşturun ve gunicorn'un dolguyu kullanarak uygulamayı başlatmasını sağlayın. Örneğin python-sample-vscode-flask-tutorial kodu aşağıdaki içeriklere sahip startup.py içerir:

    from hello_app.webapp import app
    

    Başlangıç komutu şu şekildedir:

    gunicorn --bind=0.0.0.0 --workers=4 startup:app
    

Daha fazla bilgi için bkz . Kapsayıcı başlatma işlemi - Flask uygulaması.

Diğer çerçeveler ve web sunucuları

Python uygulamalarını çalıştıran App Service kapsayıcısı, Gunicorn web sunucusuyla birlikte varsayılan olarak Django ve Flask yüklüdür.

Django veya Flask dışında bir çerçeve ( Falcon, FastAPI vb.) veya farklı bir web sunucusu kullanmak için:

  • Çerçeveyi ve/veya web sunucusunurequirements.txtdosyanıza ekleyin.

  • Başlangıç komutunuzda , Flask'in önceki bölümünde açıklandığı gibi çağrılabilen WSGI'yi belirleyin.

  • Gunicorn dışında bir web sunucusu başlatmak için sunucuyu doğrudan çağırmak yerine bir python -m komut kullanın. Örneğin aşağıdaki komut, WSGI çağrılabilen öğesinin adlandırıldığını ve app içinde bulunduğunu varsayarak uvicorn sunucusunu başlatır:

    python -m uvicorn application:app --host 0.0.0.0
    

    python -m kullanırsınız çünkü requirements.txtaracılığıyla yüklenen web sunucuları Python genel ortamına eklenmez ve bu nedenle doğrudan çağrılamaz. python -m komutu, geçerli sanal ortamın içinden sunucuyu çağırır.