Развертывание приложения Django с Apache в Ubuntu 16.04

Я бился головой о приложение, которое должно быть развернуто на сервере Apache с использованием Ubuntu 16.04. Я подумал, что, возможно, это проблема неправильной конфигурации на моем сайте, поэтому просто развернул тестовое приложение test_app и следовал очень простым инструкциям на документация Django и вот что я вставил в свой /etc/apache2/sites-available/000-default.conf:

WSGIScriptAlias / /var/www/html/python/test_app/test_app/wsgi.py

#WSGIPythonHome /var/www/html/python/test_app/venv
#WSGIPythonPath /var/www/html/python/test_app

Alias /static/ /var/www/html/python/test_app/static/

<Directory /var/www/html/python/test_app/static>
Order allow,deny
Allow from all
Require all granted
</Directory>


<Directory /var/www/html/python/test_app/test_app>
<Files wsgi.py>
Order allow,deny
Allow from all
Require all granted
</Files>
</Directory>

И я ничего не вижу на localhost. Правильно ли я делаю конфигурации?

Вот ошибки, сгенерированные в журнале:

[Mon Mar 20 14:19:16.518151 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998] mod_wsgi (pid=12272): Target WSGI script '/var/www/html/python/test_app/test_app/wsgi.py' cannot be loaded as Python module.
[Mon Mar 20 14:19:16.518215 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998] mod_wsgi (pid=12272): Exception occurred processing WSGI script '/var/www/html/python/test_app/test_app/wsgi.py'.
[Mon Mar 20 14:19:16.518241 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998] Traceback (most recent call last):
[Mon Mar 20 14:19:16.518278 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]   File "/var/www/html/python/test_app/test_app/wsgi.py", line 17, in <module>
[Mon Mar 20 14:19:16.518351 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]     application = get_wsgi_application()
[Mon Mar 20 14:19:16.518366 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]   File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Mon Mar 20 14:19:16.518406 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]     django.setup(set_prefix=False)
[Mon Mar 20 14:19:16.518421 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]   File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 22, in setup
[Mon Mar 20 14:19:16.518462 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
[Mon Mar 20 14:19:16.518476 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 53, in __getattr__
[Mon Mar 20 14:19:16.518571 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]     self._setup(name)
[Mon Mar 20 14:19:16.518586 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 41, in _setup
[Mon Mar 20 14:19:16.518605 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]     self._wrapped = Settings(settings_module)
[Mon Mar 20 14:19:16.518618 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 97, in __init__
[Mon Mar 20 14:19:16.518634 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]     mod = importlib.import_module(self.SETTINGS_MODULE)
[Mon Mar 20 14:19:16.518648 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]   File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
[Mon Mar 20 14:19:16.518694 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998]     __import__(name)
[Mon Mar 20 14:19:16.518719 2017] [wsgi:error] [pid 12272:tid 140248747980544] [client 127.0.0.1:50998] ImportError: No module named test_app.settings

person Faizan Ali    schedule 20.03.2017    source источник
comment
Вы пробовали использовать WSGI-приложение hello world, а не Django? modwsgi.readthedocs.io/en/develop/user- гиды /   -  person Graham Dumpleton    schedule 20.03.2017
comment
@GrahamDumpleton похоже, что я должен сначала попробовать это.   -  person Faizan Ali    schedule 20.03.2017
comment
@FaizanAli Над Require all granted добавьте эту строку - Order deny,allow. Посмотрите, работает ли это.   -  person xyres    schedule 20.03.2017
comment
Я думаю, что Unbuntu 16.04 должен быть Apache 2.4, а это значит, что Require all granted должно быть в порядке. Более старые способы работы Apache 2.2 не будут работать с Apache 2.4, если не включен модуль совместимости доступа.   -  person Graham Dumpleton    schedule 20.03.2017
comment
Хорошо, я следил за базовым приветственным миром, предложенным @GrahamDumpleton, который отлично работает. Но при попытке использовать Django это не работает. Я вставляю свой журнал ошибок apache в редактирование вопроса.   -  person Faizan Ali    schedule 20.03.2017


Ответы (2)


Итак, наконец .. Разобрался! Спасибо за помощь ребята.

Как говорится в моей первой строке журнала ошибок:

'/var/www/html/python/test_app/test_app/wsgi.py' cannot be loaded as Python module.

это означает, что wsgi.py был недоступен для модуля Apache. Я искал его здесь и получил решение.

Итак, в моем wsgi.py я добавил следующее:

import os, sys
from django.core.wsgi import get_wsgi_application
sys.path.append('/var/www/html/python/test_app')

и это сработало.

person Faizan Ali    schedule 20.03.2017
comment
Рекомендую вам прочитать modwsgi.readthedocs.io/en/develop/ user-guides / Используйте режим демона и настройте виртуальную среду Python, используя python-home и местоположение вашего проекта, используя python-path. - person Graham Dumpleton; 20.03.2017

<VirtualHost *:80>
  ServerName programmerlab.com # this ll be your domain name
  WSGIDaemonProcess programmerlab.com python-path=/var/www/html/gautam.tech:/var/www/html/programmerlab.com/env/lib/python3.6/site-packages
  WSGIProcessGroup programmerlab.com

  #Your static files location
        Alias /static /var/www/html/programmerlab.com/portfolio/static
        <Directory /var/www/html/programmerlab.com/portfolio/static>
            Require all granted
        </Directory>

    <LocationMatch "\.(jpg|gif|png|js|css)$">
        SetHandler None
    </LocationMatch>

 WSGIScriptAlias / /var/www/html/programmerlab.com/myproject/wsgi.py
 DocumentRoot /var/www/html/programmerlab.com
    <Directory /var/www/html/programmerlab.com/myproject>
        <Files wsgi.py>
        Require all granted
        </Files>
    </Directory>
</VirtualHost>

чтобы узнать о пути Python, просто введите

какой питон

на терминале.

Эта настройка vhost полностью протестирована, и она наверняка сработает.

person Kundan roy    schedule 08.07.2019