web-dev-qa-db-ja.com

Django 2.1 CentOS 7でのApache、mod_wsgi、python3 venvの配備

ガイドがpython2でmod_wsgiを参照するか、予想されるパスが異なるdebベースのシステムでのデプロイメントのいずれかを参照しているため、私はこの一見最も関連するデプロイメントオプションに遭遇しました。
従って私はこれらのステップに従っています:

#repos for python3.6, wsgi for python3.6
yum install epel-release centos-release-scl

#base packages
yum install python36 python36-devel httpd httpd-devel rh-python36-mod_wsgi

#python3.6 venv
cd /var/www; 
python36 -m venv Django-venv
source Django-venv/bin/activate
pip3 install Django

#Apache config to support wsgi
edit /etc/httpd/conf/httpd.conf to include
LoadModule wsgi_module modules/mod_wsgi.so

提供するApache構成Django/var/www/mysiteにあるコンテンツ

<VirtualHost *:80>
 ServerAdmin [email protected]
 ServerName mysite.com
 ServerAlias www.mysite.com

 WSGIDaemonProcess mysite python-home=/var/www/Django-venv/ python-path=/var/www/Django-venv/lib/python3.6/site-packages
 WSGIProcessGroup mysite
 WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py

 Alias /static /var/www/mysite/static
 <Directory /var/www/mysite/mysite/static>
  Require all granted
 </Directory>

 <Directory /var/www/mysite/mysite>
  <Files wsgi.py>
  Require all granted
  </Files>
 </Directory>

</VirtualHost>

SELの変更:
chown Apache:apache -R /var/www/mysite chown Apache:apache -R /var/www/Django-venv

httpdは正常に起動しますが、エラーログに次のメッセージが表示され続けます。

Current thread 0x00007f5b5a486880 (most recent call first):
[Fri Nov 23 14:29:02.019635 2018] [core:notice] [pid 4837] AH00052: child pid 5159 exit signal Aborted (6)
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

このセットアップのこれまでのステップで何が欠けているのか確認していただけますか?

その他の情報:
ll /etc/httpd/modules/*wsgi* -rwxr-xr-x. 1 root root 966K Nov 23 09:13 /etc/httpd/modules/mod_wsgi.so

systemctl status -l httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2018-11-23 14:26:16 EET; 13min ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 4837 (httpd)
Status: "Total requests: 3; Current requests/sec: 0; Current traffic:   0 B/sec"
CGroup: /system.slice/httpd.service
├─4837 /usr/sbin/httpd -DFOREGROUND
├─4839 /usr/sbin/httpd -DFOREGROUND
├─4840 /usr/sbin/httpd -DFOREGROUND
├─4841 /usr/sbin/httpd -DFOREGROUND
├─4842 /usr/sbin/httpd -DFOREGROUND
├─4843 /usr/sbin/httpd -DFOREGROUND
└─4850 /usr/sbin/httpd -DFOREGROUND
Nov 23 14:26:16 www1 systemd[1]: Starting The Apache HTTP Server...
Nov 23 14:26:16 www1 httpd[4837]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a7a7:b61c:5ffc:b91a. Set the 'ServerName' directive globally to suppress this message
Nov 23 14:26:16 www1 systemd[1]: Started The Apache HTTP Server.
1
J D

私はすべてを働かせました。完全な手順は次のとおりです。
yum install epel-release centos-release-scl
yum install python36 python36-devel httpd httpd-devel rh-python36-mod_wsgi

rh-python36-mod_wsgiがすべてを正しいディレクトリに配置しているかどうかを確認します-rpm -ql rh-python36-mod_wsgi
で見つかった場合
/opt/rh/httpd24/root/etc/httpd/conf.modules.d/10-rh-python36-wsgi.conf
/opt/rh/httpd24/root/usr/lib64/httpd/modules/mod_rh-python36-wsgi.so
移動する
/etc/httpd/conf.modules.d/10-rh-python36-wsgi.conf
/etc/httpd/modules/mod_rh-python36-wsgi.so

python3 venvを作成します。作成するのではなく、どこかから移動する場合は、SELをチェックして、Apacheがそれを使用できることを確認してください
cd /var/www python36 -m venv Django-venv source /var/www/Django-venv/activate

/etc/httpd/conf.d/Django.confで仮想ホストを設定します

<VirtualHost *:80>

ServerName mysite.com
ServerAlias www.mysite.com


WSGIDaemonProcess mysite python-home=/var/www/Django-venv python-path=/var/www/mysite
WSGIProcessGroup mysite
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py

Alias /static /var/www/mysite/static
<Directory /var/www/mysite/static>
    Require all granted
</Directory>

<Directory /var/www/mysite/mysite>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

</VirtualHost>

プロジェクトが/ var/wwwに移動された場合、正しいSELラベルを復元します-restorecon -Rv /var/www

プロジェクトディレクトリをApacheが所有するようにする-chown -R Apache:apache /var/www/mysite

SQLiteを使用する場合は、SELにApacheへのアクセスを許可する(改善が必要)-semanage boolean -p http_unified on

5
J D