Развертывание Django в Hostgator VPS - PHP и Python на одном сервере - easyapache24 и mod-wsgi - PullRequest
0 голосов
/ 10 июля 2020
  • Я пытаюсь запустить django с использованием модуля mod_wsgi в easyapache4 на CentOS 7 VPS, предоставляемом Hostgator.

PHP и Django на одном сервере

То, что я пробовал до сих пор: создал venv и проект в /home/user/public_html/demo/django/ и добавил дополнительную конфигурацию виртуального хоста в конце существующей конфигурации виртуального хоста для www.ourdomain.com, загрузив внешний файл конфигурации. В файле конфигурации ошибок не было. Apache перезапущен успешно. PHP проекты работают нормально.

Это часть основного файла apache conf нашего основного домена www.ourdomain.com

<VirtualHost ipaddress:80>
    ServerName ourdomain.com
    ServerAlias www.ourdomain.com
    DocumentRoot /home/user/public_html
    ServerAdmin webmaster@ourdomain.com
    UseCanonicalName Off

    # configuration to load modules 

    # To customize this VirtualHost use an include file at the following location
    Include "/etc/apache2/conf.d/userdata/std/2_4/user/ourdomain.com/*.conf"
</VirtualHost>

Я добавил файл conf по адресу /etc/apache2/conf.d/userdata/std/2_4/user/ourdomain.com/ который включает

    Alias /demo/django/static /home/user/public_html/demo/django/static
    <Directory /home/user/public_html/demo/django/static>
        Require all granted
    </Directory>

    Alias /demo/django/media /home/user/public_html/demo/django/media
    <Directory /home/user/public_html/demo/django/media>
        Require all granted
    </Directory>

    <Directory /home/user/public_html/demo/django/testproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess testdjango python-path=/home/user/public_html/demo/django python-home=/home/user/public_html/demo/django/venv/lib/python3.6/site-packages
    WSGIProcessGroup testdjango
    WSGIScriptAlias /demo/django /home/user/public_html/demo/django/testproject/wsgi.py

Проверено, загружен ли mod_wsgi

# sudo /usr/sbin/httpd -M
[sudo] password for user:
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 ...
 suphp_module (shared)
 wsgi_module (shared)
 passenger_module (shared)
#

Когда я пытаюсь получить доступ к http://ourdomain.com/demo/django с этой конфигурацией Тайм-аут шлюза отображается ошибка .

# error_log
[Fri Jul 10 14:19:21.342208 2020] [wsgi:error] [pid 3083:tid 47072565069568] [client *.*.*.*:*] Timeout when reading response headers from daemon process 'django': /home/user/public_html/demo/django/testproject/wsgi.py

1 Ответ

0 голосов
/ 11 июля 2020

Я отправляю это на будущее для всех, кто столкнется с этим *

Позже, когда я проверил и обнаружил, что файлы stati c обслуживаются и только страницы не могут быть загружены. В старой конфигурации были проблемы в WSGIDaemonProcess. Значения python-home и python-path неверны. Дальнейшее чтение docs в разделе WSGIDaemonProcess Я изменил значения соответственно. После некоторого следа и ошибки я смог запустить приложение. Это еще не все. Необходимо поработать над перезагрузкой обновлений приложения.

Во время экспериментов с конфигурацией, Внутренняя ошибка сервера произошла, когда я изменил WSGIDaemonProcess testdjango python-path=/home/user/public_html/demo/django python-home=/home/user/public_html/demo/django/venv/lib/python3.6/site-packages на WSGIDaemonProcess testdjango python-path=/home/user/public_html/demo/django python-home=/home/user/public_html/demo/django/venv.

с docs in WSGIDaemonProcess section

python -home = directory Задайте расположение виртуальной среды Python, которая будет использоваться процессами демона. Используемый каталог - это тот, который sys.prefix установлен для виртуальной среды Python. Виртуальная среда может быть создана с помощью virtualenv, pyvenv или python -m venv. Обратите внимание, что виртуальная среда Python должна быть создана с использованием той же базовой версии Python, которая использовалась для компиляции модуля mod_wsgi. Вы не можете использовать это, чтобы заставить mod_wsgi каким-то образом использовать другую версию Python, чем она была скомпилирована. Если вы хотите использовать другую версию Python, вам нужно будет переустановить mod_wsgi, скомпилировав его для нужной вам версии. Один экземпляр mod_wsgi не может одновременно запускать приложения для Python 2 и 3.

python -path = directory | python -path = directory: directory Список разделенных двоеточиями каталогов для добавления к пути поиска модуля Python, ie., sys.path. Обратите внимание, что это не совсем то же самое, что установка переменной среды PYTHONPATH при запуске обычной командной строки Python. Когда используется эта опция, каталоги добавляются путем вызова site.addsitedir(). Помимо добавления каталога в sys.path, эта функция открывает и интерпретирует любые файлы .pth, расположенные в указанных каталогах. Если вы используете виртуальную среду Python, вместо того, чтобы использовать эту опцию для ссылки на каталог site-packages виртуальной среды Python, вы должны использовать опцию python-home, чтобы указать root виртуального Python. вместо этого окружающая среда. Во всех случаях, если каталог содержит Python пакеты, которые имеют C компонентов расширения, эти пакеты должны быть установлены с использованием той же базовой версии Python, которая использовалась для компиляции модуля mod_wsgi. Не следует смешивать пакеты из разных версий или установок Python.

Среда:

  • Apache / 2.4.43
  • mod_wsgi / 4.7.1
  • Python / 3.6
  • Django / 3.0.8

Текущая конфигурация, на которой работает приложение Django

    WSGIDaemonProcess ourdomain.com python-home=/home/user/public_html/demo/django/venv python-path=/home/user/public_html/demo/django/
    WSGIProcessGroup ourdomain.com

    Alias /demo/django/media /home/user/public_html/demo/django/media
    <Directory /home/user/public_html/demo/django/media>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </Directory>

    Alias /demo/django/static /home/user/public_html/demo/django/static
    <Directory /home/user/public_html/demo/django/static>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </Directory>

    <Directory /home/user/public_html/demo/django/testproject>
        <Files wsgi.py>
            <IfVersion < 2.4>
                Order allow,deny
                Allow from all
            </IfVersion>
            <IfVersion >= 2.4>
                Require all granted
            </IfVersion>
        </Files>
    </Directory>


    WSGIScriptAlias /demo/django /home/user/public_html/demo/django/testproject/wsgi.py

    <Directory /home/user/public_html/demo/django>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </Directory>
...