Список версий:
Centos 7 --- django 2.1.7 --- Apache 2.4.6 --- Python 3.6
Проверьте РЕДАКТИРОВАТЬ 5 для самого последнего журнала ошибок
следовал этому руководству здесь: https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-centos-7
Я могу запустить sudo systemctl start httpd
, и когда я захожу на URL, я получаю Внутреннюю ошибку сервера (журналы внизу)
Моя файловая структура
home
└── user
└── projects
└── myapp
├── app
│ ├── <All Code for Webapp including static dir>
├── env (virtualenv)
├── manage.py
├── new
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── requirements.txt
И я надеюсь, что кто-то увидит ошибку в моем django.conf, расположенном ниже в моей папке httpd. И надеюсь, что это конечные точки, которые я ищу
РЕДАКТИРОВАТЬ: Этот файл находится здесь: /etc/httpd/conf.d/django.conf
django.conf
Alias /static /home/user/projects/myapp/app/static
<Directory /home/user/projects/myapp/app/static>
Require all granted
</Directory>
<Directory /home/user/projects/myapp/new>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIApplicationGroup %{GLOBAL}
WSGIDaemonProcess myapp python-path=/home/user/projects/myapp python-home=/home/user/projects/myapp/env
WSGIProcessGroup myapp
WSGIScriptAlias / /home/user/projects/myapp/new/wsgi.py
Я не уверен, что они указывают на все правильные места, и надеялся, что кто-то может дать мне второй взгляд.
И я не коснулся wsgi.py, и мне было интересно, не упускаю ли я там логику.
my wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'new.settings')
application = get_wsgi_application()
EDIT2: Я могу запустить сервер, но получаю 500 внутренних ошибок сервера, и когда я проверяю error_logs, я получаю это
Обновленные журналы
[Mon Mar 11 10:40:39.865611 2019] [core:notice] [pid 9371] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Mon Mar 11 10:40:39.868149 2019] [suexec:notice] [pid 9371] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Mar 11 10:40:39.918015 2019] [auth_digest:notice] [pid 9371] AH01757: generating secret for digest authentication ...
[Mon Mar 11 10:40:39.919681 2019] [lbmethod_heartbeat:notice] [pid 9371] AH02282: No slotmem from mod_heartmonitor
[Mon Mar 11 10:40:39.948303 2019] [mpm_prefork:notice] [pid 9371] AH00163: Apache/2.4.6 (CentOS) mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations
[Mon Mar 11 10:40:39.948370 2019] [core:notice] [pid 9371] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Mar 11 10:40:42.878806 2019] [mime_magic:error] [pid 9376] [client ip] AH01512: mod_mime_magic: can't read `/home/user/projects/myapp/new/wsgi.py'
[Mon Mar 11 10:40:42.879459 2019] [mime_magic:error] [pid 9376] [client ip] AH01512: mod_mime_magic: can't read `/home/user/projects/myapp/new/wsgi.py'
[Mon Mar 11 10:40:42.905048 2019] [:error] [pid 9372] (13)Permission denied: [remote ip] mod_wsgi (pid=9372, process='myapp', application='<url>|'): Call to fopen() failed for '/home/user/projects/myapp/new/wsgi.py'
EDIT3
В этом лог-файле написано Apache/2.4.6 (CentOS) mod_wsgi/3.4 Python/2.7.5 configured
, когда я запускаю python3.6, а не 2.7.5. Может быть, изменение поможет?
РЕДАКТИРОВАТЬ 4
Итак, я изменил свой WSGIDaemonProcess на
WSGIDaemonProcess myapp python-path=/home/user/projects/myapp python-home=/home/user/projects/app/env/lib/python3.6/site-packages user=<user>
Теперь я получаю эти ошибки
[Tue Mar 12 10:38:09.111397 2019] [mime_magic:error] [pid 18804] [client ip] AH01512: mod_mime_magic: can't read `/home/user/project/myapp/new/wsgi.py'
ImportError: No module named site
ImportError: No module named site
ImportError: No module named site
, похоже, мне нужно удалить mod_wsgi и переустановить для компиляции с python3.6, а не с 2.7
Как мне это сделать? я удаляю mod_wsgi и пытаюсь установить mreinstall с помощью sudo pip3.6 install mod_wsgi
Теперь он не распознает новую установку mod_wsgi и не запускает сервер из-за invalid command 'WSGIDaemonProcess'
это bc, новая загрузка не настроена с httpd? как бы я это сделал?
РЕДАКТИРОВАТЬ 5
Успешно установленный mod_wsgi, скомпилированный с правильной версией Python и способный запускать сервер, установите SELinux на разрешение, чтобы избавиться от cant find '/route/to/wsgi/py
. и теперь я не получаю ошибок кодирования имени модуля, которые повторяются.
[Wed Mar 13 15:20:46.133597 2019] [core:notice] [pid 4403] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
[Tue Mar 12 14:11:57.520271 2019] [core:notice] [pid 866] AH00052: child pid 891 exit signal Aborted (6)
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
в настоящее время все мои разрешения находятся под пользователем apache и группой apache, и, кажется, у них все права доступа, и я попытался изменить корневого пользователя / группы на apache, и запустил chmod -R 777
в каталоге Myapp, чтобы сделать уверен, что у него были соответствующие разрешения.
Разрешения по проектам:
home/user/projects# ls -l
total 0
drwxrw-r-x. 7 apache apache 109 Mar 12 12:48 myapp
home/user/projects/myapp# ls -l
Разрешения под myapp:
total 12
drwxrwxr-x. 7 apache apache 4096 Mar 7 13:18 app
drwxr-xr-x. 5 apache apache 56 Mar 12 12:48 env
-rwxrwxr-x. 1 apache apache 535 Mar 5 13:33 manage.py
drwxrwxr-x. 3 apache apache 110 Mar 7 14:27 new
-rw-rw-r--. 1 apache apache 869 Mar 7 14:42 requirements.txt