ホーム > カテゴリ > Python・人工知能・Django >

Djangoの本番環境を構築する [Ubuntu + Apache]

Ubuntu18.04のApacheでDjangoの本番環境を構築します。

今回はWSL2(Windows Subsystem for Linux)のUbuntuで行います。通常のUbuntuはもちろん同じでCentOSなどでも同様なやり方で可能です。

やること

サブディレクトリ(django)でDjangoプロジェクトを実行します。

http://www.example.com/django/

前提条件

・仮想環境(venv)を構築済み
※詳細はDjango開発環境の構築とインストールを参照
・仮想環境があるディレクトリ
/home/ユーザー名/django/3.2/.venv
・プロジェクトのパス
/mnt/d/django/project

※WSLだと「/mnt/d」は「D:¥」の事です。

1. 仮想環境にmod_wsgiをインストール

cd /home/ユーザー名/django/3.2/
source .venv/bin/activate

  pip install mod_wsgi
  
deactivate 

1-1. エラー1 RuntimeError: The 'apxs' command

pip install mod_wsgiで次のエラーが発生する場合は

RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages.

このコマンドを実行します。

sudo apt update
sudo apt install apache2-dev

1-2. エラー2 /usr/bin/ld: final link failed

更に次のようなエラーが出る場合はpyenvでインストールされたPythonの「共有オブジェクト」が有効でないのが原因です。

/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
error: command 'gcc' failed with exit status 1

次のようにPythonと仮想環境を再構築します。 ※Pythonバージョンは任意

// アンインストール
pyenv uninstall 3.6.13

ココで対象の仮想環境の削除

// 共有設定をONにしてインストール
env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.13

pyenv global 3.6.13
↑どちらか↓
pyenv local 3.6.13

// インストール済みPythonの一覧
pyenv versions

ココで対象の仮想環境の再作成

次のようなメッセージが表示されればOKです。

Installing collected packages: mod-wsgi
Running setup.py install for mod-wsgi ... done
Successfully installed mod-wsgi-4.7.1

2. Apacheとmod_wsgiの連携

2-1. mod_wsgiのパスを見つける

仮想環境を設置したディレクトリに移動してからfindコマンドを実行する

cd /home/ユーザー名/django/3.2/.venv
find -name 'mod_*.so'

(出力例)
./lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

これを組み合わせるとフルパスはこうなります。

/home/ユーザー名/django/3.2/.venv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

この「mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so」がmod_wsgiです。このフルパスをApacheの設定で使用します。

2-2. confファイルの編集(000-default.conf)

sudo vi /etc/apache2/sites-available/000-default.conf

[000-default.conf]

# VirtualHostは変更しません
<VirtualHost *:80>
・・・省略・・・
</VirtualHost>

# 以下に書き込む
LoadModule wsgi_module /home/ユーザー名/django/3.2/.venv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

WSGIPythonHome /home/ユーザー名/django/3.2/.venv
WSGIScriptAlias /django /mnt/d/django/project/project/wsgi.py
WSGIPythonPath /mnt/d/django/project:/home/ユーザー名/django/3.2/.venv/lib/python3.6/site-packages

<Directory /mnt/d/django/project/project>
  <Files wsgi.py>
    Require all granted
  </Files>
</Directory>

# CSS/JSファイルなどの共通ファイルを使用している場合
Alias /static/ /mnt/d/django/project/static/
<Directory /mnt/d/django/project/static>
  Require all granted
</Directory>

Apacheを再起動する。

sudo service apache2 restart

あとはブラウザでURLにアクセスするだけです。

2-3. 500 Internal Server Error

エラーが発生した場合はApacheのログをみれば原因がわかります。

sudo cat /var/log/apache2/error.log

以上となります。





関連記事



公開日:2021年03月06日 最終更新日:2021年03月07日
記事NO:02890