在一台服务器上设置几个Django应用程序

时间:2009-07-16 16:39:43

标签: django apache

我一直在尝试在一台服务器上配置两个独立的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 个答案:

答案 0 :(得分:2)

在/ 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的内容,那么这将是一个更好的主意。 Here's a tutorial on using NginX

由于您使用的是mod_wsgi,因此您可以将每个站点作为不同的用户运行,以便其中两个站点可能无法访问彼此的数据。如果这两个站点属于不同的利益相关者,这将非常有用。

答案 1 :(得分:2)

目前尚不清楚您是否希望它们同时托管在同一个VirtualHost下。其他人已经离开并告诉您使用单独的VirtualHost,但这不是必需的,可以在同一个VirtualHost下完成。当您实际使用mod_wsgi时,有些人使用mod_python提供了配置。从技术上讲,您还不需要静态媒体的Alias指令,尽管您存储它们的位置可能需要根据您希望能够用来访问它们的URL进行更改。

这就是说,对于您当前的配置,因为您已经使用AddHandler映射.wsgi文件,您已经可以托管多个应用程序,您只需要在文档目录中创建多个.wsgi文件并使用适当的URL访问他们。可以添加进一步的配置以避免需要在URL中指定“.wsgi”扩展名。

如果您执行以下操作,我可以给出正确答案:

  • 说出他们是否需要在同一个VirtualHost下。

  • 说明VirtualHost中的每个不同应用程序应该可以访问哪个URL。

  • 说明每个不同的应用程序应使用哪个媒体URL。

  • 说明每个进程是应该在单独的进程中运行,还是在同一进程的不同子解释器中运行它们是否足够。在单独的进程中运行将允许在进行代码更改时独立地重新启动每个进程。

答案 2 :(得分:1)

您可以在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>

编辑:还将以下内容添加到每个虚拟主机

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

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

<locationmatch ".(jpg|gif|png)$">
    SetHandler None
</locationmatch>

答案 3 :(得分:1)

答案 4 :(得分:0)

对于管理媒体,您可以在两个虚拟主机中放置相同的别名,或者如果它们需要不同,请设置它们的副本并具有2个不同的别名。