Soru Bir Flask uygulamasını IIS'de nasıl dağıtabilirim?


IIS 6'da çalışan bir Flask uygulaması edinmeme yardımcı olabilir misiniz? İsapi-wsgi'yi kullanmayı denedim, ancak Virtual Directory adresini ziyaret ettiğimde "Belirtilen modül bulunamadı" yazan bir sayfa aldım. Bunun için başka seçenekler var mı?

Aşağıda isapi-wsgi için yazdığım Python betiğidir. Sanal dizin yapıldı ve her şey IIS Yöneticisi'nde tamam görünüyordu, ancak site çalışmadı.

from wof import app
import os

app.secret_key=os.urandom(24)

import isapi_wsgi
def __ExtensionFactory__():
    return isapi_wsgi.ISAPISimpleHandler(app)

if __name__ == '__main__':
    from isapi.install import *
    params = ISAPIParameters()
    sm = [ScriptMapParams(Extension="*", Flags=0)]
    vd = VirtualDirParameters(Name="WOFPy_Sondes", Description="ISAPI-WSGI for WOFPY Sondes test", ScriptMaps=sm, ScriptMapUpdate="replace")
    params.VirtualDirs = [vd]
    HandleCommandLine(params)

25
2018-02-21 22:46


Menşei




Cevaplar:


Yüksek Seviye Genel Bakış

HTTP -> IIS -> ISAPI -> FastCGI -> WSGI (Flask uygulaması)


Kurulum Adımları

Adım 1: Gerekli İkilileri Kurma

  1. Python'u Yükle (2.7 veya 3.x - 3.3 kullandım)
  2. Pip-Win'i yükle (Sürüm 1.6'yı kullandım)
  3. Pywin32'yi yükleyin (218 sürümünü kullandım)
  4. IIS FastCGI uzantısını fcgisetup 1.5

Adım 2: İsteğe Bağlı İkili Paketleri Kurma

yükledim pyodbc yükleyici .exe'yi kullanarak bu site. Kaynaktan yükleme (ör. Sanal bir ortama yüklemek için pip) bir C / C ++ derleyicisi gerektirir.

3. Adım: Bir kopyasını alın wfastcgi.py

Sizin için çalışacak olan, tercihen Python 3.3'ü destekleyen bir sürüm seçin. David Ebbo'nun). "Resmi" versiyonunu isteyebilirsiniz buradan.

Yükle wfastcgi.py içine yazmak C:\Inetpub\wwwroot ve uygulamanıza hizmet edecek hesabın (varsayılan olarak "Ağ Hizmeti") okuma erişimi olduğundan emin olun.

4. Adım: Yükle virtualenv Sistem site paketlerine

C:\Python33\Scripts\pip.exe install virtualenv

(Python 3.3 kullanıyorsanız ve her şeyi varsayılan konuma yüklediyseniz)

Adım 5: Flask Uygulamanızı Kurun

  • Uygulamayı hemen her yerden sisteme yükleyebilirsiniz. Yüklemek isteyebilirsiniz C:\Inetpub. Bu eğitim için, uygulama yüklemenizin kök klasörünü arayacağız %APPROOT%. (Ortam değişkenine tırnak işareti koymayın.)

  • Uygulamanıza sunulacak hesabın (varsayılan olarak "Ağ Hizmeti"), tüm komut dosyası dosyalarına okuma erişimi olduğundan emin olun. Bu komut:

    cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"
    

    uygulama dizininize aşağıdaki izinleri verecektir:

    • BUILTIN \ Administrators: Bu klasörün, alt klasörlerin ve dosyaların tam kontrolü
    • CREATOR SAHİBİ: Sadece alt klasörler ve dosyalar için tam kontrol
    • NT AUTHORITY \ NETWORK SERVICE: Bu klasör, alt klasörler ve dosyalar için okuma izinleri
    • NT AUTHORITY \ SYSTEM: Bu klasörün, alt klasörlerin ve dosyaların tam kontrolü
  • Gerekli herhangi bir yerel yapılandırmayı ekleyin (uygulamam sürüm kontrol sistemi tarafından yok sayılan bir local.cnf dosyası kullanıyor) - ör. veritabanı URL'leri.

  • Uygulamanızın bir Web.config dosyasında %APPROOT% - dosya formatı hakkında bilgi için aşağıdaki bölüme bakınız.

6. Adım: Uygulamanız için bir virtualenv oluşturun

C:\Python33\Scripts\virtualenv.exe --system-site-packages "%APPROOT%\env"

(Başka bir isim seç env uygulamanız zaten bu dizini kullanıyorsa.)

Adım 7: Uygulamanız için Gerekli Paketleri virtualenv'e Yükleyin

cd "%APPROOT%"
env\Scripts\activate
pip install -r Packages

(Projem şartnameyi spec adlı bir dosyada saklıyor Packages.)

Adım 8: Uygulamanız için bir Web Sitesi veya Sanal Dizin Oluşturun

