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

Bir Windows bilgisayarda web sunucusu olarak Internet Information Services (IIS) kullandığınızda (Azure 'daWindows 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 web.config dosyasındaki 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üklemebölümünde açıklandığı gibi, ihtiyacınız olan Python sürümünü doğrudan Windows ana bilgisayar makinesine yükleyin.

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

Python yorumlayıcısını işaret etmesi için web.config'ı ayarla

Python uygulamanızın web.config 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 web.config dosyasını el ile değiştirmeniz gerekir.

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

Seçenek 1: 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 web.config dosyasının <httpPlatform> öğesinde belirtirsiniz. processPath özniteliği, 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( bu örnekte runserver.py) ve sağlamak istediğ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>

HTTP_PLATFORM_PORT ortam değişkeni, bu örnekte, yerel sunucunuzun localhostbağlantılarından gelen bağlantılar için hangi bağlantı noktasında dinlemesi gerektiğini belirtir. Bu örnek, SERVER_PORTbaşka bir ortam değişkeninin nasıl oluşturulacağını da gösterir. Ortam değişkenlerini gerektiği gibi oluşturabilir ve atayabilirsiniz.

2. Seçenek: FastCGI işleyicisini yapılandırma

Alternatif olarak, uygulamalarınızı yapılandırmak için FastCGI kullanabilirsiniz. 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

Projenizi FastCGI kullanarak ayarlayabilmenize rağmen, WFastCGI projesi artık korunmaz ve hatalara neden olabileceğinden, uygulamalarınızı yapılandırmak için HttpPlatformHandler kullanmanızı öneririz.

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

Ardından, uygulamanızın web.config dosyasını python.exe yürütülebilir dosyanın ve wfastcgi.py dosyasının tam yollarını PythonHandler anahtarına 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. yolun Python yükleme konumuyla eşleşmesi için web.config dosyasındaki PythonHandler girdisini 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. web.config dosyasının <appSettings> bölümünde WSGI_HANDLER, WSGI_LOG (isteğe bağlı) ve PYTHONPATHiçin anahtarlar ekleyin:

    <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ğerleri uygulamanızda ortam değişkenleri olarak kullanılabilir:

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

    • Bottle: Bu örnekte gösterildiği gibi app.wsgi_app değerinden sonra parantez ekleyin. Nesne bir değişken yerine bir işlev olduğundan parantezler gereklidir. söz dizimini app.py dosyasında görebilirsiniz.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • flask : WSGI_HANDLER değerini, <project_name> projenizin adıyla eşleştiği <project_name>.app olarak değiştirin. runserver.py dosyasındaki from <project_name> import app deyimine bakarak tam tanımlayıcıyı 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 web.config dosyasında iki değişiklik yapılması gerekir.

      • WSGI_HANDLER değerini django.core.wsgi.get_wsgi_application()olarak değiştirin. nesnesi wsgi.py dosyasındadır.

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

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Django uygulamaları yalnızca: Django projesinin settings.py dosyasında sitenizin URL alan adını veya IP adresinizi ALLOWED_HOSTS girişine 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 konak olarak 'localhost' ve '127.0.0.1' izin verir. Üretim URL'nizi eklerseniz, bu konak sitelerine otomatik olarak izin verilmez. Bu nedenle, settings.py dosyasının ayrı geliştirme ve üretim kopyalarını 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 dosyası olduğunda, Çözüm Gezgini'den IIS çalıştıran bilgisayara yayımlayabilirsiniz. Projeye sağ tıklayın, Yayımlaöğesini seçin 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.