序章

Djangoは、PythonアプリケーションまたはWebサイトをすばやく立ち上げるのに役立つ強力なWebフレームワークです。 Djangoには、コードをローカルでテストするための簡略化された開発サーバーが含まれていますが、本番環境に少しでも関連する場合は、より安全で強力なWebサーバーが必要です。

このガイドでは、Python仮想環境にDjangoをインストールして構成する方法を示します。 次に、アプリケーションの前にApacheをセットアップして、アプリケーションロジックを必要とするリクエストをDjangoアプリに渡す前に、クライアントリクエストを直接処理できるようにします。 これは、WSGIインターフェイス仕様を介してDjangoと通信できるmod_wsgiApacheモジュールを使用して行います。

前提条件と目標

このガイドを完了するには、sudo権限が設定されたroot以外のユーザーがいる新しいUbuntu14.04サーバーインスタンスが必要です。 初期サーバーセットアップガイドを実行することで、これをセットアップする方法を学ぶことができます。

Python仮想環境内にDjangoをインストールします。 プロジェクトに固有の環境にDjangoをインストールすると、プロジェクトとその要件を個別に処理できるようになります。

アプリケーションを起動して実行したら、DjangoアプリとインターフェイスするようにApacheを構成します。 これは、mod_wsgi Apacheモジュールを使用して行われます。このモジュールは、HTTPリクエストをWSGIと呼ばれる仕様で定義された予測可能なアプリケーション形式に変換できます。 WSGIの詳細については、このガイドのリンクされたセクションを参照してください。

始めましょう。

Ubuntuリポジトリからパッケージをインストールする

プロセスを開始するには、Ubuntuリポジトリから必要なすべてのアイテムをダウンロードしてインストールします。 これには、Apache Webサーバー、Djangoアプリとのインターフェースに使用されるmod_wsgiモジュール、およびPython関連ツールのダウンロードに使用できるPythonパッケージマネージャーであるpipが含まれます。

必要なものをすべて入手するには、サーバーのローカルパッケージインデックスを更新してから、適切なパッケージをインストールします。

Python 2でDjangoを使用している場合、必要なコマンドは次のとおりです。

sudo apt-get update
sudo apt-get install python-pip apache2 libapache2-mod-wsgi

代わりに、Python 3でDjangoを使用している場合は、代替のApacheモジュールが必要になります。 この場合の適切なコマンドは次のとおりです。

sudo apt-get update
sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3

チュートリアルの残りの部分で仮想環境の外部を操作する場合、Python 3を使用している場合は、pippip3に置き換えます。

Python仮想環境を構成する

Ubuntuリポジトリのコンポーネントができたので、Djangoプロジェクトの作業を開始できます。 最初のステップは、Python仮想環境を作成して、Djangoプロジェクトがシステムのツールや作業中の他のPythonプロジェクトから分離されるようにすることです。

これらの環境を作成するには、virtualenvコマンドをインストールする必要があります。 これはpipを使用して取得できます。

sudo pip install virtualenv

virtualenvをインストールすると、プロジェクトの形成を開始できます。 プロジェクトを保持するディレクトリを作成し、そのディレクトリに移動します。

mkdir ~/myproject
cd ~/myproject

プロジェクトディレクトリ内で、次のように入力してPython仮想環境を作成します。

virtualenv myprojectenv

これにより、myprojectディレクトリ内にmyprojectenvというディレクトリが作成されます。 内部には、Pythonのローカルバージョンとpipのローカルバージョンがインストールされます。 これを使用して、プロジェクト用に分離されたPython環境をインストールおよび構成できます。

プロジェクトのPython要件をインストールする前に、仮想環境をアクティブ化する必要があります。 次のように入力すると、次のように入力できます。

source myprojectenv/bin/activate

プロンプトが変化して、Python仮想環境内で操作していることを示します。 (myprojectenv)user@host:~/myproject$のようになります。

