Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一台服务器上有多个Django应用程序_Python_Django_Apache_Mod Wsgi - Fatal编程技术网

Python 一台服务器上有多个Django应用程序

Python 一台服务器上有多个Django应用程序,python,django,apache,mod-wsgi,Python,Django,Apache,Mod Wsgi,如何在多个域上提供多个Django应用程序 比如我有 djangoapp1.com和djangoapp2.com 然后,我在两个不同的位置有两个不同的应用程序 /srv/www/djangoapp1 /srv/www/djangoapp2 我正在使用mod_wsgi运行Apache2,目前在其httpd.conf中有以下内容 WSGIScriptAlias / /srv/www/app1/app1/wsgi.py WSGIPythonPath /srv/www/app1 <Directo

如何在多个域上提供多个Django应用程序

比如我有

djangoapp1.com和djangoapp2.com

然后,我在两个不同的位置有两个不同的应用程序

/srv/www/djangoapp1 /srv/www/djangoapp2

我正在使用mod_wsgi运行Apache2,目前在其httpd.conf中有以下内容

WSGIScriptAlias / /srv/www/app1/app1/wsgi.py
WSGIPythonPath /srv/www/app1

<Directory /srv/www/app1/system>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
WSGIScriptAlias//srv/www/app1/app1/wsgi.py
WSGIPythonPath/srv/www/app1
命令拒绝,允许
通融
很明显,我还有虚拟主机,我得到了django默认安装页面,但现在我想提供我的第二个应用程序,有人能告诉我正确的方法吗

Django V:1.4.1

您可以使用Apache的


Django有很多例子,例如,

这里有很多方法,但没有简单的答案——这取决于您的需求和约束

最简单的可能是@Hedde建议的方法,即在virtualhost中定义每个站点的WSGI配置

第二种可能更灵活的方法是在其自己的包含应用程序的服务器内运行每个Django应用程序,例如(希望以隔离特定于应用程序的依赖关系的方式)在不同的端口上运行,然后使用Apache甚至作为应用程序流量的代理

这涉及到一个更复杂的服务器环境来管理,但使您能够单独管理应用程序

您可以一次为一个应用程序重新配置可用的worker、升级应用程序版本、更改settings.py等,而无需重新启动单个单一进程

此外,尽管有可能,但在同一Apache进程中监视虚拟主机要比单独监视单个应用程序服务器实例复杂得多


YMMV

请看这是否有用

在apache2.conf或htppd.conf中

# Virtual hosts setup
NameVirtualHost *
<VirtualHost *>
    ServerName example1.com
    ............    
    WSGIScriptAlias / /..../path/to/wsgi1.py
</VirtualHost>

<VirtualHost *>
    ServerName example2.com
    ............    
    WSGIScriptAlias / /..../path/to/wsgi2.py
</VirtualHost>
in wsgi1.py

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings1' # or projectnaame.settings1
in wsgi2.py

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings2' # or projectname.settings2
In settings1.py & settings2.py you can make necessary databases and other configurations
#虚拟主机设置
名称虚拟主机*
ServerName example1.com
............    
WSGIScriptAlias/../path/to/wsgi1.py
ServerName example2.com
............    
WSGIScriptAlias/../path/to/wsgi2.py
在wsgi1.py中
os.environ['DJANGO_SETTINGS_MODULE']='settings1'#或projectnaame.settings1
在wsgi2.py中
os.environ['DJANGO_SETTINGS_MODULE']='settings2'#或projectname.settings2
在settings1.py和settings2.py中,可以进行必要的数据库和其他配置

在一台服务器上运行多个django应用程序的方法之一是在每个端口上运行一个应用程序

如何在两个不同端口上运行两个应用程序?

<VirtualHost *:80>

  ProxyPreserveHost On
  ProxyRequests Off
  ServerName example.com
  ServerAlias localhost

   ProxyPassMatch "^/(apis/v1/hello$.*)" "http://127.0.0.1:8082/$1"
   ProxyPassMatch "^/(apis/v1/hi$.*)" "http://127.0.0.1:8082/$1"

   ProxyPassMatch "^/(apis/v1/wassup$.*)" "http://127.0.0.1:8083/$1"
   ProxyPassMatch "^/(apis/v1/howdy$.*)" "http://127.0.0.1:8083/$1"
</VirtualHost>
按照Django的建议,我使用wsgi在apache和Django代码之间进行接口。这里需要注意的是,您不能在“嵌入式”模式下使用wsgi。在嵌入式系统中,一些操作系统资源是共享的,因此会导致竞争条件。解决方案是在守护程序模式下使用wsgi。顾名思义,在守护进程模式下,wsgi作为单独的进程运行,因此没有共享资源。您的两个django应用程序将不知道对方

这就是我的配置的外观。我正在端口8082和8083上运行应用程序。注意带有
WSGIDaemonProcess
WSGIProcessGroup
processgroup=pas的行

Listen 8082
<VirtualHost *:8082>
  WSGIDaemonProcess djangoapp1 processes=2 threads=15 display-name=%{GROUP}
  WSGIProcessGroup djangoapp1
  WSGIScriptAlias /apis /home/apis/djangoapp1/xyz/config.wsgi  process-group=djangoapp1      
  WSGIApplicationGroup %{GLOBAL}
  <Directory /home/apis/djangoapp1>
    Options +ExecCGI
    <Files config.wsgi>
      Require all granted
    </Files>
  </Directory>
</VirtualHost>


Listen 8083
<VirtualHost *:8083>

  WSGIDaemonProcess djangoapp2 processes=2 threads=15 display-name=%{GROUP}
  WSGIProcessGroup djangoapp2
  WSGIScriptAlias /apis /home/apis/discovery_api/nykaa/config.wsgi process-group=djangoapp2
  WSGIApplicationGroup %{GLOBAL}
  <Directory /home/apis/djangoapp2>
    Options +ExecCGI
    <Files config.wsgi>
      Require all granted
    </Files>
  </Directory>
</VirtualHost>
Django代码 根据建议,我已更换

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")


您是否尝试过在一台服务器上托管多个项目?您是如何使用此功能加载静态文件的,例如尝试加载“”?
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"