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.
- Yorumlayıcının
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.
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 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.py
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>
Bu örnekte ortam değişkeni, HTTP_PLATFORM_PORT
yerel sunucunuzun bağlantısı localhost
iç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.
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 korunmaması 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/'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.
Dosyadaki girdiyi
PythonHandler
web.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>
<appSettings>
Dosyanın bölümündeweb.config
,WSGI_LOG
(isteğe bağlı) vePYTHONPATH
için anahtarlarWSGI_HANDLER
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ğ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.
- Anahtarın
Dosyadaki girdiyi
WSGI_HANDLER
web.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 diziminiapp.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 app
runserver.py
bulabilirsiniz. Örneğin, projenin adıFlaskAzurePublishExample
ise 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_HANDLER
django.core.wsgi.get_wsgi_application()
değiştirin. nesnesi dosyadadırwsgi.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ğeriniDjangoAzurePublishExample
projenizin adıyla değiştirin:<add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
Yalnızca Django uygulamaları: Django projesinin
settings.py
dosyasında, girişeALLOWED_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.