仮想環境をアクティブにして、次のように入力して、pipのローカルインスタンスを使用してDjangoをインストールします。

pip install django

新しいDjangoプロジェクトを作成して構成する

Djangoが仮想環境にインストールされたので、実際のDjangoプロジェクトファイルを作成できます。

Djangoプロジェクトを作成する

すでにプロジェクトディレクトリがあるので、ここにファイルをインストールするようにDjangoに指示します。 通常の実際のコードを使用して第2レベルのディレクトリを作成し、このディレクトリに管理スクリプトを配置します。 これの鍵は、Djangoに現在のディレクトリにファイルを作成するように指示する最後のドットです。

django-admin.py startproject myproject .

プロジェクト設定を調整する

新しく作成したプロジェクトファイルで最初に行うべきことは、設定を調整することです。 テキストエディタで設定ファイルを開きます。

nano myproject/settings.py

このガイドでは、わかりやすくするためにデフォルトのSQLiteデータベースを使用するため、実際にはあまり変更する必要はありません。 Webサーバーが静的ファイルを簡単に提供できるようにDjangoが静的ファイルを配置する静的ファイルディレクトリの構成に焦点を当てます。

ファイルの最後に、このディレクトリを構成する行を追加します。 DjangoはSTATIC_ROOT設定を使用して、これらのファイルを配置するディレクトリを決定します。 Pythonを少し使用して、プロジェクトのメインディレクトリにある「static」というディレクトリを使用するように指示します。

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

終了したら、ファイルを保存して閉じます。

プロジェクトの初期設定を完了する

これで、管理スクリプトを使用して、初期データベーススキーマをSQLiteデータベースに移行できます。

cd ~/myproject
./manage.py makemigrations
./manage.py migrate

次のように入力して、プロジェクトの管理ユーザーを作成します。

./manage.py createsuperuser

ユーザー名を選択し、メールアドレスを入力し、パスワードを選択して確認する必要があります。

次のように入力して、構成したディレクトリの場所にすべての静的コンテンツを収集できます。

./manage.py collectstatic

操作を確認する必要があります。 静的ファイルは、プロジェクトディレクトリ内のstaticというディレクトリに配置されます。

最後に、次のコマンドを使用してDjango開発サーバーを起動することにより、プロジェクトをテストできます。

./manage.py runserver 0.0.0.0:8000

Webブラウザーで、サーバーのドメイン名またはIPアドレスにアクセスし、その後に:8000を続けます。

http://server_domain_or_IP:8000

デフォルトのDjangoインデックスページが表示されます。

Django default index

アドレスバーのURLの末尾に/adminを追加すると、createsuperuserコマンドで作成した管理ユーザー名とパスワードの入力を求められます。

Django admin login

認証後、デフォルトのDjango管理インターフェースにアクセスできます。

Django admin interface

探索が終了したら、ターミナルウィンドウでCTRL-Cを押して、開発サーバーをシャットダウンします。

とりあえずDjangoの使用は終了したので、次のように入力して仮想環境から戻ることができます。

deactivate

Apacheを構成する

Djangoプロジェクトが機能しているので、Apacheをフロントエンドとして構成できます。 受信したクライアント接続は、Djangoアプリケーションがmod_wsgiモジュールを使用して期待するWSGI形式に変換されます。 これは、以前のインストール時に自動的に有効になっているはずです。

WSGIパスを構成するには、デフォルトの仮想ホストファイルを編集する必要があります。

sudo nano /etc/apache2/sites-available/000-default.conf

ファイルにすでに存在するディレクティブを保持できます。 いくつかのアイテムを追加する必要があります。

まず、静的ファイルを構成しましょう。 エイリアスを使用して、/staticで始まるリクエストをプロジェクトフォルダー内の「静的」ディレクトリにマップするようにApacheに指示します。 以前にそこで静的アセットを収集しました。 エイリアスを設定してから、ディレクトリブロックを使用して問題のディレクトリへのアクセスを許可します。

