CentOS7でApacheとmod_wsgiを使用してDjangoアプリケーションを提供する方法
序章
Djangoは、PythonアプリケーションまたはWebサイトをすばやく立ち上げるのに役立つ強力なWebフレームワークです。 Djangoには、コードをローカルでテストするための簡略化された開発サーバーが含まれていますが、本番環境に少しでも関連する場合は、より安全で強力なWebサーバーが必要です。
このガイドでは、CentOS7のPython仮想環境にDjangoをインストールして構成する方法を示します。 次に、アプリケーションの前にApacheをセットアップして、アプリケーションロジックを必要とするリクエストをDjangoアプリに渡す前に、クライアントリクエストを直接処理できるようにします。 これを使用してこれを行います mod_wsgi
WSGIインターフェース仕様を介してDjangoと通信できるApacheモジュール。
前提条件と目標
このガイドを完了するには、root以外のユーザーがいる新しいCentOS7サーバーインスタンスが必要です。 sudo
構成された特権。 初期サーバーセットアップガイドを実行することで、これをセットアップする方法を学ぶことができます。
Python仮想環境内にDjangoをインストールします。 プロジェクトに固有の環境にDjangoをインストールすると、プロジェクトとその要件を個別に処理できるようになります。
アプリケーションを起動して実行したら、DjangoアプリとインターフェイスするようにApacheを構成します。 それはでこれを行います mod_wsgi
Apacheモジュール。HTTPリクエストをWSGIと呼ばれる仕様で定義された予測可能なアプリケーション形式に変換できます。 WSGIの詳細については、このガイドのリンクされたセクションを参照してください。
始めましょう。
CentOSおよびEPELリポジトリからパッケージをインストールする
プロセスを開始するには、ディストリビューションのリポジトリから必要なすべてのアイテムをダウンロードしてインストールします。 これには、ApacheWebサーバーが含まれます。 mod_wsgi
Djangoアプリとのインターフェースに使用されるモジュール、および pip
、Python関連ツールのダウンロードに使用できるPythonパッケージマネージャー。
取得するため pip
、いくつかの追加パッケージとして、EPELリポジトリを有効にする必要があります。 次のように入力すると、簡単に実行できます。
sudo yum install epel-release
EPELを有効にすると、次のように入力して必要なコンポーネントをインストールできます。
sudo yum install python-pip httpd mod_wsgi
Python仮想環境を構成する
リポジトリからのコンポーネントができたので、Djangoプロジェクトの作業を開始できます。 最初のステップは、Python仮想環境を作成して、Djangoプロジェクトがシステムのツールや作業中の他のPythonプロジェクトから分離されるようにすることです。
インストールする必要があります virtualenv
これらの環境を作成するコマンド。 これを使用して取得できます pip
:
sudo pip install virtualenv
と virtualenv
インストールすると、プロジェクトの形成を開始できます。 プロジェクトを保持するディレクトリを作成し、そのディレクトリに移動します。
mkdir ~/myproject
cd ~/myproject
プロジェクトディレクトリ内で、次のように入力してPython仮想環境を作成します。
virtualenv myprojectenv
これにより、というディレクトリが作成されます myprojectenv
あなたの中で myproject
ディレクトリ。 内部には、Pythonのローカルバージョンとのローカルバージョンがインストールされます pip
. これを使用して、プロジェクト用に分離されたPython環境をインストールおよび構成できます。
プロジェクトのPython要件をインストールする前に、仮想環境をアクティブ化する必要があります。 次のように入力すると、次のように入力できます。
source myprojectenv/bin/activate
プロンプトが変化して、Python仮想環境内で操作していることを示します。 次のようになります。 (myprojectenv)user@host:~/myproject$
.
仮想環境がアクティブな状態で、ローカルインスタンスを使用してDjangoをインストールします。 pip
次のように入力します。
pip install django
新しいDjangoプロジェクトを作成して構成する
Djangoが仮想環境にインストールされたので、実際のDjangoプロジェクトファイルを作成できます。
Djangoプロジェクトを作成する
すでにプロジェクトディレクトリがあるので、ここにファイルをインストールするようにDjangoに指示します。 通常の実際のコードを使用して第2レベルのディレクトリを作成し、このディレクトリに管理スクリプトを配置します。 これの鍵は、Djangoに現在のディレクトリにファイルを作成するように指示する最後のドットです。
django-admin.py startproject myproject .
プロジェクト設定を調整する
新しく作成したプロジェクトファイルで最初に行うべきことは、設定を調整することです。 テキストエディタで設定ファイルを開きます。
nano myproject/settings.py
このガイドでは、わかりやすくするためにデフォルトのSQLiteデータベースを使用するため、実際にはあまり変更する必要はありません。 静的ファイルディレクトリの構成に焦点を当てます。ここで、Djangoは静的ファイルを配置して、Webサーバーが静的ファイルを簡単に提供できるようにします。
ファイルの最後に、このディレクトリを構成する行を追加します。 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インデックスページが表示されます。
追加する場合 /admin
アドレスバーのURLの最後に、で作成した管理ユーザー名とパスワードの入力を求められます。 createsuperuser
指図:
認証後、デフォルトのDjango管理インターフェースにアクセスできます。
探索が終了したら、ターミナルウィンドウでCTRL-Cを押して、開発サーバーをシャットダウンします。
とりあえずDjangoの使用は終了したので、次のように入力して仮想環境から戻ることができます。
deactivate
Apacheを構成する
Djangoプロジェクトが機能しているので、Apacheをフロントエンドとして構成できます。 受信したクライアント接続は、Djangoアプリケーションが使用することを期待するWSGI形式に変換されます。 mod_wsgi
モジュール。 これは、以前のインストール時に自動的に有効になっているはずです。
WSGIパスを構成するには、WSGIパスを定義する新しい構成ファイルを作成する必要があります。 でファイルを作成して開く sudo
内の特権 /etc/httpd/conf.d
ディレクトリ。 このファイルを呼び出します django.conf
:
sudo nano /etc/httpd/conf.d/django.conf
まず、静的ファイルを構成しましょう。 エイリアスを使用して、Apacheにで始まるリクエストをマップするように指示します /static
プロジェクトフォルダ内の「静的」ディレクトリに移動します。 以前にそこで静的アセットを収集しました。 エイリアスを設定してから、ディレクトリブロックを使用して問題のディレクトリへのアクセスを許可します。
Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
Require all granted
</Directory>
次に、へのアクセスを許可します wsgi.py
Djangoコードが保存されている第2レベルのプロジェクトディレクトリ内のファイル。 これを行うには、内部にファイルセクションがあるディレクトリセクションを使用します。 このネストされた構成内のファイルへのアクセスを許可します。
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>
これを設定すると、WSGIパスを実際に処理するファイルの部分を構築する準備が整います。 デーモンモードを使用してWSGIプロセスを実行します。これは、推奨される構成です。 使用できます WSGIDaemonProcess
これを設定するためのディレクティブ。
このディレクティブは、プロセスに任意の名前を付けます。 使用します myproject
一貫性を保つために。 その後、Apacheが必要となる可能性のあるすべてのコンポーネントを見つけることができるPythonパスを設定します。 仮想環境を使用したため、2つのパスコンポーネントを設定する必要があります。 1つ目は、プロジェクトの親ディレクトリで、プロジェクトファイルを見つけることができます。 2番目は lib/pythonx.x/site-packages
仮想環境フォルダー内のパス(XはPythonバージョン番号コンポーネントに置き換えられます)。 このようにして、Apacheはプロジェクトの実行に必要な他のすべてのPythonコードを見つけることができます。
その後、プロセスグループを指定する必要があります。 これは、 WSGIDaemonProcess
ディレクティブ(myproject
私たちの場合には)。 最後に、Apacheがルートドメインのリクエストを wsgi.py
ファイル:
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:/home/user/myproject/myprojectenv/lib/python2.7/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py
これらの変更が終了したら、ファイルを保存して閉じます。
いくつかの権限の問題のまとめ
次に、Apacheサービスがファイルにアクセスできるように、いくつかの権限セットを修正する必要があります。 デフォルトでは、CentOSは各ユーザーのホームディレクトリを非常に制限的にロックダウンします。 これを回避するために、 apache
私たち自身のユーザーのグループへのユーザー。 これにより、適切なファイルにアクセスできるように、アクセス許可を十分に開くことができます。
追加します apache
次のコマンドを使用して、ユーザーをグループに追加します。 自分のユーザー名を user
コマンド内:
sudo usermod -a -G user apache
これで、ユーザーグループにホームディレクトリに対する実行権限を与えることができます。 これにより、Apacheプロセスは以下のコンテンツを入力してアクセスできるようになります。
chmod 710 /home/user
これにより、Apacheはホームディレクトリに入ることができます。
この記事で使用されているデフォルトのSQLiteデータベースを使用している場合は、Apacheプロセスがデータベースファイル自体にアクセスできるようにする必要があります。
そのための最初のステップは、データベースのグループ所有者が読み取りと書き込みを行えるようにアクセス許可を変更することです。 データベースファイルは db.sqlite3
デフォルトでは、ベースプロジェクトディレクトリに配置する必要があります。
chmod 664 ~/myproject/db.sqlite3
その後、Apacheが実行されるグループに、 apache
グループ、ファイルのグループ所有権:
sudo chown :apache ~/myproject/db.sqlite3
ファイルに書き込むには、データベースの親ディレクトリに対する所有権をApacheグループに与える必要もあります。
sudo chown :apache ~/myproject
これらの手順が完了すると、Apacheサービスを開始する準備が整います。 これを行うには、次のように入力します。
sudo systemctl start httpd
これで、ポートを指定せずにサーバーのドメイン名またはIPアドレスにアクセスしてDjangoサイトにアクセスできるようになります。 通常のサイトと管理インターフェースは期待どおりに機能するはずです。
すべてが期待どおりに機能する場合は、Apacheサービスを有効にして、起動時に自動的に開始するようにすることができます。
sudo systemctl enable httpd
結論
このガイドでは、独自の仮想環境でDjangoプロジェクトをセットアップしました。 Apacheを構成しました mod_wsgi
クライアントリクエストを処理し、Djangoアプリとインターフェースします。
Djangoは、多くの一般的な要素を提供することでプロジェクトとアプリケーションの作成を簡単にし、独自の要素に集中できるようにします。 この記事で説明する一般的なツールチェーンを活用することで、単一のサーバーから作成したアプリケーションを簡単に提供できます。