ホーム > カテゴリ > 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


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律