環境
さくらVPS
CentOS7
Django 2.2.7
Python 3.7.5
mod-wsgi 4.7.0
Apache 2.4.6
前提・実現したいこと
djangoで作成したwebアプリを公開したいのですが、mod_wsgiとDjangoの連携が下記エラーによりうまくいきません。
かれこれ1週間くらい同じ問題に悩んでいます。もし知見のある方がいらっしゃれば御助力いただければ幸いです。
発生している問題・エラーメッセージ
Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings'
###現状まで行った内容
前略 公開鍵の設定・ユーザー名作成など
####1,pyenvを使ったpythonのインストール
参考サイト
CentOS7にPyenvとPython3系をインストール
####2,virtualenvで仮想環境作成
python3 -m venv env
envパス
/home/ユーザー名/env
####3,必要なライブラリDjango等をpip3でインストール
pip3 install Django==2.2.7
####4,pip3を利用したmod_wsgiのインストール
参考サイト
PythonのDjangoを動かすために「mod-wsgi」をインストールしたいのですができません...
####5,githubから作成したwebアプリをclone
djangoプロジェクトパス
/home/ユーザー名/hoge1/hoge2/myProject
wsgi.pyパス
/home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py
####6,django.confの作成(django.confはAppachのhttpd.confにincludeされます)
参考
centos7へapache2.4とmod_wsgiインストールし、djangoデプロイまで
django.confパス
etc/httpd/conf.d/django.conf
LoadModule wsgi_module modules/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so WSGIScriptAlias / /home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py WSGIPythonHome /home/ユーザー名/env WSGIPythonPath /home/ユーザー名/hoge1/hoge2/myProject <Directory /home/ユーザー名/hoge1/hoge2/myProject> <Files wsgi.py> Require all granted </Files> </Directory>
####7,再起動
systemctl restart httpd
ここでエラーは発生せず
####8,エラー確認
tail -f /var/log/httpd/error_log
試したこと
####エラーの発生原因がWSGIPythonHomeが間違ってるという情報があったためWSGIPythonHomeの理解を深める、WSGIPythonHomeのパスを変更
参考サイト
djangoチュートリアル学習中 Apache(mod_wsgi)動かず
How to use Django with Apache and mod_wsgi¶
参考サイト等を読んでみての私のWSGIPythonHomeの見解
WSGIPythonHomeはpythonの依存関係がvirtualenv内にある場合、virtualenvのルートパスをWSGIPythonHome に追加しなければいけない
$which python3
/home/ユーザー名/env/bin/python3
$mod_wsgi-express module-config
LoadModule wsgi_module "/home/ユーザー名/env/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so" WSGIPythonHome "/home/ユーザー名/env"
正しいように思えます・・
####WSGIPythonPathの変更
Djangoのプロジェクトのパスを指定するという情報もあれば,Pythonの場所にするという情報もあったりなので、下記などpythonの場所を指定してみたりしました。
WSGIPythonPath /home/ユーザー名/env/lib/python3.7/site-packages
####WSGIDaemonProcessを用いたdjango.confを作成
参考サイト
WSGIDaemonProcess
django.confを下記に書き換え
NameVirtualHost *:80 LoadModule wsgi_module modules/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so WSGISocketPrefix run/wsgi <VirtualHost *:80> ServerName domain.com WSGIDaemonProcess domain.com python-home=/home/ユーザー名/env python-path=/home/ユーザー名/hoge1/hoge2/myProject WSGIProcessGroup domain.com WSGIScriptAlias / /home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py <Directory /home/ユーザー名/hoge1/hoge2/myProject> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>
どれもだめでした。
怪しい点
エラーとの因果関係はわからないですが、原因の可能性あり
####そもそもpython3 manage.py runserver で接続できない(ローカルで繋がらない)
migrateは成功しています。
python3 manage.py runserver 0.0.0.0:8000
を実行時にはエラーは発生していませんが、表示されるURLをブラウザで開くと"このサイトにアクセスできません 接続が拒否されました"というメッセージが表示されます。
他の情報も思い出せば追記いたします。
1週間以上解決できず、大変困っています。
これは感覚の話で恐縮ですが、根本的に間違ってるかケアレスミスな気がします。
どうか心当たりのある方がいらっしゃれば御助力お願いいたします。
あなたの回答
tips
プレビュー