LoginSignup
1
0

More than 3 years have passed since last update.

MacでDjangoとapache(httpd)を連携するぞ!!

Last updated at Posted at 2020-05-04

環境

  • Mac (Catarina)
  • pyenv使用(今回はPython 3.6.2を使っています)
  • anaconda3(mkdirで作成)の中にプロジェクトのmySiteとアプリのmyappを作成済みです

しまりす 太郎さんの
Macでdjangoとapacheを連携させたい人生だった
を参考にさせていただきました!

ただ解決できなかった所があるので、同じような境遇にいる人の助けになればと思い投稿しています!

初投稿ですが、分かりやすく伝えられるよう努めます。笑

今回のあらすじ

  • Python設定

  • mod_wsgi周りのインストール

  • apache設定

Python設定

今回自分が使ったPythonのバージョンは3.6.2です。

ここはどのバージョンでも良いと思います。

ただ、

CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.2

のようにoptionをつけてインストールしたものである必要があります。

とゆうのも、

/Users/username/.pyenv/versions/3.6.2/lib/libpython3.6m.dylib

というファイルが無ければ、後々出てくるmod_wsgi.soがpythonを参照することができずエラーを吐かれてしまうからです。

ここがクリアできておらずDjangoのプロジェクトを作っている人は、上記の方法でPythonをインストールし、もう一度プロジェクトを作成してください。。

mod_wsgi周りのインストール

pip install mod-wsgi-httpd

pip install mod_wsgi

でmod_wsgi周りのインストールをしてください!

こやつがapacheとDjangoを繋ぐ役割を担っています。

apache設定

Macにはデフォルトでapacheが入っていますが、それを使うとダメっぽいので最新版をインストールします。

Apache httpd を macOS に Homebrew でインストールする手順

がとても分かりやすかったです!

次に、

/usr/local/etc/httpd/httpd.conf

にコードを追加していきます。ここが最も重要です!

しまりす 太郎さんも仰られていますが、

【Django入門】apacheを使ってサーバーを動かそう

でのhttpd.confに以下のような追記をすれば良いとゆうのは間違いです。

LoadModule /Users/username/.pyenv/versions/anaconda3-4.3.0/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-darwin.so
WSGIScriptAlias / /Users/username/anaconda3/mySite/mySite/wsgi.py
WSGIPythonPath /Users/username/anaconda3/mySite
WSGIPythonPath /Users/username/.pyenv/versions/anaconda3-4.3.0/lib/python3.6/site-packages
<Directory /Users/username/anaconda3/mySite/mySite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

私がここで引っ掛かった所が3つあります。

1つ目は、1行目の引数が足りない事件です。正しくは、

LoadModule wsgi_module /Users/username/.pyenv/versions/3.6.2/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-darwin.so

のようにwsgi_moduleという引数がなければいけません。

2つ目は、5行目いらない事件です。以下のようにコメントアウトするか、消しましょう。

#WSGIPythonPath /Users/username/.pyenv/versions/3.6.2/lib/python3.6/site-packages

ここはしまりす 太郎さんの方では指摘されていなかった部分です!

自分の環境下だけ必要だったのかなー。

ちなみに、ここをコメントアウトしていないとlocalhostアクセス時に

500 Internal Server Error

とゆうエラーが吐かれました。

3つ目は、9,10行目が古い事件です。以下のように修正しましょう!

<Directory /Users/username/anaconda3/mySite/mySite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

ここもしまりす 太郎さんの方では指摘されていなかった部分です!仕様が変わってますね〜

ちなみに、修正せずにいるとlocalhostアクセス時に

403 Forbidden

とゆうエラーが吐かれました。

ここは特定のIPアドレスからのアクセスだけを許可したりできるので、適宜調整してください!

ここでやっと、

sudo brew services restart httpd

を叩くと無事Djangoのチュートリアルページが表示されるはずです!

restartになっているのは修正したhttpd.confを読み込み、反映するためですね。

終わりに

ここまで読んでいただきありがとうございました!
この記事では取り上げていませんが、プロジェクトのsettings.pyのALLOWED_HOSTSを設定していないなどでアクセスできないという問題だったり、他にも色々躓いたりしました。やはり大変ですね〜
ですが自分なりに試行錯誤して解決できたときはやはり最高です。笑
もし不備があれば、ご指摘のほどよろしくお願いします!

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0