【问题标题】:Setting up several Django apps on one server在一台服务器上设置多个 Django 应用程序
【发布时间】:2010-11-11 10:47:06
【问题描述】:

我一直在尝试在一个服务器上配置两个单独的 Django 应用程序,以便可以通过不同的 URL 访问它们...使用下面的配置,我可以访问第一个应用程序,但我不知道如何包括第二个应用程序的设置。管理媒体也根本没有加载

NameVirtualHost *:8032

服务器名称本地主机 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]

服务器名称本地主机 ServerAlias 本地主机 DocumentRoot "/usr/local/www/apache22/data"

【问题讨论】:

    标签: django apache


    【解决方案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>
    

    【讨论】:

    • thnx...我会试试这个...对于管理媒体怎么样...这行得通吗?
    • 这个配置是针对 mod_python 的,他们使用的是 mod_wsgi。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        在 /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,因此您也可以以不同的用户身份运行每个站点,这样他们中的两个就不会访问彼此的数据。如果两个站点属于不同的利益相关者,这将很有用。

        【讨论】:

          【解决方案5】:

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

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

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 2012-08-22
            • 1970-01-01
            • 2014-03-21
            • 1970-01-01
            • 1970-01-01
            • 2019-10-29
            • 2019-06-15
            • 2015-07-12
            • 1970-01-01
            相关资源
            最近更新 更多