WSLのApache+mod_wsgiでDjangoのプロジェクトをデプロイする

Sponsored Link
ロリポップ!レンタルサーバー

はじめに

端的にいいますと、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で指定されたバージョン)

 

Sponsored Link

環境構築

全て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 のインストール方法 | Django ドキュメント | Django
Django のインストール方法 | Django ドキュメント | Django docs.djangoproject.com
Django のインストール方法 | Django ドキュメント | Django

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
  • 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>

この設定内容は、本家ドキュメント(↓)を参考に、デーモンモードで動くように設定してみました。

Django を Apache と mod_wsgi とともに使うには? | Django ドキュメント | Django
Django を Apache と mod_wsgi とともに使うには? | Django ドキュメント | Django docs.djangoproject.com
Django を Apache と mod_wsgi とともに使うには? | Django ドキュメント | Django

また、/static/というディレクトリはDjangoの静的ファイルに関する記述ですが、こちらの記事が参考になりました。

https://torina.top/detail/287/

続いて作成した設定ファイルを有効にします。

#デフォルトのサイトを無効にして、djangogirlsを有効にする。
$sudo a2dissite 000-default
$sudo a2ensite djangogirls

そしてApacheを再起動

$sudo apachectl restart

ブラウザで確認。

以上です。

 

ところで、すでにWSL2が正式リリースされていますが、まだうちのWindows環境には更新が表示されておりません。

今回のアップデートもまだ不具合があるようなので、更新プログラムに表示されるまで待っておこうかなと思いながら、無理矢理手動で更新しようかなとか迷っています。手動アップデートのリンク↓

手動でアップデートする際は十分にリスクを確認して自己責任でお願いしますね。

Windows 10 のダウンロード
Windows 10 のダウンロード www.microsoft.com
Windows 10 のダウンロード

 

 

Sponsored Link