IISへのDjangoのインストール:ステップバイステップのチュートリアル

公開: 2022-03-11

多くのDjango開発者はそれを冒涜的だと考えるかもしれませんが、特にWindowsエコシステムを中心にインフラストラクチャを構築しているクライアントを操作する場合は、実際にDjangoアプリケーションをWindows/IISにデプロイする必要がある場合があります。 「冒涜」の部分は、Djangoが実際にUnix環境をターゲットにしており、WSGI、FastCGI、コマンドラインツールなどの機能に大きく依存していることに由来しています。これらはすべてWindowsとは無関係です。 幸いなことに、Django / IISの互換性は、方程式のWindows側とPython + Django側の両方に機能が追加されたおかげで向上しています。これにより、これら2つの異なる技術的な世界の間の互換性の問題を解決できます。

この短く焦点を絞ったチュートリアルでは、WindowsでのDjangoプロジェクトの基本的なセットアップについて説明します。 Python、Django、および関連ツールのインストールについて説明します。これには、スタンドアロンとFastCGIサーバーの両方でのDjangoプロジェクトの実行が含まれます。 ちなみに、IISはFastCGIを公式にサポートしているため(IIS 7以降では、CGI機能をインストールするだけです)、後者の重要性はますます高まっています。

注:このチュートリアルは、Windowsを実際に理解していて、IIS管理コンソールに精通しているユーザーを対象としています。 このチュートリアルで使用されているIISのバージョンは8.5ですが、説明と手法は以前のバージョンと同様です。 チュートリアルはPython2.7とDjango1.7に基づいています。これは、これらが私のプロジェクトで使用するバージョンであるためです。 ここに別のDjangoチュートリアルがあります。

上級者向けのヒント:複数のDjango(またはプレーンなPython)プロジェクトをデプロイする場合、または開発者の場合は、分離されたPython環境を作成するためのツールであるvirtualenvを確認する必要があります。

WindowsへのPythonのインストール

まず、Pythonをダウンロードします。 32ビットと64ビットの両方のMSIインストーラーが提供されているため、インストールするマシンに適したインストーラーを選択する必要があります。

PIPの基本

PIPは、Pythonライブラリをインストールおよび保守するツールです(Djangoはその一例にすぎません)。 これは、コマンドプロンプトでpipコマンドを実行することによって呼び出されます。 いくつかのサブコマンドを実装しており、最も便利な2つはinstallfreezeです。 PIPは、プロジェクトに依存関係(追加のライブラリ)がインストールされている場合は、それもインストールします。

pip install <package_name>を実行すると、パッケージとそのすべての依存関係(ネストされていてかなり複雑な場合があります)がダウンロードされてインストールされます。 pip install --upgrade <package_name>を実行すると、同様に既存のパッケージが最新バージョンにアップグレードされます。 PIPは、「最新のもの」だけでなく、パッケージの正確なバージョンをインストールするための特別な構文をサポートしています。 これは、パッケージ名に演算子とバージョン番号を追加することによって行われます。 例:「Jinja2 == 2.7.3」(正確なバージョンをインストールする場合)または「six> = 1.8」(指定されたバージョン番号以上のバージョンをインストールする場合)。

pipfreezeを実行すると、現在インストールされているパッケージのリストが、 pipinstallで直接使用できる形式で表示されます。

一部のPython/PIPパッケージには、Cで記述されたライブラリが付属していることに注意してください。ライブラリを機能させるには、ライブラリをコンパイルする必要があります。 Python実行可能ファイルとも互換性のある動作するCコンパイラを使用するようにシステムを設定しない限り、そのようなパッケージをインストールすることはできません。 Djangoは純粋なPythonライブラリであるため、Cコンパイラをインストールする必要はありません。

Python 2.7.9以降をインストールすることが重要です。2.7.9以降のPythonバージョンには、このチュートリアルの他のすべてをインストールするために使用されるPythonライブラリ/パッケージ/ソフトウェアマネージャーであるPIPが含まれているためです。