kullanım inetmgr.msc (başla -> Koşmak…sonra gir inetmgr düzenleme kutusunda GİRMEK) çalıştırmak Internet Information Services (IIS) Yöneticisi. Oluşturduğunuz düğümün (Web Sitesi veya Sanal Dizini) yerel yolunu, Flask uygulamanızın kök klasörüne ayarladığınızdan emin olun. wfastcgi.py istekleri işlemek için Flask uygulamasını tanımlamak için yerel yolu kullanır.

İkisine de ver okumak ve Komut Dosyası (Komut Dosyalarını Çalıştır) düğüm için izinler.

9. Adım: Yapılandırın fcgiext.ini

Bu dosya ile aynı dizinde bulunur. fcgiext.dll 1. Adımda yüklü (varsayılan olarak, %SYSTEMROOT%\system32\inetsrv).

Bu dosyayı yapılandırırken, birkaç parametreye ihtiyacınız var:

  • {site kimliği}: (Sağ taraftaki) bölmesinde bulabileceğiniz sayısal Site Kimliği Internet Information Services (IIS) Yöneticisi Pencerenin sol tarafındaki ağaçtan “Web Siteleri” seçildiğinde.
  • {Uygulama Adı}: içindeki bölümün adı fcgiext.ini FastCGI (ISAPI) işleyicisi için parametreler sağlar. Bu değeri seçersiniz - uygulamanızı temsil eden bir şey seçin.
  • {app yolu}: bir Sanal Dizinde, Web Sitesi içindeki URL yolunun işlenecek Sanal Dizini.
  • {AppRoot}: uygulamanızın kök dizinine giden yol.

Bu parametreleri aşağıdakiler için kullanın:

  • FastCGI isteklerini bir taşıma bölümüne eşleyin:

    • Bütün bir Web Sitesi için *:{site kimliği}={Uygulama Adı} göre [Types] Bölüm.
    • Bir sanal dizin için *:/lm/w3svc/{site kimliği}/root/{app yolu}={Uygulama Adı} göre [Types] Bölüm.
  • Bir taşıma bölümü ekle[{Uygulama Adı}]) Bu uygulama için parametreler iletam referans):

    • ExePath={AppRoot}\env\python.exe
    • Arguments=C:\Inetpub\wwwroot\wfastcgi.py (ya da wfastcgi.py adaptör komut dosyası yüklüdür)
    • EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value,vb. (alıntılama kuralları için tam referansa bakınız). Bu senin için iyi bir yer WSGI_LOG ortam değişkeni - Siteye hizmet veren hesabın (varsayılan olarak “Ağ Hizmeti”) dosya için yazma izinlerine ve (eğer dosya mevcut değilse) içeren dizine bir dosya eklemesine izin verdiğinden emin olun.

10. Adım: Hedef URL'ler için FastCGI Handling'i yapılandırın

kullanma Internet Information Services (IIS) Yöneticisi, Flask uygulamanız tarafından servis edilecek düğümün (Web Sitesi veya Sanal Dizini) içerik (sağ tıklama) menüsünden “Özellikler…” i seçin ve:

  • “Ana Dizin” sekmesinde (Web Sitesi) veya “Sanal Dizin” sekmesinde (Sanal Dizin) “Yapılandırma ...” düğmesine tıklayın.

  • “Joker uygulama haritaları” bölümünde, joker karakter eşlemesi eklemek için “Ekle ...” tuşunu kullanın:

    • Yürütülebilir dosya, 1. Adımda yüklenen FastCGI uzantısı DLL dosyasıdır. Varsayılan konumu %SYSTEMROOT%\system32\inetsrv\fcgiext.dll.
    • "Dosyanın var olduğunu doğrulayın" olduğundan emin olun. kontrolsüz. Flask uygulamaları, diskteki dosyalar ile ilgisi olmayan bir şekilde kendi yönlendirmelerini yapar.

Web.config

Bu dosya (bu kurulumda) tarafından okunan wfastcgi.py, değil IIS tarafından.

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <applicationSettings>
        <add key=“PYTHONPATH” value=“”/>
        <add key=“WSGI_HANDLER” value=“module.application”/>
    </applicationSettings>
