IIS için Python web uygulamalarını yapılandırma

Internet Information Services'ı (IIS) bir Windows bilgisayarında web sunucusu olarak kullandığınızda (Azure'da Windows sanal makineleri dahil), Python web uygulamasını IIS'nin Python kodunu düzgün şekilde işlemesini sağlayacak şekilde yapılandırmanız gerekir. Yapılandırma, Python web uygulamasının dosyasındaki web.config ayarlar aracılığıyla gerçekleştirilir. Bu makalede, gerekli ayarların nasıl yapılandırıldığı açıklanmaktadır.

Önkoşullar

  • Windows üzerinde Python yüklü. Bir web uygulamasını çalıştırmak için, önce Python yorumlayıcılarını yükleme konusunda açıklandığı gibi gerekli Python sürümünüzü doğrudan Windows ana bilgisayar makinesine yükleyin.

    • Yorumlayıcının python.exe konumunu belirleyin. Kolaylık sağlamak için bu konumu PATH ortam değişkeninize ekleyebilirsiniz.
  • Gerekli paketler yüklendi. Ayrılmış bir konak için, uygulamanızı sanal ortam yerine çalıştırmak için genel Python ortamını kullanabilirsiniz. Buna göre, komutunu çalıştırarak pip install -r requirements.txt uygulamanızın tüm gereksinimlerini genel ortama yükleyebilirsiniz.

Web.config'i Python yorumlayıcısını işaret etmek için ayarlayın

web.config Python uygulamanızın dosyası, Windows üzerinde çalışan IIS web sunucusuna (sürüm 7 veya üzeri) HttpPlatformHandler (önerilen) veya FastCGI aracılığıyla Python isteklerini nasıl işlemesi gerektiği hakkında bilgi verir. Visual Studio 2015 ve önceki sürümleri bu değişiklikleri otomatik olarak yapar. Visual Studio 2017 ve üzeri için dosyayı el ile değiştirmeniz web.config gerekir.

Projeniz henüz bir web.config dosya içermiyorsa, proje dizinine sağ tıklayıp Yeni Öğe Ekle'yi > seçip boş web.config bir XML dosyası arayarak veya oluşturarak web.config bir dosya ekleyebilirsiniz.

HttpPlatformHandler'ı yapılandırma

HttpPlatform modülü, yuva bağlantılarını doğrudan tek başına python işlemine geçirir. Bu geçiş, istediğiniz herhangi bir web sunucusunu çalıştırmanıza olanak tanır, ancak yerel bir web sunucusu çalıştıran bir başlangıç betiği gerektirir. Bu yaklaşım genellikle Flask veya Django gibi bir Python web çerçevesi kullanılarak yapılır. Betiği dosyanın öğesinde <httpPlatform>web.config belirtirsiniz. özniteliği, processPath site uzantısının Python yorumlayıcısını gösterir. arguments özniteliği, yerel bir web sunucusu çalıştıran başlangıç betiğinizi ve sağlamak runserver.pyistediğiniz bağımsız değişkenleri gösterir:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="c:\python36-32\python.exe"
                  arguments="c:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="c:\home\LogFiles\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

Bu örnekte ortam değişkeni, HTTP_PLATFORM_PORT yerel sunucunuzun bağlantısı localhostiçin dinlemesi gereken bağlantı noktasını içerir. Bu örnekte, başka bir ortam değişkeninin nasıl oluşturulacağı da gösterilmektedir. SERVER_PORT Ortam değişkenlerini gerektiği gibi oluşturabilir ve atayabilirsiniz.

FastCGI işleyicisini yapılandırma

FastCGI, istek düzeyinde çalışan bir arabirimdir. IIS gelen bağlantıları alır ve her isteği bir veya daha fazla kalıcı Python işlemi içinde çalışan bir WSGI uygulamasına iletir.

Not

WFastCGI projesi artık korunmadiğinden uygulamalarınızı yapılandırmak için HttpPlatformHandler kullanmanızı öneririz.

FastCGI'yi kullanmak için önce pypi.org/project/wfastcgi/'da açıklandığı gibi wfastcgi paketini yükleyin ve yapılandırın.

