CentOS 7でApacheとmod_wsgiを使用してDjangoアプリケーションを提供する方法

前書き

Djangoは強力なWebフレームワークであり、PythonアプリケーションまたはWebサイトを迅速に立ち上げるのに役立ちます。 Djangoには、ローカルでコードをテストするための簡素化された開発サーバーが含まれていますが、わずかに生産関連の場合でも、より安全で強力なWebサーバーが必要です。

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

前提条件と目標

このガイドを完了するには、 `+ sudo +`特権が設定された非rootユーザーを持つ新しいCentOS 7サーバーインスタンスが必要です。 https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [初期サーバーセットアップガイド]を実行して、これを設定する方法を学ぶことができます。

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

アプリケーションを起動して実行したら、DjangoアプリとインターフェイスするようにApacheを構成します。 これは、HTTPリクエストをWSGIと呼ばれる仕様で定義された予測可能なアプリケーション形式に変換できる、 + mod_wsgi + Apacheモジュールでこれを行います。 WSGIの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-uwsgi-and-nginx-to-serve-python-apps-onのリンクセクションを参照してください。 -ubuntu-14-04#definitions-and-concepts [このガイド]。

始めましょう。

CentOSおよびEPELリポジトリからパッケージをインストールする

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

`+ pip +`を取得するには、いくつかの追加パッケージとしてEPELリポジトリを有効にする必要があります。 次のように入力することで簡単にできます。

sudo yum install epel-release

EPELを有効にすると、次のように入力して必要なコンポーネントをインストールできます。

sudo yum install python-pip httpd mod_wsgi

Python仮想環境を構成する

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

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

sudo pip install virtualenv

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

mkdir ~/
cd ~/

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

virtualenv

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

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

source /bin/activate

プロンプトが変わり、Python仮想環境内で操作していることを示す必要があります。 次のようになります: +()@:〜/ $ +

仮想環境がアクティブな状態で、次のように入力して、Djangoを `+ pip +`のローカルインスタンスでインストールします。

pip install django

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

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

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

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

django-admin.py startproject  .

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

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

nano /settings.py

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

ファイルの最後に、このディレクトリを設定する行を追加します。 Djangoは `+ STATIC_ROOT +`設定を使用して、これらのファイルが保存されるディレクトリを決定します。 プロジェクトのメインディレクトリで「静的」というディレクトリを使用するように、Pythonを少し使用します。

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

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

初期プロジェクトのセットアップを完了する

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

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

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

./manage.py createsuperuser

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

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

./manage.py collectstatic

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

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

./manage.py runserver 0.0.0.0:8000

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

http://:8000

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

image:https://assets.digitalocean.com/articles/django_centos7/django_default.png [Django default index]

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

画像:https://assets.digitalocean.com/articles/django_centos7/django_admin_login.png [Django管理者ログイン]

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

image:https://assets.digitalocean.com/articles/django_centos7/django_admin_page.png [Django管理インターフェース]

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

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

deactivate

Apacheを構成する

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

WSGIパスを構成するには、WSGIパスを定義する新しい構成ファイルを作成する必要があります。 `+ / etc / httpd / conf.d `ディレクトリ内で、 ` sudo `権限でファイルを作成して開きます。 このファイルを ` django.conf +`と呼びます:

sudo nano /etc/httpd/conf.d/django.conf

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

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

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

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

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

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

このディレクティブは、プロセスの任意の名前を取ります。 一貫性を保つために「+」を使用します。 その後、Apacheが必要なすべてのコンポーネントを見つけることができるPythonパスを設定します。 仮想環境を使用したため、2つのパスコンポーネントを設定する必要があります。 1つ目はプロジェクトの親ディレクトリで、プロジェクトファイルがあります。 2つ目は、仮想環境フォルダー内の ` lib / python。/ site-packages +`パスです(XはPythonバージョン番号コンポーネントに置き換えられます)。 このようにして、Apacheはプロジェクトの実行に必要な他のすべてのPythonコードを見つけることができます。

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

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

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

WSGIDaemonProcess  python-path=/home//:/home////lib/python./site-packages
WSGIProcessGroup
WSGIScriptAlias / /home////wsgi.py

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

いくつかのパーミッションの問題をまとめる

次に、Apacheサービスがファイルにアクセスできるように、いくつかの許可セットを修正する必要があります。 デフォルトでは、CentOSは各ユーザーのホームディレクトリを非常に制限してロックします。 これを回避するために、 `+ apache +`ユーザーを自分のユーザーのグループに追加します。 これにより、適切なファイルにアクセスできるように、アクセス許可を十分に開くことができます。

次のコマンドを使用して、グループに `+ apache `ユーザーを追加します。 コマンドの「+」を独自のユーザー名に置き換えます。

sudo usermod -a -G  apache

これで、ユーザーグループにホームディレクトリの実行許可を与えることができます。 これにより、Apacheプロセスは以下のコンテンツを入力およびアクセスできます。

chmod 710 /home/

これにより、Apacheはホームディレクトリに入ることができます。

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

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

chmod 664 ~//db.sqlite3

その後、Apacheが実行されるグループ、 `+ apache +`グループ、ファイルのグループ所有権を与える必要があります。

sudo chown :apache ~//db.sqlite3

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

sudo chown :apache ~/

これらの手順が完了すると、Apacheサービスを開始する準備が整います。 これを行うには、次を入力します。

sudo systemctl start httpd

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

すべてが期待どおりに機能する場合、Apacheサービスを有効にして、起動時に自動的に開始されるようにすることができます。

sudo systemctl enable httpd

結論

このガイドでは、独自の仮想環境でDjangoプロジェクトを設定しました。 クライアントリクエストを処理し、Djangoアプリとやり取りするために、 `+ mod_wsgi +`でApacheを設定しました。

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

Related