Как использовать mod_wsgi для размещения нескольких проектов Django в одном домене? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть несколько проектов Django, и я хочу разместить их в одном домене Например: example.com/one<br> example.com/two

Я искал различные решения и нашел приведенную ниже ссылку, которая мне очень помогла. Можно ли разместить несколько проектов django в одном домене?

Из приведенного выше прочтения я узнаю, что мне нужно mod_wsgi для этого, но я запутался, что где установить это mod_wsgi - Нужно ли устанавливать в каждую папку проекта (отдельно для каждого myenv) или должен быть установлен только один раз. Пожалуйста, помогите мне, как и где установить этот mod_wsgi и, наконец, как разместить несколько проектов под одним доменным именем.

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Установка mod_wsgi зависит от того, какая у вас ОС. Проверьте инструкции. Если вы используете CentOS или RedHat, я бы порекомендовал посмотреть на IUS Community; они предоставляют репозиторий с установленными пакетами yum для Python 3.6 и mod_wsgi. Версия mod_wsgi, которую вы устанавливаете, должна быть скомпилирована с той же версией Python, которую вы используете в своей виртуальной среде.

Тогда вам нужно правильно настроить VirtualHost. Если у вас есть хост в корне, он должен быть последним в вашем определении. Вот пример:

<VirtualHost *:443>
  TimeOut 300
  SSLEngine On

  ServerName mysite.example.com

  # Set to the lobal Application Group
  WSGIApplicationGroup %{GLOBAL}
  # Pass Authorizations through to the WSGI app for Django REST Framework Token Auth
  WSGIPassAuthorization On

  WSGIDaemonProcess subsite-develop-https python-home=/web/subsite-develop/venv request-timeout=300 user=apache group=apache
  WSGIProcessGroup subsite-develop-https
  WSGIScriptAlias /subsite /web/subsite-develop/config/wsgi.py process-group=subsite-develop-https
  <Directory /web/subsite-develop/config>
    Require all granted
  </Directory>
  Alias /subsite/static/ /web/subsite-develop/static/
  <Directory /web/subsite-develop/static>
    Header always set Access-Control-Allow-Origin "*"
    Require all granted
  </Directory>

  WSGIDaemonProcess django-mysite-develop-https python-home=/web/django-mysite-develop/venv request-timeout=300 user=apache group=apache
  WSGIProcessGroup django-mysite-develop-https
  WSGIScriptAlias / /web/django-mysite-develop/config/wsgi.py process-group=django-mysite-develop-https
  <Directory /web/django-mysite-develop/config>
    Require all granted
  </Directory>
  Alias /static/ /web/django-mysite-develop/static/
  <Directory /web/django-mysite-develop/static>
    Header always set Access-Control-Allow-Origin "*"
    Require all granted
  </Directory>
  Alias /media/ /var/media/mysite-www/
  <Directory /var/media/mysite-www>
    Require all granted
  </Directory>
</VirtualHost>

В этом примере будет размещен один сайт в /subsite/, а другой в корне, /. Обратите внимание, что корневой сайт стоит последним. Это также означает, что вы не сможете использовать маршрут /subsite/ в корневом проекте, так как Apache перенаправит его через определение WSGIScriptAlias.

Это также для сайта с TLS; возможно, вам придется переключить 443 на 80 и удалить SSLEngine On, если вы не используете TLS. WSGIPassAuthorization предназначен для токенов Django REST Framework, возможно, вы также можете удалить его, но я оставил его для более полного примера. Это для Apache 2.4+, когда они переключились на синтаксис Require all granted.

Сообщество IUS, если на RedHat / CentOS: https://ius.io/

0 голосов
/ 14 июня 2019

Я расскажу вам, как мы сделали в нашем проекте. У нас есть один проект Django с разными маршрутами. Например /players, /tablet. Мы разместили наш проект в двух контейнерах Docker. У нас есть NGINX в качестве нашего обратного прокси. NGINX перенаправляет запрос в соответствующий контейнер на основе маршрута. NGINX открыт для всего мира. Но я не уверен, полезно ли это вам или нет.

...