web-dev-qa-db-ja.com

IISにFlaskアプリケーションを展開するにはどうすればよいですか?

FlaskアプリケーションがIIS 6で実行されている)を取得するのを手伝ってくれませんか?isapi-wsgiを使用しようとしましたが、仮想ディレクトリアドレスにアクセスすると、 「指定されたモジュールが見つかりませんでした」というページ。これには他のオプションがありますか?

以下はPythonスクリプトをisapi-wsgi用に記述したスクリプトです。仮想ディレクトリが作成され、IISマネージャで問題なく動作しましたが、サイトは機能しませんでした。

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)
27
James

高レベルの概要

HTTP-> IIS-> ISAPI-> FastCGI-> WSGI(Flaskアプリケーション)


セットアップ手順

ステップ1:必要なバイナリをインストールする

  1. インストールPython(2.7または3.x-3.3を使用しました)
  2. Pip-Winをインストールします(バージョン1.6を使用しました)
  3. Pywin32をインストールします(バージョン218を使用しました)
  4. IIS FastCGI拡張機能 fcgisetup 1.5 をインストールします

手順2:オプションのバイナリパッケージをインストールする

このサイト のインストーラ.exeを使用してpyodbcをインストールしました。ソースからのインストール(仮想環境にインストールするためのpipなど)には、C/C++コンパイラが必要です。

ステップ3:wfastcgi.pyのコピーを取得する