<VirtualHost *:80>
    . . .

    Alias /static /home/user/myproject/static
    <Directory /home/user/myproject/static>
        Require all granted
    </Directory>

</VirtualHost>

次に、Djangoコードが保存されている第2レベルのプロジェクトディレクトリ内のwsgi.pyファイルへのアクセスを許可します。 これを行うには、内部にファイルセクションがあるディレクトリセクションを使用します。 このネストされた構成内のファイルへのアクセスを許可します。

<VirtualHost *:80>
    . . .

    Alias /static /home/user/myproject/static
    <Directory /home/user/myproject/static>
        Require all granted
    </Directory>

    <Directory /home/user/myproject/myproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

</VirtualHost>

これを設定すると、WSGIパスを実際に処理するファイルの部分を構築する準備が整います。 デーモンモードを使用してWSGIプロセスを実行します。これは、推奨される構成です。 WSGIDaemonProcessディレクティブを使用してこれを設定できます。

このディレクティブは、プロセスに任意の名前を付けます。 一貫性を保つためにmyprojectを使用します。 その後、プロジェクトの親ディレクトリへのPythonパスを設定します。 このガイドでは、これは/home/user/myprojectになります。 仮想環境を使用したため、Pythonホームを仮想環境のルートに設定する必要もあります。 このようにして、Apacheはプロジェクトの実行に必要な他のすべてのPythonコードを見つけることができます。

その後、プロセスグループを指定する必要があります。 これは、WSGIDaemonProcessディレクティブ(この場合はmyproject)に選択したのと同じ名前を指している必要があります。 最後に、Apacheがルートドメインのリクエストをwsgi.pyファイルに渡すようにスクリプトエイリアスを設定する必要があります。

<VirtualHost *:80>
    . . .

    Alias /static /home/user/myproject/static
    <Directory /home/user/myproject/static>
        Require all granted
    </Directory>

    <Directory /home/user/myproject/myproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess myproject python-path=/home/user/myproject python-home=/home/user/myproject/myprojectenv
    WSGIProcessGroup myproject
    WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py

</VirtualHost>

これらの変更が終了したら、ファイルを保存して閉じます。

いくつかの権限の問題のまとめ

この記事で使用されているデフォルトのSQLiteデータベースを使用している場合は、Apacheプロセスにこのファイルへのアクセスを許可する必要があります。

そのための最初のステップは、データベースのグループ所有者が読み取りと書き込みを行えるようにアクセス許可を変更することです。 データベースファイルはデフォルトでdb.sqlite3と呼ばれ、ベースプロジェクトディレクトリに配置する必要があります。

chmod 664 ~/myproject/db.sqlite3

その後、Apacheが実行されるグループ、www-dataグループ、ファイルのグループ所有権を指定する必要があります。

sudo chown :www-data ~/myproject/db.sqlite3

ファイルに書き込むには、データベースの親ディレクトリに対する所有権をApacheグループに与える必要もあります。

sudo chown :www-data ~/myproject

これらの手順が完了すると、Apacheサービスを再起動して、行った変更を実装する準備が整います。 次のように入力して、Apacheを再起動します。

sudo service apache2 restart

これで、ポートを指定せずにサーバーのドメイン名またはIPアドレスにアクセスしてDjangoサイトにアクセスできるようになります。 通常のサイトと管理インターフェースは期待どおりに機能するはずです。

結論

このガイドでは、独自の仮想環境でDjangoプロジェクトをセットアップしました。 クライアントリクエストを処理し、Djangoアプリとインターフェイスするように、mod_wsgiを使用してApacheを構成しました。

Djangoは、多くの一般的な要素を提供することでプロジェクトとアプリケーションの作成を簡単にし、独自の要素に集中できるようにします。 この記事で説明する一般的なツールチェーンを活用することで、単一のサーバーから作成したアプリケーションを簡単に提供できます。