Ardından, uygulamanızın web.config dosyasını yürütülebilir dosyanın tam yollarını python.exe ve wfastcgi.py dosyayı PythonHandler anahtara içerecek şekilde değiştirin. Aşağıdaki adımlarda Python'ın c:\python36-32 klasörüne yüklendiği ve uygulama kodunun c:\home\site\wwwroot klasöründe olduğu varsayılır. Yollarınız için bu değerleri uygun şekilde ayarlayın.

  1. Dosyadaki girdiyi PythonHandlerweb.config , yolun Python yükleme konumuyla eşleşmesi için değiştirin. Daha fazla bilgi için bkz. IIS Yapılandırma Başvurusu (iis.net).

    <system.webServer>
       <handlers>
         <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
             scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
             resourceType="Unspecified" requireAccess="Script"/>
       </handlers>
    </system.webServer>
    
  2. <appSettings> Dosyanın bölümünde web.config , WSGI_LOG (isteğe bağlı) ve PYTHONPATHiçin anahtarlar WSGI_HANDLERekleyin:

    <appSettings>
       <add key="PYTHONPATH" value="c:\home\site\wwwroot"/>
       <!-- The handler here is specific to Bottle; see the next section. -->
       <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
       <add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/>
    </appSettings>
    

    Bu <appSettings> değerler uygulamanızın ortam değişkenleri olarak kullanılabilir:

    • Anahtarın PYTHONPATH değeri serbestçe genişletilebilir, ancak uygulamanızın kökünü içermelidir.
    • Anahtarın WSGI_HANDLER uygulamanızdan içeri aktarılabilen bir WSGI uygulamasını işaret etmesi gerekir.
    • WSGI_LOG Anahtar isteğe bağlıdır, ancak anahtarın uygulamanızda hata ayıklaması için kullanılması önerilir.
  3. Dosyadaki girdiyi WSGI_HANDLERweb.config kullanmakta olduğunuz çerçeveye uygun olarak ayarlayın:

    • Şişe: Bu örnekte gösterildiği gibi değerin app.wsgi_app arkasına parantez ekleyin. Nesne bir değişken yerine bir işlev olduğundan parantezler gereklidir. Dosyada söz dizimini app.py görebilirsiniz.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: Değeri <project_name>.app projenizin adıyla eşleşecek şekilde <project_name> değiştirinWSGI_HANDLER. Dosyadaki deyimine bakarak tam tanımlayıcıyı from <project_name> import apprunserver.py bulabilirsiniz. Örneğin, projenin adı FlaskAzurePublishExampleise girdi aşağıdaki gibi görünür:

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django: Django projeleri için dosyada web.config iki değişiklik yapılması gerekiyor.

      • değerini olarak WSGI_HANDLERdjango.core.wsgi.get_wsgi_application()değiştirin. nesnesi dosyadadır wsgi.py .

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Anahtarın girdisinin hemen arkasına aşağıdaki girdiyi WSGI_HANDLER ekleyin. değerini DjangoAzurePublishExample projenizin adıyla değiştirin:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Yalnızca Django uygulamaları: Django projesinin settings.py dosyasında, girişe ALLOWED_HOSTS site URL etki alanınızı veya IP adresinizi ekleyin. '1.2.3.4' değerini URL veya IP adresinizle değiştirin:

    # Change the URL or IP address to your specific site
    ALLOWED_HOSTS = ['1.2.3.4']
    

    URL'nizi dizi sonuçlarına eklemezseniz aşağıdaki hatayı görürsünüz:

    DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
    

Dizi boş olduğunda, Django otomatik olarak ve '127.0.0.1' konak olarak izin verir'localhost'. Üretim URL'nizi eklerseniz, bu konak sitelerine otomatik olarak izin verilmez. Bu nedenle, dosyanın ayrı geliştirme ve üretim kopyalarını settings.py tutmak veya çalışma zamanı değerlerini denetlemek için ortam değişkenlerini kullanmak isteyebilirsiniz.

IIS'ye veya Windows sanal makinesine dağıtma

Projenizde doğru web.config dosya varsa, Çözüm Gezgini'den IIS çalıştıran bilgisayara yayımlayabilirsiniz. Projeye sağ tıklayın, Yayımla'yı ve ardından IIS, FTP vb. seçin. Bu durumda, Visual Studio yalnızca proje dosyalarını sunucuya kopyalar. Tüm sunucu tarafı yapılandırmaları sizin sorumluluğundadır.