Настройка нескольких приложений Django на одном сервере - PullRequest
3 голосов
/ 16 июля 2009

Я пытался настроить два отдельных приложения Django на одном сервере таким образом, чтобы к ним можно было обращаться по разным URL-адресам ... используя приведенную ниже конфигурацию, я могу получить доступ к первому приложению, но я в растерянности из-за включить настройку для второго приложения. Медиа админ тоже не загружается

NameVirtualHost *:8032

ServerName localhost ServerAdmin webmaster@example.com

 DocumentRoot "/usr/local/www/djcode/test"
 <Directory "/usr/local/www/djcode/test">
     Options +ExecCGI
     Order allow,deny
     Allow from all
 </Directory>
 Alias /site_media "/usr/local/www/djcode/test/site_media/"

 Alias /media "/usr/local/www/djcode/test/site_media/media/"
 WSGIDaemonProcess test user=www group=www processes=2 threads=5
 WSGIProcessGroup test
 AddHandler wsgi-script .wsgi
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ /test.wsgi/$1 [QSA,L]

ServerName localhost ServerAlias ​​localhost DocumentRoot "/ usr / local / www / apache22 / data"

Ответы [ 5 ]

2 голосов
/ 17 июля 2009

Не ясно, хотите ли вы, чтобы они оба размещались под одним и тем же VirtualHost или нет. Другие ушли и сказали вам использовать отдельный VirtualHost, но в этом нет необходимости, и это можно сделать в том же VirtualHost. Некоторые предоставили конфигурацию с использованием mod_python, когда вы фактически использовали mod_wsgi. Технически вам также не нужны директивы Alias ​​для статических носителей, хотя место их хранения может потребоваться изменить в зависимости от URL, который вы ожидаете использовать для доступа к ним.

С учетом всего сказанного, для вашей текущей конфигурации, поскольку вы использовали AddHandler для сопоставления файлов .wsgi, вы уже можете разместить несколько приложений, вам просто нужно создать несколько файлов .wsgi в каталоге документов и использовать соответствующий URL для доступа их. Можно добавить дополнительные настройки, чтобы не указывать расширения «.wsgi» в URL.

Я могу дать правильный ответ, если вы сделаете следующее:

  • Скажите, должны ли они находиться под одним и тем же VirtualHost.

  • Скажите, какой URL-адрес в VirtualHost должен быть доступен каждому отдельному приложению:

  • Скажите, какой медиа-URL следует использовать для каждого отдельного приложения.

  • Скажите, должен ли каждый запускаться в отдельном процессе, или адекватны ли они, запущенные в разных подинтерпретаторах одного и того же процесса. Запуск в отдельных процессах позволил бы каждому перезапускаться независимо при внесении изменений в код.

2 голосов
/ 16 июля 2009

Создайте два файла конфигурации в папке / etc / apache2 / sites-available. Дайте им правильные логические имена в соответствии с вашими сайтами (например, example1.com, example12.com и т. Д.). Используйте команду a2ensite, чтобы включить их оба и перезапустить сервер apache.

Каждый ваш конфигурационный файл должен выглядеть примерно так:

<Virtualhost *:8032>
ServerName localhost 
ServerAdmin webmaster@example.com
DocumentRoot "/usr/local/www/djcode/test"
 <Directory "/usr/local/www/djcode/test">
     Options +ExecCGI
     Order allow,deny
     Allow from all
 </Directory>
 Alias /site_media "/usr/local/www/djcode/test/site_media/"

 Alias /media "/usr/local/www/djcode/test/site_media/media/"
 WSGIDaemonProcess test user=www group=www processes=2 threads=5
 WSGIProcessGroup test
 AddHandler wsgi-script .wsgi
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ /test.wsgi/$1 [QSA,L]
 </Virtualhost *:8032>

Вам также необходимо добавить некоторые директивы для обслуживания статического содержимого. Обслуживание статического контента из apache связано с дополнительными затратами, поэтому было бы лучше, если бы вы его обслуживали с помощью какого-либо облегченного веб-сервера, такого как Lighttpd или Nginx, и подключались к apache с помощью обратного прокси-сервера для обслуживания контента на основе django. Вот учебник по использованию NginX

Поскольку вы используете mod_wsgi, вы можете запускать каждый сайт от имени другого пользователя, так что два из них могут не иметь доступа к данным друг друга. Это полезно, если два сайта принадлежат разным заинтересованным сторонам.

1 голос
/ 16 июля 2009
1 голос
/ 16 июля 2009

Вы можете создать несколько виртуальных хостов в Apache и изменить следующее для каждого приложения:

<VirtualHost *:80>
  DocumentRoot /var/www
  ServerName www.site.com

      <location "/<name>">
           SetHandler python-program
           PythonHandler django.core.handlers.modpython
           SetEnv DJANGO_SETTINGS_MODULE <app name>.settings
           PythonPath "['/path/to/app'] + sys.path"
       </location>
 </VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/site2
  ServerName www.site2.com

      <location "/<name2>">
           SetHandler python-program
           PythonHandler django.core.handlers.modpython
           SetEnv DJANGO_SETTINGS_MODULE <app2 name>.settings
           PythonPath "['/path/to/app2'] + sys.path"
       </location>
 </VirtualHost>

edit: также добавьте следующее к каждому виртуальному хосту

<location "/media">
    SetHandler None
</location>

<location "/admin_media">
    SetHandler None
</location>

<locationmatch ".(jpg|gif|png)$">
    SetHandler None
</locationmatch>
0 голосов
/ 16 июля 2009

Для носителей администратора вы можете поместить один и тот же псевдоним на обоих виртуальных хостах, или, если они должны отличаться, настройте их копию и иметь 2 разных псевдонима.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...