Как развернуть несколько приложений django на apache в Windows?

Я хочу развернуть несколько приложений django на apache в Windows, но знаю, как развернуть только одно.

Переопределяя localhost сервера Wamp, я могу развернуть приложение без проблем, но мне нужно развернуть больше и я не знаю как. Я видел виртуальные хосты и думаю, что это хорошо, но не знаю, как их настроить. Кто-нибудь знает, как я могу это сделать? Заранее спасибо.

Хостинг нескольких приложений django с Apache возможен с использованием виртуальных хостов (vhosts)

важно заботиться:

  1. при настройке Apache я рекомендую запускать apache из командной строки как "httpd.exe", так как в XAMPP или WAMP вы не увидите некоторых сообщений об ошибках при первоначальном запуске в файлах error.log.

    .
  2. вы можете использовать только 1 версию python даже в разных virt.env для каждого vhost, так как модуль apache mod_wsgi compilation должен соответствовать ему и загружается один раз при запуске apache

    .

примерно следующее в файле httpd.conf (он уже должен быть у вас на месте, поскольку вы используете конфигурацию одного приложения):

LoadFile "c:/.../python/python38/python38.dll"
LoadModule wsgi_module "c:/..../mod_wsgi.cp38-win_amd64.pyd"
  1. как установить путь к virt.env и папкам приложений:

    при 1 хосте вы укажете путь к virt.env, установив WSGIPythonHome и WSGIPythonPath на папки приложений в httpd.conf:

    .
WSGIPythonHome "d:/..../django_project/env_folder"
WSGIPythonPath "d:/..../django_project/app_name" 

но: вы не можете поместить WSGIPythonHome/WSGIPythonPath внутри объявления VirtualHost в httpd-vhosts.conf .... это вызовет сообщение об ошибке

Решение: установить пути в wsgi.py динамически и удалить WSGIPythonHome/WSGIPythonPath из apache *.conf:

wsgi.py:
# replacement for WSGIPythonHome "d:/..../django_project/env_folder"
# choose one:
sys.path.append('d:/.../env_folder/lib/site-packages')              # add individual virt.environment packages at the end of sys.path;  global env packages have prio
sys.path.insert(0,'d:/.../env_folder/lib/site-packages')            # add individual virt.environment packages at the beginning of sys.path;  indiv. virt.env packages have prio over global env
    
# replacement   WSGIPythonPath "d:/..../django_project/app_name"    
sys.path.append('d:/.../django_project/app_name')                   # add indiv. app folder to search path      
    
  1. вот пример для apache conf:

(почему фиктивный хост: есть (странное или баговое) поведение apache ... если ни одно из имен виртуальных хостов не соответствует запросу, то автоматически apache отправит запрос на первый vhost в конфиге - независимо от того, какое имя сервера определено. Это может привести к путанице, потому что будет вызвано совершенно неправильное приложение, и сообщения об ошибке наверняка появятся изнутри django, не указывая на то, что ошибка находится на уровне конфига Apache. Фиктивный хост с простым index.html и сообщением об ошибке может сделать это прозрачным)

httpd-vhost.conf:

<VirtualHost *:80>
     ServerName Dumme_Host
     DocumentRoot "d:/WEBSPACES/Dummy_Host"

     <Directory d:/WEBSPACES/Dummy_Host>
         Require all granted
     </Directory>
</VirtualHost>


<VirtualHost *:80>

     ServerName  xxxx1
     WSGIScriptAlias / "d:/.... /wsgi.py" application-group=app_name1
     Alias /media/ d:/.../media/
     Alias /static/ d:/.../static/

     <Directory d:/.../app_name1>
         Require all granted
     </Directory>


     <Directory d:/.../media>
         Require all granted
     </Directory>

     <Directory d:/.../static>
         Require all granted
     </Directory>

</VirtualHost>


<VirtualHost *:80>

     ServerName  xxxx2
     WSGIScriptAlias / "d:/.... /wsgi.py" application-group=app_name2
     Alias /media/ d:/.../media/
     Alias /static/ d:/.../static/

     <Directory d:/.../app_name2>
         Require all granted
     </Directory>

    .....

</VirtualHost>

Вернуться на верх