今回のテーマは「uWSGIでDjangoアプリを動かす基礎」です。前回の「4-1. Djangoアプリケーションのデプロイの概要」でnginxとuWSGIでDjangoアプリを動かす概要を見てきました。今回はuWSGIでDjangoを動かしていきたいと思います。
前提
まずディレクトリ構成を確認しておきましょう。以下のようなディレクトリである前提で話を進めたいと思います。
venv #mysiteの仮想環境用
mysite #プロジェクトルート
│└mysite
│─base
│─thread
│─search
│─static
└─media
uWSGIの導入
まずはuWSGIを導入しましょう。uWSGIのインストールにはpythonとC言語のコンパイラが必要です。今回はUbuntu環境にインストールする前提で話を進めていきます。他の環境にインストールする場合はhttps://uwsgi-docs.readthedocs.io/en/latest/Install.htmlを参考にしてください。
$ sudo apt install build-essential python
$ source venv/bin/activate
(venv)$ pip install uwsgi
これでuWSGIのインストールは完了です。
今回はプロジェクトのvenv環境にuWSGIをインストールしましたが、OSのグローバルな環境や異なるvenv環境にインストールしても構いません。Djangoプロジェクトと異なるvenv環境にインストールした場合には動作させるためのオプションが変わりますのでご注意ください。
uWSGIでDjangoアプリケーションを起動する
ではuWSGIでDjangoアプリを起動してみましょう。今回は8081ポートからブラウザでアクセスできるように起動します。nginxとの連携については別の機会に触れることとし、まずはuWSGI単体でDjangoアプリ起動することを考えます。
Djangoプロジェクトと同じvenv環境にインストールした場合
このケースではuWSGIとDjangoアプリの環境が同じなので以下のように起動すればOKです。
$ cd {venvディレクトリのある階層}
$ source venv/bin/activate
(venv)$ uwsgi --http :8000 --module mysite.wsgi --chdir {Djagoプロジェクトルートパス}
chdirオプションはuwsgiコマンドの実行場所がDjangoプロジェクトのルートであれば必要ありません。また、mysite/mysite/wsgi.pyを直接指定する場合はmoduleオプションではなくwsgi-fileオプションでファイル名を指定する点もご注意ください。
Djangoプロジェクトと異なる環境にuWSGIをインストールした場合
この場合はuWSGI起動時にhomeオプションを指定して、どのpythonを使ってDjangoアプリを起動するか指定しなければいけません。
例えばOSに直接uWSGIをインストールしている状況では以下のようなコマンドで起動します。
$ cd {プロジェクトルート}
$ uwsgi --http :8000 --module mysite.wsgi \
--home {Djangoプロジェクトのvenvディレクトリパス} \
--chdir {Djagoプロジェクトルートパス}
uWSGIの動作確認
この状態でWEBブラウザでlocalhost:8000にアクセスして確認してみましょう。以下のような図となるはずです。
fig. 4-2
CSSが適用されていませんね。どういうことでしょうか?実はstaticなファイルの置き場所はuWSGIかNginxどちらかで別途設定してあげる必要があります。詳細は次回の「Staticファイルを扱う」で見ていきます。
uwsgi.iniの設定
これまでuWSGIの起動にはコマンドにオプションをつけて起動してきました。毎回この長いオプションをつけて起動するのは大変です。起動用の設定ファイルを作成しましょう。uWSGIを起動するための設定はuwsgi.iniファイルに書きます。このファイルを起動時に読み込むことでコマンドにオプションを渡すのと同等のことが出来るようになります。
[uwsgi]
chdir = {Djangoアプリのプロジェクトルート}
module = mysite.wsgi:application
http = 0.0.0.0:8000
上記のuwsgi.iniは起動する最低限のオプションに留めました。本番環境では上記設定では不足であることに注意してください。uWSGIはとても多機能なサーバであるため多くのオプションがあります。このオプションはuWSGI Optionsで確認することができます。
では設定ファイルを使ってuWSGIを起動しましょう。以下コマンドで起動します。今回はvenv環境にインストールしたuWSGIを用いるためアクティベートした状態で起動します。
(venv)$ uwsgi --ini uwsgi.ini
最後に
今回はuWSGIの基本的な使用について見てきました。次回はStaticファイルの扱いについて見ていきたいと思います。一歩一歩確実にマスターしていきましょう。
Sponsored Link