</configuration>
  • <add> elemanlar çevre değişkenlerini ekleros.environ Python'da).

  • WSGI_HANDLER belirtilmelidir - söyler wfastcgi.py WSGI uygulama nesnesinin nasıl bulunacağı. Değer "()" ile biterse, wfastcgi.py bir WSGI uygulama nesnesini döndürmesini bekleyerek adlandırılmış nesneyi çağırır.

  • PYTHONPATH özel olarak ele alınır - wfastcgi.py Değişken genişleme (ortam) gerçekleştirir (Windows standardını kullanarak) %VAR% notasyon) değeri PYTHONPATHsonra sonucu noktalı virgüller halinde böler ve sys.path WSGI uygulamasını çağırmadan önce. Çünkü wfastcgi.py varolan dizini, WSGI uygulama nesnesini içeren modülü içe aktarmadan önce Web Sitesi veya Sanal Dizinin yerel yolu olarak belirtilen yolla değiştirir; PYTHONPATH içindeki boş bir dize de aramanın Flask uygulama dizininizi başlangıç ​​noktası olarak içermesine neden olur . Ayrıca PYTHONPATH öğesini de fcgiext.ini (bu durumda sys.path tercüman tarafından ve sonra tekrar wfastcgi.py).

  • WSGI_RESTART_FILE_REGEX FastCGI işleyici işleminin yeniden başlatılmasını tetiklemesi gereken yollar için dosya değişikliği bildirimlerini filtrelemek için kullanılan bir Python düzenli ifadesini verir. Kaynak dosyalar veya yapılandırma dosyaları değiştiğinde bunu tetiklemek için ayarlayın. kullanırım (?i).*\.(py|cnf|config)$.

  • WSGI_LOG Burada ayarlanmış olabilir, ama daha iyi olduğunu düşünüyorum fcgiext.ini.


IIS 7 için

FastCGI ile bazı şeyler, IIS 7 ile önemli ölçüde değişti. Bu sürümle başlayarak, FastCGI doğrudan IIS üzerinden desteğe sahip ve bir uzantı aracılığıyla yapılandırılmadı (yani adım 1.4 gerekli değildir ve fcgiext.ini IIS 7+ için FastCGI davranışını kontrol etmez ve oluşturmanıza / düzenlemenize gerek yoktur). Bunun yerine, emin olun CGI altında etkinleştir internet bilgi servisi içinde Denetim Masası> Programlar ve Özellikler> Windows Özellikleri'ni açar veya kapatır.

Web.config

IIS 7, FastCGI ile ilgili yapılandırma ayarlarını okumak için IIS'nin ilk sürümüdür. Web.config dosya. Sizin Web.config dosya içinde, içermesi gerekecek <configuration> eleman, bir <system.webServer> içeren bir öğe <handlers> içeren bir öğe <add> özniteliklere sahip öğe:

  • yol: *
  • fiil: *
  • modüller: FastCgiModule
  • kaynak tipi: Unspecified
  • requireAccess: Script
  • scriptProcessor: zor olan

scriptProcessor nitelik

Bu özellik <add> eleman Python yorumlayıcısının tam yolunu içermelidir .exe kullanmak istediğiniz dosya ( Scripts Python virtualenv'inizin alt klasörü) | ve sonra tam yol wfastcgi.py kullandığınız dosya. Bu yollar uygulamanızın çalıştığı makinenin kurulumuna bağlı olduğundan, bu özniteliğin dağıtım işleminizin bir parçası olarak ayarlanmasını isteyebilirsiniz.

IIS Sunucusu çapında Kurulum

  • İçinde inetmgrağaçtaki sunucu düğümüne tıklayın ve ardından FastCGI Ayarları merkez bölmesinden. Yürütülebilir / bağımsız değişkenlerin bir listesi çıkacaktır.
  • Tam yolların için bir giriş ekleyin python.exe ve wfastcgi.py kullanıyorsun. Her ikisine de aynı şekilde gösterilmelidir. <handlers>/<add> öğenizdeki Web.config.
  • Kurulumunu yaptığınızdan emin olun. PYTHONPATH Uygulama kod tabanınızın kökünü dahil etmek için yeni FastCGI uygulama girişindeki ortam değişkeni. Boş ekleme ile ilgili tavsiye PYTHONPATH giriş <applicationSettings> senin Web.config bu IIS sürümü için geçerli olmayabilir.

49
2018-02-28 23:48



Bu bir cevap değil! Bu bir el kitabıdır. +1 - SaidbakR
Tamamen işe yaramaz. Bu kadar uzun bir cevap yazmak yerine, sadece örnek bir web.config dosyası eklemek daha iyi olurdu. - zsong


Konuyla ilgili Django'nun sayfasına bakın. Çalışan bir Django projesi oluşturmama yardımcı oldu, ancak bir Flask uygulaması için farklı olmamalıydı.

http://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer


3
2018-03-11 14:24



CEVAP SİZİN İÇİN SİZDEN EMİN MİSİNİZ? - Lutaaya Huzaifah Idris


IIS'yi asla kullanmam, ancak IIS CGI ağ geçidini destekler, bu nedenle CGI'yı WSGI ile uyarlayabilmeniz gerekir.

IIS <--> CGI <--> WSGI

Bir WSGI'yi bir CGI betiği olarak çalıştırmak için CGIHandler Python standart kütüphanesinde.


0
2018-02-27 04:32



CGI kabul edilmeyen bir çözüm değildir. çok düşük trafikli bir şey (ör. sadece kendiniz tarafından kullanılır). Bir sayfa talep edildiğinde bir işlem başlatır. - ThiefMaster♦