インストーラーのプロセスは非常に単純で単純です。 PythonをC:\Python27ディレクトリにインストールすることを提案します。これは、後の作業を楽にするために受け入れる必要があります。 名前にスペースが含まれるディレクトリに何かをインストールするというWindowsの習慣に屈しないようにしてください。

インストール後の基本ディレクトリには、約8つのサブディレクトリ、その他のファイル、およびPython.exePythonW.exeという名前の2つの実行可能ファイルが含まれます。 前者はデフォルトのコマンドラインインタプリタとPythonシェルですが、後者はインタプリタのみであり、呼び出されてもコンソールウィンドウを使用(または生成)しないため、GUIPythonアプリケーションの実行に適しています。

次に、PythonをシステムのPATH環境変数に追加する必要があります。 これは、 [詳細システム設定] (または[システムプロパティ])の[詳細設定]タブで、[環境変数]ボタンをクリックして実行します。 追加するディレクトリは、 C:\Python27C:\Python27\Scriptsの2つです。 これらは、セミコロン( ; )で区切ってPATHリストに追加する必要があります。 PATH変数の末尾は、 ;C:\Python27;C:\Python27\Scriptsのようになります。

上級者向けのヒント:Cygwinに似たUnixコマンドラインユーティリティの軽量コレクションであるGOWをインストールすることもできます。 lsなどのツールだけでなく、 makewgetcurlsshscpgziptarなどのより興味深いツールも提供します。

WindowsへのDjangoのインストール

Djangoは、 pip install djangoなどのコマンドでPIPを使用してインストールできます。 システムにまだ存在していない場合、プロセスはいくつかの追加の依存関係を取り込む可能性があります。 それ以外の場合は、Djangoのみをインストールし、次のような出力になります。

 Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...

PythonとDjangoforWindowsの両方が機能しているかどうかを確認するには、新しいWindowsコマンドプロンプトを起動し、 pythonコマンドを実行して、Pythonプロンプトでimport djangoコマンドを入力します。 正しく機能する場合は、 import djangoコマンドの後に出力やメッセージが表示されないはずです。 すなわち:

 Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>>

WindowsへのDjangoプロジェクトのインストール

Djangoの「プロジェクト」は、1つ以上の「アプリ」で構成されています。 プロジェクトの最上位ディレクトリには通常、設定といくつかの一般的なプロジェクトレベルの情報を含む1つの特別なプロジェクトサブディレクトリ、アプリごとに1つのサブディレクトリ、およびmanage.pyと呼ばれるコマンドラインスクリプトが含まれます。 例えば:

 C:\Devel\djangoproject\src>dir Volume in drive C is OS Volume Serial Number is 6A3D-C1B8 Directory of C:\Devel\djangoproject\src 22/12/2014 04:25 <DIR> . 22/12/2014 04:25 <DIR> .. 22/12/2014 04:19 <DIR> project 22/12/2014 04:58 <DIR> djangoapp 16/12/2014 03:30 <DIR> templates 16/12/2014 00:50 250 manage.py 1 File(s) 250 bytes 5 Dir(s) 23,552,929,792 bytes free

Djangoプロジェクトは、プロジェクトディレクトリ全体をアーカイブし、別のマシンで解凍することで簡単に配布できます。 上記の例では、プロジェクトには、 projectサブディレクトリ、 djangoappという名前のアプリケーションディレクトリ、および補助templatesサブディレクトリが含まれています。

manage.pyスクリプトは、Djangoアプリケーションの「スイスアーミーナイフ」です。 新しいアプリの作成からデータベースの移行、テスト(組み込み)HTTPサーバーまたはFastCGIサーバーの実行まですべてを実行します。

テストHTTPサーバーの実行

プロジェクトとそのアプリが機能している場合は、コマンドmanage.py runserverを実行することで、デフォルトのDjango開発専用HTTPサーバーを起動できるはずです。これにより、次のような出力が得られます。

 C:\Devel\djangoproject\src>manage.py runserver Performing system checks... System check identified no issues (0 silenced). December 23, 2014 - 01:19:02 Django version 1.7.1, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