Python 3.3(私は David Ebbo's を使用しています)をサポートするバージョンを選択してください。 "公式"バージョン ここから

wfastcgi.pyスクリプトをC:\Inetpub\wwwrootにインストールし、アプリケーションにサービスを提供するアカウント(デフォルトでは「ネットワークサービス」)に読み取りアクセス権があることを確認します。

ステップ4:virtualenvをシステムサイトパッケージにインストールする

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

(Python 3.3を使用していて、すべてをデフォルトの場所にインストールした場合)

ステップ5:Flaskアプリケーションをインストールします

  • システムのほぼどこにでもアプリケーションをインストールできます。 C:\Inetpubにインストールすることもできます。このチュートリアルでは、アプリケーションインストールのルートフォルダーを%APPROOT%と呼びます。 (環境変数に引用符を入れないでください。)

  • アプリケーションにサービスを提供するアカウント(デフォルトでは「ネットワークサービス」)に、すべてのスクリプトファイルへの読み取りアクセス権があることを確認してください。このコマンド:

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

    アプリケーションディレクトリに次の権限を付与します。

    • BUILTIN\Administrators:このフォルダー、サブフォルダー、およびファイルのフルコントロール
    • CREATOR OWNER:サブフォルダーとファイルのみのフルコントロール
    • NT AUTHORITY\NETWORK SERVICE:このフォルダー、サブフォルダー、およびファイルの読み取りアクセス許可
    • NT AUTHORITY\SYSTEM:このフォルダ、サブフォルダ、およびファイルのフルコントロール
  • 必要なローカル構成を追加します(私のアプリケーションは、バージョン管理システムによって無視されるlocal.cnfファイルを使用します)-たとえば、データベースURL。

  • アプリケーションのWeb.configファイルが%APPROOT%に含まれていることを確認してください。ファイル形式については、以下のセクションをご覧ください。

ステップ6:アプリケーションのvirtualenvを作成する

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

(アプリケーションがすでにそのディレクトリを使用している場合は、env以外の名前を選択してください。)

ステップ7:アプリケーションに必要なパッケージをvirtualenvにインストールする

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

(私のプロジェクトでは、Packagesという名前のファイルに要件仕様を保存しています。)

ステップ8:アプリケーションのWebサイトまたは仮想ディレクトリを作成する

inetmgr.mscStart->Run…を使用して、編集ボックスにinetmgrを入力し、 [〜#〜] Enter [〜#〜])を押して、インターネットインフォメーションサービス(IIS)マネージャを起動します。作成するノード(Webサイトまたは仮想ディレクトリ)のローカルパスをFlaskアプリケーションのルートフォルダーに設定してください。wfastcgi.pyはローカルパスを使用して=を識別しますFlaskリクエストを処理するアプリケーション。

ノードに読み取りとスクリプト(スクリプトの実行)の両方の権限を付与します。

ステップ9:設定fcgiext.ini

このファイルは、手順1でインストールしたfcgiext.dllと同じディレクトリにあります(デフォルトでは%SYSTEMROOT%\system32\inetsrv)。

このファイルを構成するには、いくつかのパラメーターが必要です。

  • {site id}インターネットインフォメーションサービス(IIS)マネージャーの詳細(右側)ペインに表示される数値のサイトIDウィンドウの左側のツリーから[Webサイト]を選択します。
  • {アプリケーション名}:FastCGI(ISAPI)ハンドラーのパラメーターを提供するfcgiext.ini内のセクションの名前。この値を選択します-アプリケーションを表すものを選択します。
  • {アプリへのパス}:仮想ディレクトリの場合、処理される仮想ディレクトリへのWebサイト内のURLパス。
  • {approot}:アプリケーションのルートディレクトリへのパス。

これらのパラメーターを使用して、以下を行います。

  • FastCGIリクエストを処理セクションにマップします。

    • Webサイト全体の場合、*:{site id}={application name}[Types]セクションに追加します。
    • 仮想ディレクトリの場合、*:/lm/w3svc/{site id}/root/{path to app}={application name}[Types]セクションに追加します。
  • このアプリケーションのパラメーターを含む処理セクション([{application name}])を追加します( 完全参照 ):

    • ExePath={approot}\env\python.exe
    • Arguments=C:\Inetpub\wwwroot\wfastcgi.py(またはwfastcgi.pyアダプタスクリプトがインストールされている場所)
    • EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value,etc.(引用規則については、完全なリファレンスを参照してください)。これは WSGI_LOG環境変数 を設定するのに適した場所です。サイトにサービスを提供するアカウント(デフォルトでは「ネットワークサービス」)がファイルへの書き込み権限を持っていることを確認し、(ファイルが存在しない場合) )含まれているディレクトリにファイルを追加する権限。

ステップ10:ターゲットURLのFastCGI処理を構成する

インターネットインフォメーションサービス(IIS)マネージャーを使用して、提供するノード(Webサイトまたは仮想ディレクトリ)のコンテキスト(右クリック)メニューから[プロパティ...]を選択します。 Flaskアプリケーションおよび

  • [ホームディレクトリ]タブ(Webサイト)または[仮想ディレクトリ]タブ(仮想ディレクトリ)で、[構成...]ボタンをクリックします。

  • 「ワイルドカードアプリケーションマップ」セクションで、「挿入...」ボタンを使用してワイルドカードマッピングを追加します。

    • 実行ファイルは、ステップ1でインストールしたFastCGI拡張機能DLL=です。そのデフォルトの場所は%SYSTEMROOT%\system32\inetsrv\fcgiext.dllです。
    • 「ファイルが存在することを確認」がncheckedであることを確認してください。 Flaskアプリケーションは独自のルーティングを行いますが、必ずしもディスク上のファイルとは関係ありません。

Web.config

このファイルは(この設定では)wfastcgi.pynotによってIISによって読み取られます。

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

<configuration>
    <applicationSettings>
        <add key=“PYTHONPATH” value=“”/>
        <add key=“WSGI_HANDLER” value=“module.application”/>
    </applicationSettings>
</configuration>
  • <add>要素は環境変数を追加します(Pythonではos.environ)。

  • WSGI_HANDLERを指定する必要があります-wfastcgi.pyに、WSGIアプリケーションオブジェクトの検索方法を指示します。値が「()」で終わっている場合、wfastcgi.pyは指定されたオブジェクトを呼び出し、WSGIアプリケーションオブジェクトを返すことを期待します。

  • PYTHONPATHは特別に処理されます-wfastcgi.pyPYTHONPATHの値に対して(Windows標準の%VAR%表記を使用して)変数拡張を実行し、結果をセミコロンを付け、WSGIアプリケーションを呼び出す前にsys.pathにエントリを追加します。 wfastcgi.pyは、WSGIアプリケーションオブジェクトを含むモジュールをインポートする前に、現在のディレクトリをWebサイトまたは仮想ディレクトリのローカルパスとして指定されたパスに変更します。PYTHONPATHに空の文字列を含めると、検索に= Flaskアプリケーションディレクトリを開始点として使用します。PYTHONPATHをfcgiext.iniに設定することもできます(この場合、インタープリターによってsys.pathに含まれ、次にwfastcgi.py)。

  • WSGI_RESTART_FILE_REGEXは、Python FastCGIハンドラープロセスの再起動をトリガーするパスのファイル変更通知をフィルターするために使用される正規表現を提供します。これを設定して、ソースファイルまたは構成ファイルが変更されたときにトリガーします。 (?i).*\.(py|cnf|config)$

  • WSGI_LOGはここで設定できますが、fcgiext.iniで設定する方がよいと思います。


IIS 7

IIS 7.でFastCGIの一部が劇的に変更されました。このバージョン以降、FastCGIはIISを介して直接サポートし、拡張機能(つまり、ステップ1.4 IIS 7+の場合、fcgiext.iniはFastCGIの動作を制御せず、作成/編集する必要はありません)代わりに、[〜 #〜] cgi [〜#〜]インターネットインフォメーションサービスコントロールパネル>プログラムと機能> Windows機能のオン/オフで有効です。

Web.config

IIS 7は、FastCGIに関連する構成設定をWeb.configファイルから読み取るためのIISの最初のバージョンです。Web.configファイルには、<configuration>要素、<system.webServer>要素を含む<handlers>要素、および<add>要素を含む属性:

  • パス:*
  • 動詞:*
  • モジュール:FastCgiModule
  • resourceType:Unspecified
  • requireAccess:Script
  • scriptProcessor:トリッキーなもの

scriptProcessor属性

<add>要素のこの属性には、使用するPythonインタープリター.exeファイル(Scriptsサブフォルダー内のファイル)への完全パスを含める必要がありますPython virtualenv)の後に|が続き、次に使用しているwfastcgi.pyファイルへのフルパスが続きます。これらのパスはマシンの設定に依存するためアプリが実行されている場合は、この属性を展開プロセスの一部として設定できます。

IISサーバー全体のセットアップ

  • inetmgrで、ツリーのサーバーノードをクリックし、中央のペインからFastCGI Settingsを選択します。実行可能ファイルと引数のペアのリストが表示されます。
  • 使用しているpython.exeおよびwfastcgi.pyへのフルパスのエントリを追加します。どちらも、<handlers>/<add>Web.config要素に表示されるのと同じ方法で指定する必要があります。
  • 新しいFastCGIアプリケーションエントリでPYTHONPATH環境変数を設定して、アプリケーションコードベースのルートを含めるようにしてください。空のPYTHONPATHエントリを<applicationSettings>Web.configに追加することに関するアドバイスは、このバージョンのIISには適用されない場合があります。
52
ReWrite

この件に関するDjangoのページをご覧ください。動作中のDjangoプロジェクトをセットアップするのに役立ちましたが、Flaskアプリの場合はそれほど違いはないはずです。

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

3
Joe

IISを使用することはありませんが、IISはCGIゲートウェイをサポートしているため、CGIをWSGIに適合させることができるはずです。

IIS <--> CGI <--> WSGI

WSGIをCGIスクリプトとして実行するには、Python標準ライブラリの CGIHandler を使用できます。

0
Fang-Pen Lin