WSLのApache+mod_wsgiでDjangoのプロジェクトをデプロイする
はじめに
端的にいいますと、DjangoGirlsをWSLのApacheでデプロイする手順をまとめてみました。
DjangoGirlsはWindows環境で試したので、最初はWindows環境でApacheを構築して・・・と思ったのですが、もはやWindowsでApacheを構築するのはどうかと思いまして、せっかくWSLがあるのでそちらでApacheなどを動かそうと思った次第です。
前提条件(試した環境)
- Windows10
- WSLは構築済み(Ubuntu 18.04)
- DjangoGirlsのチュートリアルは一通り終わっている。
Windowsでのパスは ”D:\dev\djangogirls”で開発していました。
構築の方針(というほどではありませんが)
- WSLのユーザはdjuser
sudoで作業するので、グループに追加しておいてください。
この辺の考え方は各自お好みで。 - python仮想環境はvenvで作る。
- Djangoの仮想環境パス:/home/djuser/dev/djangogirls/djenv
仮想環境はdjenvという名前で作ります。 - Apacheは2.4
- Djangoのバージョンは2.2.4 (DjangoGirlsで指定されたバージョン)
環境構築
全てWSL上での作業となります。ログインユーザはdjuser。
事前にUbuntuのアップデートやaptのアップデートは実施済みです。
Apacheのインストール
#Apacheのインストール
$ sudo apt install apache2 apache2-dev
#Apacheの起動確認
$ sudo apachectl start
WSL上で初めてApacheを起動する時は、ファイアウォールの警告が表示されると思いますので、アクセスを許可してください。
ブラウザで確認。
とりあえず動いています。
Python 関係のインストール
# Python関係のインストール
$ sudo apt install python3 python3-pip python3-venv
# バージョンを確認
$ python3 --version
Python 3.6.9
Django仮想環境用ディレクトリ、仮想環境の作成
#ディレクトリ作成
$ mkdir /home/djuser/dev
$ mkdir /home/djuser/dev/djangogirls
$ cd /home/djuser/dev/djangogirls
#仮想環境作成
$ python3 -m venv djenv
#仮想環境をアクティベート
$ . ./djenv/bin/activate
以下、仮想環境で作業します。
諸々インストールする前にpipの状況を確認しておきます。pipのバージョンがが9.0.1と古いので、アップデートしておきましょう。
#仮想環境でのpipの状況を確認
(djenv) $ pip list
pip (9.0.1) #pipが古い
pkg-resources (0.0.0)
setuptools (39.0.1)
#pipをアップデート
(djenv) $ pip install -U pip
(djenv) $ pip list
Package Version
------------- -------
pip 20.1.1
pkg-resources 0.0.0
setuptools 39.0.1
本家でもpipが古いとインストールが機能しないと書かれています。


Djangoとmod_wsgiをインストール
#Djangoをインストール
(djenv) $ pip install django==2.2.4
#mod_wsgiをインストール
(djenv) $ pip install mod_wsgi
#インストール結果を確認
(djenv) $ mod_wsgi-express module-config
LoadModule wsgi_module "/home/djuser/dev/djangogirls/djenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/djuser/dev/djangogirls/djenv"
mod_wsgi-express module-config
の結果はApacheの設定で使うので、メモしておきましょう。
今一度インストールの状況を確認。
(djenv) $ pip list
Package Version
------------- -------
Django 2.2.4
mod-wsgi 4.7.1
pip 20.1.1
pkg-resources 0.0.0
pytz 2020.1
setuptools 39.0.1
sqlparse 0.3.1
この内容、特にバージョンは実行するタイミングで変化があると思いますので、何が入っているのかという目安として考えてくださいませ。
Apacheの設定
事前に確認しておくこと
- DjangoGirlsのパス
Apacheの設定ファイルに書くので、WSLとしてのパスを確認。- Windowsでのパス:
D:\dev\djangogirls
- WSLでのパス:
/mnt/d/dev/djangogirls
- プロジェクト:
mysite
- Windowsでのパス:
- mod_wsgiのインストール情報
先ほど確認した情報LoadModule wsgi_module "/home/djuser/dev/djangogirls/djenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/djuser/dev/djangogirls/djenv"
- WSL側の仮想環境のパス:
/home/djuser/dev/djangogirls/djenv
Apache設定ファイル
$ sudo vi /etc/apache2/sites-available/djangogirls.conf
ファイルの内容は以下の通り。
LoadModule wsgi_module "/home/djuser/dev/djangogirls/djenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/djuser/dev/djangogirls/djenv"
<VirtualHost *:80>
WSGIScriptAlias / /mnt/d/dev/djangogirls/mysite/wsgi.py process-group=mysite
WSGIDaemonProcess mysite python-home=/home/djuser/dev/djangogirls/djenv python-path=/mnt/d/dev/djangogirls/mysite
WSGIProcessGroup mysite
<Directory /mnt/d/dev/djangogirls/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static/ /mnt/d/dev/djangogirls/static/
<Directory /mnt/d/dev/djangogirls/static>
Require all granted
</Directory>
</VirtualHost>
この設定内容は、本家ドキュメント(↓)を参考に、デーモンモードで動くように設定してみました。


また、/static/
というディレクトリはDjangoの静的ファイルに関する記述ですが、こちらの記事が参考になりました。
https://torina.top/detail/287/
続いて作成した設定ファイルを有効にします。
#デフォルトのサイトを無効にして、djangogirlsを有効にする。
$sudo a2dissite 000-default
$sudo a2ensite djangogirls
そしてApacheを再起動
$sudo apachectl restart
ブラウザで確認。
以上です。
ところで、すでにWSL2が正式リリースされていますが、まだうちのWindows環境には更新が表示されておりません。
今回のアップデートもまだ不具合があるようなので、更新プログラムに表示されるまで待っておこうかなと思いながら、無理矢理手動で更新しようかなとか迷っています。手動アップデートのリンク↓
手動でアップデートする際は十分にリスクを確認して自己責任でお願いしますね。