メッセージからわかるように、これによりローカルホストのポート8000​​でサーバーが起動します。Webブラウザを使用してすぐにアクセスできます。

FastCGIサーバーの構成と実行

さらに興味深いオプションは、FastCGIサーバーを有効にすることです。 FastCGIを使用すると、IIS、Apache、またはその他のWebサーバーを使用して、実稼働環境でアプリケーションを提供できます。 これを機能させるには、fcgi.py(FastCGIを介してIISを使用してWindowsでDjangoを実行するためのDjango管理コマンド)をダウンロードし、Djangoアプリ(プロジェクトではない!)サブディレクトリのmanagement/commandsサブディレクトリに配置する必要があります。 managementサブディレクトリとcommandsサブディレクトリの両方に、 __init__.pyという名前の空のファイルが必要です(これらのディレクトリをPythonモジュールに変換します)。

fcgi.pyは、非常にシンプルでミニマルなWSGIからFastCGIへのアダプターであり、TCPソケットまたはパイプでのリスニングをサポートせstdinとstdout`を使用してすべての処理を実行します。 そのため、nginxなどの最新のWebサーバーでは使用できませんが、IISでは機能します。

FastCGIアプリケーションを実行するためのIISの構成

FastCGIモジュールがIIS(またはIIS 7以降のCGIモジュール)にロードされている場合、IIS管理コンソールで[FastCGI設定]アイコンを使用できます。 Djangoは独自のURLルーティングを持つフレームワークであるため、Djangoアプリは特定のパスのIISに「ハンドラー」としてインストールする必要があります。 IISの既定のWebサイトにDjangoアプリをインストールするには、管理コンソールでDjangoアプリを選択し、ハンドラーマッピング構成機能を開きます。 その中で、[モジュールマッピングの追加... ]アクションをクリックして、次の情報を入力します。

  • リクエストパス:内部Djangoルーティングですべてのリクエストを処理するには\*に設定します
  • モジュール:IISのFastCGIモジュールを使用するには、 FastCgiModuleに設定します
  • 実行可能ファイル:ここでは、パイプ文字( | )を区切り文字として使用して、 python.exeパスとそのコマンドライン引数の両方を設定する必要があります。 この設定の値の例は次のとおりですC:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settingsmanage.pyスクリプトにfcgiコマンドを指定し、プロジェクトのPythonインタープリターの検索パスと、プロジェクトの設定モジュールのPythonモジュール名を手動で設定する必要があることに注意してください。
  • 名前:これは好きなように設定できます。

構成ダイアログは次のようになります。

iis構成ダイアログ

次に、[制限のリクエスト]ボタンをクリックして、[マッピング]タブを編集します。 [リクエストがマップされている場合にのみハンドラーを呼び出す]チェックボックスをオフにします(そうしないと、IISはURLリクエストのサブディレクトリと見なすものをマッピングする際に問題が発生します)。

制限を要求する

ハンドラー情報ダイアログで「OK」をクリックします。 次に、IISは、確認する必要がある一致するFastCGIアプリケーションエントリの作成を確認するように要求します。 このエントリは、IIS管理コンソールのルート画面からアクセスできるFastCGI設定機能に表示されます。 IIS自体によって作成されたデフォルトのエントリで十分ですが、利用できるオプションの設定がいくつかあり、それらを利用することができます。

  • 最大インスタンス数:FastCGIアプリケーションを実行するために採用しているアプローチは、シングルプロセス、シングルスレッドです。つまり、同時リクエストごとに個別のPythonインタープリタープロセスが開始されます。 この設定は、同時Djangoアプリインスタンスの数を制限します。
  • ファイルへの変更を監視する:デフォルトでは、開始されると、アプリプロセスは、手動でシャットダウンするか、インスタンスのMaxRequestリクエストを処理するまでアクティブになります。 この設定を使用することにより、IISは任意のファイルのタイムスタンプを監視し、それが変更された場合は、アプリインスタンスを停止して再読み込みします。 これは、変更時にアプリをリロードできるため、開発者と本番環境の両方に便利です。 「リロードインジケータのファイルのタイムスタンプを監視する」は、Windowsではかなり奇妙な概念ですが、Unixライクな環境では正常であるため、FastCGIでここに引き継がれました。

FastCGIアプリケーションを追加する

静的リソースおよびメディアディレクトリの構成

最新のWebアプリケーションは、CSS、JavaScriptなどの複数のリソースファイルを使用します。Djangoアプリも例外ではありません。 Djangoは、開発者が必要なリソースをアプリケーションディレクトリツリーに統合できる非常に便利な機能を提供しますが、Djangoによって抽出して適切な静的ディレクトリにコピーすることができます。 これは基本的に開発者が制御する機能であり、Djangoが静的ファイルを保存する場所はプロジェクトのsettings.pyで制御されます。 正常に動作するプロジェクトは、これに適度に適切なパスを使用しますが、標準化されていません。

アップロードされたファイルを処理するアプリは、Djangoでは伝統的にmediaと呼ばれる同様に管理されたディレクトリにファイルを保存します。 staticディレクトリとmediaディレクトリは、仮想ディレクトリとしてIIS構成に追加する必要があります。

静的リソースおよびメディアディレクトリの構成

ここでの重要な手順は、各ディレクトリのハンドラーマッピング機能を再構成し、Django Appハンドラーを削除して、 StaticFileハンドラーを最も重要なものとして残すことです。

staticディレクトリはIIS(およびDjangoプロジェクト内の他のすべてのファイルとディレクトリ)で読み取り可能である必要がありますが、 mediaディレクトリもIISで書き込み可能である必要があることに注意してください。 最終的なサイト構成は、次のようになります。

iisサイトの構成例

データベースについてのメモ

SQLiteは、Unixライクなシステムと同様に、デフォルトでWindowsで動作します。 他のほとんどのオープンソースデータベースは、私がお勧めするPostgreSQLでさえ、Windowsで動作するようになりました。 ただし、既存のWindowsインストールでは、MSSQLServerとともにDjangoを展開する必要がある場合があります。 これは、ODBCブリッジドライバーを使用するか、ネイティブMSSQLドライバーを使用することで可能になります。 理論的には、両方とも機能しますが、私はそれらをテストしていません。 新しいデータベースに切り替えるには、少なくともデータベース接続パラメーター(プロジェクトのsettings.pyファイル内)を変更する必要があります。 データ移行は手動で行う必要があります。

SQLiteデータベースを使用する場合は、データベースファイルとそれが配置されているディレクトリの両方がIISで書き込み可能である必要があることに注意してください。

トラブルシューティング

説明されている構成はテストされ、機能することが証明されていますが、問題が発生した場合は、DjangoforWindowsのインストールのトラブルシューティングを行うための基本的な手順を次に示します。

  1. FastCGIコマンドラインを自分で起動してみてください。 これはFastCGI設定で構成されたコマンドであり、サイトのハンドラーマッピングで構成されたコマンドと一致する必要があります。
  2. IISのトレース機能をインストールし、失敗した要求のトレースルールでDjangoサイト用に構成して、すべてのコンテンツ( )、ステータスコード「500」、およびイベントの重大度「エラー」をトレースします。 トレースは、IISのC:\inetpub\logs\FailedReqLogFilesディレクトリ(または構成によっては同様のディレクトリ)にあるXMLファイル(XSLTが添付されたもの)として利用できます。 次に、* Configure-> Failed requesttraceing…アクションで特定のWebサイト(または仮想ディレクトリ)のトレースを有効にする必要があります

結論

確かに、DjangoはUnixライクな環境向けに調整されており、Djangoを実行するための最も広くサポートされている方法は、Linuxシステム(たとえば、uwsgiやnginx)です。

ただし、このチュートリアルに示すように、WindowsでDjangoを実行するのにそれほど手間はかかりません。 説明されている手順の一部は、純粋なWindowsの観点からは直感に反しているように見えるかもしれませんが、それらは必要であり、幸いなことに、構成に費やされる作業は1回だけです。 構成が完了すると、DjangoアプリケーションはLinuxプラットフォームの場合とほぼ同じように動作するはずです。