環境
本体:rasberry pi4
OS :Ubuntu Server 20.04
python 3.7.5
django 3.0.8
前提・実現したいこと
apache2と仮想環境内のpythonにあるdjangoをつなげてhttps通信をできるようにしたいです。
発生している問題・エラーメッセージ
概要は下に記載しますが、少し長くなるので、簡潔にまとめると、
pip install mod-wsgiを利用したdjangoとの連携を行いたいです。
[エラー内容(apache2起動時の「journalctl -xe」の結果)]
pam_unix(polkit-1:auth): authentication failure; logname= uid=1001 euid=0 tty= ruser=kosei_iino rhost= user=kosei_iino
下記でもお話していますが、「Sudo apt-get install libapache2-mod-wsgi-py3」を利用した、構築はできているので、そのパスなどをそのままpip上にあるmod-wsgiの書き方に変更しただけですが、エラーが起こってしまいます。
何が原因なのかまた、修正方法をご存じでしたらご教授いただけないでしょうか
よろしくお願いします。
該当のソースコード
下記は、httpsの通信を行うためにapache2でデフォルトで入っている「default-ssl.conf」を直接変更したものです。
これを実行することで上記で載せたエラーがapache2の起動時に出てきてしまいます。
ちなみに「WSGIPythonHome」と「WSGIPythonPath」をコメント化して、
「WSGIDaemonProcess www python-home=/home/kosei_iino/www/env python-path=/home/kosei_iino/www:/home/kosei_iino/www/env/lib/python3.7/site-packages」と入れることで、
「libapache2-mod-wsgi-py3」上ではうまく動作します。
その場合、読み込まれているwsgiのモジュールは「/etc/apache2/mods-enabled/wsgi.load」に書いているモジュールです。
[/etc/apache2/sites-available/default-ssl.conf]
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog /home/kosei_iino/www/logs/error.log
CustomLog /home/kosei_iino/www/logs/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch ".(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</IfModule>LoadModule wsgi_module /home/kosei_iino/www/env/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-aarch64-linux-gnu.so WSGIPythonHome /home/kosei_iino/www/env WSGIPythonPath /home/kosei_iino/www:/home/kosei_iino/www/env/lib/python3.7/site-packages WSGIProcessGroup www WSGIScriptAlias / /home/kosei_iino/www/ai_project/ai_project/wsgi.py <Directory /home/kosei_iino/www/ai_project/ai_project> <Files wsgi.py> Require all granted </Files> </Directory> Alias /static /home/kosei_iino/www/ai_project/static/ <Directory /home/kosei_iino/www/ai_project/static> Require all granted </Directory> </VirtualHost>
概要
沢山のサイトからpipにより、mod-wsgiを導入するべきだという記事をよく見かけていましたが、1週間ほど設定などを組み替えてみても全くうまくいかず、apache2の再起動の時点で落ちてしまっていたので、今まで以下のコマンドでapt-get内にあるwsgiを利用して、通信をしていました。
Sudo apt-get install libapache2-mod-wsgi-py3
多分ですが、これによる問題で、pip install したパッケージが通常のコマンドライン実行ではimport可能なのですが、djangoで構築したものを起動しようとするとdjangoのエラー画面で「ModuleNotFoundError: No module named 'numpy.random.mtrand'」などと出るようになりました。
下記のコマンドライン上の実行ではうまくいく
python3
import numpy
このエラーは各パッケージの__init__.py上で起こっており、.soファイルの読み込みエラーであることがわかりました。
そのため、試行錯誤した結果、パッケージのインストールしたデフォルトの状態「mtrand.cpython-37m-aarch64-linux-gnu.so」というパッケージ内に入っているファイルとを「mtrand.so」とリネームすることでうまく読み込めるようになることが分かりました。
推測ではありますが、上で記載したapt-getのパッケージを利用すると、もともとOSに入っているpython(3.8.2)を使ってしまい、仮想環境でダウングレードしたpythonを利用するためにpyenvで入れたpython3.7.5の固有のパッケージ名(cpython-37mなど)に対応できていないものだと思っています。
その為、「libapache2-mod-wsgi-py3」ではなく、仮想環境内でpip install mod-wsgiを使ってapache2と連携できるようにしたいのです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー