序章

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の操作を開始するには、最初にpipvirtualenvをインストールする必要があります。 Pip は、 Django 自体などのPythonソフトウェアパッケージのインストールを容易にするPythonパッケージマネージャーですが、 virtualenv を使用すると、Pythonアプリケーション用に個別の仮想環境を順番に作成できます異なるアプリケーションに必要なライブラリを分離し、それらの間のバージョンの衝突を回避します。

それを実行するには:

apt-get install python-pip python-virtualenv

このコマンドは、Debianパッケージリポジトリからpipvirtualenvをインストールします。 で実行することにより、両方のツールが正しくインストールされていることを確認できます。 --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. The manage.py スクリプトは、この特定のプロジェクトのDjangoコマンドを実行するために使用されます。 の可能な使用法の1つ manage.py テストサーバーインスタンスを実行して、すべてが意図したとおりに機能していることを確認します。

実行してください:

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 

すぐ下に次の3行を追加します <VirtualHost *:80>

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

最初の行は、呼ばれるWSGIデーモンプロセスを生成します sampleapp それは私たちのDjangoアプリケーションを提供する責任があります。 デーモン名は基本的に何でもかまいませんが、ここではアプリケーション名などのわかりやすい名前を使用することをお勧めします。

グローバルPythonインストールとグローバルDjangoインスタンスを使用していた場合、 python-path ディレクティブは必要ありません。 ただし、仮想環境を使用すると、 mod_wsgi がPythonパッケージを探す場所を認識できるように、代替Pythonパスを指定する必要があります。

パスには2つのディレクトリが含まれている必要があります。Djangoプロジェクト自体のディレクトリ- /var/www/sampleapp -およびそのプロジェクトの仮想環境内のPythonパッケージのディレクトリ- /var/www/sampleapp/env/lib/python2.7/site-packages. パス定義のディレクトリは、コロン記号を使用して区切られます。

2行目は、特定の仮想ホストが事前に作成されたWSGIデーモンを使用するように指示しているため、デーモン名はこれら2つの間で一致する必要があります。 使用しました sampleapp 両方の行で。

3行目は、Apachemod_wsgiにWSGI構成の場所を示しているため、最も重要です。 The wsgi.py Django が提供する、 Django アプリケーションを提供するためのWSGIのベアボーンデフォルト構成が含まれており、正常に機能します。このファイルの構成を変更することは、この記事の範囲外です。

これらの変更後、Apacheを再起動する必要があります

service apache2 restart

その後、追加のポートを使用せずにサーバーのIPアドレスでWebブラウザーを開くと、最初の動作します!ページではなく、以前と同じDjangoページが表示されます。前に見た。

これで構成が完了します。

注意:追加の注意を払わずにデフォルトの仮想ホストを使用することは、実稼働サーバーを構成するための推奨される方法ではありません。 デモンストレーションの目的で使用されます。

参考文献

mod_wsgiDjango自体の構成に関するトピックは膨大です。 多くの構成の側面はアプリケーション固有であり、実際のDjangoアプリケーションを使用せずに説明またはデモンストレーションすることは困難です。 このガイドは、Apacheを使用して Django アプリケーションをデプロイするための完全なハウツーではなく、開始方法に関するクイックスタートガイドです。

周りの最高のリソースの1つは、公式の Djangoドキュメントです。 Djangoを検索キーワードとして使用して見つけることができるDigitalOceanに関するすばらしい記事もあります。