Mengonfigurasi aplikasi web Python untuk IIS

Saat Anda menggunakan Layanan Informasi Internet (IIS) sebagai server web di komputer Windows (termasuk komputer virtual Windows di Azure), Anda perlu mengonfigurasi aplikasi web Python untuk memungkinkan IIS memproses kode Python dengan benar. Konfigurasi dilakukan melalui pengaturan dalam web.config file untuk aplikasi web Python. Artikel ini menjelaskan cara mengonfigurasi pengaturan yang diperlukan.

Prasyarat

  • Python pada Windows terinstal. Untuk menjalankan aplikasi web, pertama-tama instal versi Python yang diperlukan langsung di komputer host Windows seperti yang dijelaskan pada Menginstal interpreter Python.

    • Identifikasi lokasi python.exe penerjemah. Agar lebih mudah, tambahkan lokasi tersebut ke variabel lingkungan PATH.
  • Paket yang diperlukan terinstal. Untuk host khusus, Anda dapat menggunakan lingkungan Python global untuk menjalankan aplikasi Anda daripada lingkungan virtual. Oleh karena itu, Anda dapat menginstal semua persyaratan aplikasi ke lingkungan global dengan menjalankan pip install -r requirements.txt perintah .

Mengatur web.config untuk menunjuk ke penerjemah Python

File web.config untuk aplikasi Python Anda menginstruksikan server web IIS (versi 7 atau yang lebih baru) yang berjalan di Windows tentang caranya menangani permintaan Python melalui HttpPlatformHandler (disarankan) atau FastCGI. Visual Studio versi 2015 dan yang lebih lama membuat modifikasi ini secara otomatis. Untuk Visual Studio 2017 dan yang lebih baru, Anda harus mengubah web.config file secara manual.

Jika proyek Anda belum berisi web.config file, Anda bisa menambahkannya dengan mengklik kanan direktori proyek, memilih Tambahkan > Item Baru dan mencari web.config atau membuat file XML kosong web.config .

Mengonfigurasi HttpPlatformHandler

Modul HttpPlatform meneruskan koneksi soket langsung ke proses Python mandiri. Pass-through ini memungkinkan Anda menjalankan server web apa pun yang Anda suka, tetapi memerlukan skrip startup yang menjalankan server web lokal. Pendekatan ini biasanya dilakukan dengan menggunakan kerangka kerja web Python, seperti Flask atau Django. Anda menentukan skrip dalam <httpPlatform> elemen web.config file. Atribut processPath menunjuk ke penerjemah Python ekstensi situs. Atribut arguments menunjuk ke skrip startup Anda yang menjalankan server web lokal, dalam hal runserver.pyini , dan argumen apa pun yang ingin Anda berikan:

<?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>

Dalam contoh ini, HTTP_PLATFORM_PORT variabel lingkungan berisi port yang harus didengarkan server lokal Anda untuk koneksi dari localhost. Contoh ini juga menunjukkan cara membuat variabel lingkungan lain, SERVER_PORT. Anda dapat membuat dan menetapkan variabel lingkungan sesuai kebutuhan.

Konfigurasikan pengendali FastCGI

FastCGI adalah antarmuka yang bekerja pada tingkat permintaan. IIS menerima koneksi masuk dan meneruskan setiap permintaan ke aplikasi WSGI yang berjalan dalam satu atau lebih proses Python yang persisten.

Catatan

Sebaiknya gunakan HttpPlatformHandler untuk mengonfigurasi aplikasi Anda, karena proyek WFastCGI tidak lagi dipertahankan.

Untuk menggunakan FastCGI, pertama-tama instal dan konfigurasikan paket wfastcgi seperti yang dijelaskan dalam pypi.org/project/wfastcgi/.

Selanjutnya, ubah file aplikasi web.config Anda untuk menyertakan jalur lengkap ke python.exe executable dan wfastcgi.py file di kunci PythonHandler . Langkah-langkah berikut mengasumsikan Python diinstal di folder c:\python36-32 dan kode aplikasi berada di folder c:\home\site\wwwroot . Sesuaikan nilai-nilai ini untuk jalur Anda yang sesuai.

  1. PythonHandler Ubah entri dalam web.config file sehingga jalur cocok dengan lokasi penginstalan Python. Untuk informasi selengkapnya, lihat Referensi Konfigurasi IIS (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. Di dalam bagian <appSettings>web.config file, tambahkan kunci untuk WSGI_HANDLER, WSGI_LOG (opsional), dan PYTHONPATH:

    <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>
    

    Nilai <appSettings> ini tersedia untuk aplikasi Anda sebagai variabel lingkungan:

    • Nilai untuk PYTHONPATH kunci dapat diperluas dengan bebas, tetapi harus menyertakan akar aplikasi Anda.
    • Kunci WSGI_HANDLER harus menunjuk ke aplikasi WSGI yang dapat diimpor dari aplikasi Anda.
    • Kuncinya WSGI_LOG bersifat opsional, tetapi kunci disarankan untuk men-debug aplikasi Anda.
  3. Atur WSGI_HANDLERweb.config entri dalam file yang sesuai untuk kerangka kerja yang Anda gunakan:

    • Botol: Tambahkan tanda kurung setelah nilai seperti yang app.wsgi_app ditunjukkan dalam contoh ini. Tanda kurung diperlukan karena objek adalah fungsi daripada variabel. Anda dapat melihat sintaks dalam app.py file.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: Ubah nilai ke WSGI_HANDLER<project_name>.app tempat <project_name> yang cocok dengan nama proyek Anda. Anda dapat menemukan pengidentifikasi yang tepat dengan melihat from <project_name> import app pernyataan dalam runserver.py file. Misalnya, jika proyek diberi nama FlaskAzurePublishExample, entri muncul sebagai berikut:

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django: Dua perubahan diperlukan pada web.config file untuk proyek Django.

      • Ubah nilai WSGI_HANDLER menjadi django.core.wsgi.get_wsgi_application(). Objek ada dalam wsgi.py file.

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Tambahkan entri berikut segera setelah entri untuk WSGI_HANDLER kunci. Ganti nilai DjangoAzurePublishExample dengan nama proyek Anda:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Hanya aplikasi Django: Dalam file proyek settings.py Django, tambahkan domain URL situs atau alamat IP Anda ke ALLOWED_HOSTS entri. Ganti '1.2.3.4' dengan URL atau alamat IP Anda:

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

    Jika Anda tidak menambahkan URL ke hasil array, Anda akan melihat kesalahan berikut:

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

Ketika array kosong, Django secara otomatis mengizinkan 'localhost' dan '127.0.0.1' sebagai host. Jika Anda menambahkan URL produksi, situs host ini tidak diizinkan secara otomatis. Untuk alasan ini, Anda mungkin ingin mempertahankan salinan settings.py pengembangan dan produksi file yang terpisah, atau menggunakan variabel lingkungan untuk mengontrol nilai runtime.

Menyebarkan ke IIS atau komputer virtual Windows

Ketika Anda memiliki file yang benar web.config dalam proyek, Anda dapat menerbitkan ke komputer yang menjalankan IIS dari Penjelajah Solusi. Klik kanan proyek, pilih Terbitkan, lalu pilih IIS, FTP, dll.. Dalam situasi ini, Visual Studio hanya menyalin file proyek ke server. Anda bertanggung jawab atas semua konfigurasi sisi server.