DebianVPSでvirtualenvPython環境を使用してmod_wsgiとApacheを使用してDjangoを実行する方法
序章
Djangoアプリケーション、および一般的なPythonアプリケーションの操作は、多くのツールが使用されている複雑な問題です。 同じ目標を達成する方法は複数あり、多くの場合、物事を行うための単一の方法はありません。
専用サーバー上のWebにDjangoアプリケーションをデプロイする最も一般的な方法の1つは、GunicornとペアになっているNginxを使用することです。 これを行うための優れた方法は、この記事ですでに詳細に説明されています。 ただし、Apacheを使用して提供される既存のWebサイトと一緒にDjangoアプリケーションをホストすることは非常に一般的なシナリオです。 その特定の目標を達成するためのクイックルートをカバーしようとします。 ただし、これはDjangoとApacheのペアリングの決定的なガイドではなく、ここで説明されていない構成の側面があることに注意してください。
このテキストはいくつかの仮定をします:
-
すでにDebian7.0以降でドロップレットを設定しています。 異なるLinuxディストリビューションの間には多くの違いがあります。 したがって、わかりやすくするために、Debianサーバーに焦点を当てます。
-
仮想環境を作成するためのpipパッケージマネージャーやvirtualenvなどの一般的なPythonツールに少なくともある程度精通している必要があります。 これらのツールは、この記事で見事に説明されています。
-
この記事はDjango自体の使用と構成について説明することを目的としていないため、少なくともDjangoプロジェクトの構造にある程度精通している必要があります。
-
このチュートリアルでは、サーバー自体の簡単なインストールと、DjangoとApacheをペアリングするために必要な構成の変更についてのみ説明するため、基本的なApache管理に精通しています。
前提条件
新しいパッケージをインストールする前に、システムパッケージとパッケージインデックスを更新することをお勧めします。 それを実行するには:
apt-get update
apt-get upgrade
Apacheのインストール
このテキストはApacheを使用してアプリケーションを提供することに焦点を当てているため、サーバー自体が必要です。 必要なパッケージをインストールするには、以下を実行します。
apt-get install apache2
インストール直後、Apacheはすでに実行されています。 Webブラウザーを開き、サーバーのIPアドレスを指定することで、ApacheWebサーバーが正しくセットアップされているかどうかを確認できます。 画面に簡単な動作します!ページが表示されます。
pipとvirtualenvのインストール
WebサーバーでPythonとDjangoの操作を開始するには、最初にpipとvirtualenvをインストールする必要があります。 Pip は、 Django 自体などのPythonソフトウェアパッケージのインストールを容易にするPythonパッケージマネージャーですが、 virtualenv を使用すると、Pythonアプリケーション用に個別の仮想環境を順番に作成できます異なるアプリケーションに必要なライブラリを分離し、それらの間のバージョンの衝突を回避します。
それを実行するには:
apt-get install python-pip python-virtualenv
このコマンドは、Debianパッケージリポジトリからpipとvirtualenvをインストールします。 --version
スイッチを使用して実行すると、両方のツールが正しくインストールされていることを確認できます。
root@django:~# virtualenv --version
1.7.1.2
root@django:~# pip --version
pip 1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
root@django:~#
virtualenvを使用した仮想環境の作成
Apache をインストールすると、/var/www
ディレクトリが自動的に作成され、デフォルトのWebサーバールートが設定されます。 新しいDjangoアプリケーションをすべての依存関係とともにそこに配置します。
そのディレクトリ内にsampleapp
という新しいディレクトリを作成し、新しいディレクトリに入ります。
cd /var/www
mkdir sampleapp
cd sampleapp
次に、virtualenv
を使用して新しい仮想環境を作成しましょう。 Python仮想環境は、基本的に、Pythonインタープリターとpip
のローカルインスタンスが存在するディレクトリです。 pip
のローカルインスタンスは、仮想環境内にすべてのパッケージをインストールします。 そうすれば、インストールされたパッケージがグローバルPythonインストールを汚染することはなく、2つの異なるバージョンのDjangoまたはその他のライブラリを実行する2つのアプリケーションの仮想シナリオでパッケージバージョンが衝突する可能性もありません。
新しい仮想環境を作成するには、次のように入力します。
virtualenv env
ここで、env
は仮想環境名です。他の単語でもかまいません。 このコマンドの出力は次のようになります。
root@django:/var/www/sampleapp# virtualenv env
New python executable in env/bin/python
Installing distribute.............................................................................................................................................................................................done.
Installing pip...............done.
root@django:/var/www/sampleapp#
これで仮想環境の準備が整い、2つの異なる方法で使用できます。
1つの方法は、仮想環境インタープリターを直接使用してコマンドを実行することです。 この方法では、システム全体で実行される可能性があるため、常に正しいインタープリターまたはpip
インスタンスを実行することを忘れないでください。
root@django:/var/www/sampleapp# env/bin/pip --version
pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)
root@django:/var/www/sampleapp# env/bin/python --version
Python 2.7.3
root@django:/var/www/sampleapp#
もう1つの方法は、最初に環境をアクティブ化することです。
source env/bin/activate
その後、環境名がコマンドラインに追加されます。
root@django:/var/www/sampleapp# source env/bin/activate
(env)root@django:/var/www/sampleapp#
実行されるすべてのコマンドは、ローカル仮想環境バージョンを使用します
(env)root@django:/var/www/sampleapp# pip --version
pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)
(env)root@django:/var/www/sampleapp# python --version
Python 2.7.3
(env)root@django:/var/www/sampleapp#
そのように作業する方が簡単です。 ただし、次のコマンドを使用して作業を完了した後、環境を非アクティブ化する必要があります
deactivate
シェルを通常の状態に戻します
(env)root@django:/var/www/sampleapp# deactivate
root@django:/var/www/sampleapp#
新しく作成された環境は、Djangoや関連ライブラリを含むすべての必要な依存関係を保存するために使用されます。 また、後でApacheおよびmod_wsgiによって使用され、正しい依存関係を使用してアプリケーションにサービスを提供します。
仮想環境内へのDjangoのインストール
次に必要な手順は、仮想環境内にDjangoをインストールすることです。 以下を使用して、事前に環境をアクティブ化せずにそれを実行しましょう。
env/bin/pip install django
このコマンドを実行した後に表示される最後のメッセージは、次のようになります。
Successfully installed django
Cleaning up...
Django は仮想環境内にインストールされ、システム全体のPythonインストール内からは利用できなくなりました。 両方のインタープリターを使用してdjango
モジュールをインポートすることにより、その動作を確認できます
root@django:/var/www/sampleapp# python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named django
>>> exit()
システム全体のインタプリタを使用したインポートは失敗しましたが、
root@django:/var/www/sampleapp# env/bin/python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>
仮想環境内で実行されたものは成功しました。
最初のDjangoプロジェクトを作成する
シンプルで基本的なサンプルプロジェクトを作成するには、次のようにdjango-admin.py
スクリプトを使用できます。
env/bin/django-admin.py startproject sampleapp .
コマンドの末尾の.
に注意してください。これがないと、プロジェクトは追加のサブディレクトリに作成されます。 そのコマンドを実行した後、新しいsampleapp
ディレクトリとmanage.py
スクリプトが/var/www/sampleapp
に作成されます。 manage.py
スクリプトは、この特定のプロジェクトのDjangoコマンドを実行するために使用されます。 manage.py
の考えられる使用法の1つは、テストサーバーインスタンスを実行して、すべてが意図したとおりに機能していることを確認することです。
実行してください:
env/bin/python manage.py runserver 0.0.0.0:8000
これにより、ポート8000のすべてのインターフェイスにバインドされたテストサーバーが実行されます。 出力は次のようになります。
Validating models...
0 errors found
April 08, 2014 - 12:29:31
Django version 1.6.2, using settings 'sampleapp.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
ブラウザでポート8000を使用してサーバーのIPアドレスを開くと(アドレスはhttp://<ip address>:8000/
のようになります)、動作しました!の例Djangoページが表示されます。 これは、組み込みのDjango開発サーバーの代わりにApacheWebサーバーを使用するために取り組む結果です。
Django アプリケーションは正常に動作しているため、アプリケーションをApacheとペアリングすることができます。
Apache用のmod_wsgiのインストール
Apache を使用してPythonアプリケーションを提供する最も簡単で推奨される方法は、mod_wsgiモジュールを使用することです。 PythonでもApacheでもデフォルトではインストールされないため、追加のパッケージをインストールする必要があります。
apt-get install libapache2-mod-wsgi
次のステップは、デフォルトの Apache 仮想ホストを構成することです。この仮想ホストは、記事の冒頭で動作します!ページでDjangoアプリケーションを提供します。
デフォルトの仮想ホストでのmod_wsgiの設定
Apacheの他の仮想ホスト用にmod_wsgiを構成する背後にある考え方は、ここに示されているものと同じです。 デフォルトの仮想ホストはクリーンなApacheインストールによってすでに提供されているため、簡単にするためにデフォルトの仮想ホストを使用します。
nano
エディターでデフォルトの仮想ホスト構成ファイルを開きます
nano /etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
のすぐ下に次の3行を追加します
WSGIDaemonProcess sampleapp python-path=/var/www/sampleapp:/var/www/sampleapp/env/lib/python2.7/site-packages
WSGIProcessGroup sampleapp
WSGIScriptAlias / /var/www/sampleapp/sampleapp/wsgi.py
最初の行は、sampleapp
と呼ばれるWSGIデーモンプロセスを生成します。このプロセスは、Djangoアプリケーションの提供を担当します。 デーモン名は基本的に何でもかまいませんが、ここではアプリケーション名などのわかりやすい名前を使用することをお勧めします。
グローバルPythonインストールとグローバルDjangoインスタンスを使用している場合、python-path
ディレクティブは必要ありません。 ただし、仮想環境を使用すると、 mod_wsgi がPythonパッケージを探す場所を認識できるように、代替Pythonパスを指定する必要があります。
パスには、Djangoプロジェクト自体のディレクトリ-/var/www/sampleapp
-とそのプロジェクトの仮想環境内のPythonパッケージのディレクトリ-/var/www/sampleapp/env/lib/python2.7/site-packages
の2つのディレクトリが含まれている必要があります。 パス定義のディレクトリは、コロン記号を使用して区切られます。
2行目は、特定の仮想ホストが事前に作成されたWSGIデーモンを使用するように指示しているため、デーモン名はこれら2つの間で一致する必要があります。 両方の行でsampleapp
を使用しました。
3行目は、Apacheとmod_wsgiにWSGI構成の場所を示しているため、最も重要です。 Djangoが提供するwsgi.py
には、 Django アプリケーションを提供するためのWSGIのベアボーンデフォルト構成が含まれています。この構成は正常に機能し、このファイルの構成を変更することはこの記事の範囲外です。 。
これらの変更後、Apacheを再起動する必要があります
service apache2 restart
その後、追加のポートを使用せずにサーバーのIPアドレスでWebブラウザーを開くと、最初の動作します!ページではなく、以前と同じDjangoページが表示されます。前に見た。
これで構成が完了します。
注意:追加の注意を払わずにデフォルトの仮想ホストを使用することは、実稼働サーバーを構成するための推奨される方法ではありません。 デモンストレーションの目的で使用されます。
参考文献
mod_wsgiとDjango自体の構成に関するトピックは膨大です。 多くの構成の側面はアプリケーション固有であり、実際のDjangoアプリケーションを使用せずに説明またはデモンストレーションすることは困難です。 このガイドは、Apacheを使用して Django アプリケーションをデプロイするための完全なハウツーではなく、開始方法に関するクイックスタートガイドです。
周りの最高のリソースの1つは、公式の Djangoドキュメントです。 Djangoを検索キーワードとして使用して見つけることができるDigitalOceanに関するすばらしい記事もあります。