如何在apache上部署多个django应用程序?



我想在apache上部署多个django应用程序,但只知道如何部署一个。

重写Wamp服务器的本地主机,我可以部署应用程序没有问题,但我需要部署更多,不知道如何。我见过虚拟主机,认为很好,但不知道如何配置它们。有人知道怎么做吗?提前谢谢。

可以使用虚拟主机(vhosts)在Apache上托管多个django应用程序

重要的要关心:

  1. 在配置Apache时,我建议从命令行启动Apache,如"httpd.exe"与XAMPP或WAMP一样,您将不会在error.log文件中看到一些初始启动错误消息。

  2. 你只能使用一个python版本,即使在不同的virt。每个vhost的Env作为apache模块mod_wsgi编译需要适合它,并在apache启动时加载一次

在httpd.conf中这样写(你应该已经有了这个,因为你运行的是单个应用程序配置):

LoadFile "c:/.../python/python38/python38.dll"
LoadModule wsgi_module "c:/..../mod_wsgi.cp38-win_amd64.pyd"

对于从头开始的:

activate virt.env.
> pip install mod_wsgi
> mod_wsgi-express module-config

将给出上述输出(LoadFile ....),您需要将其复制到httpd.conf

  1. 如何设置virt的路径。环境和应用程序文件夹:

    如果有一个主机,您将指向您的virt。通过设置WSGIPythonHome和WSGIPythonPath指向httpd.conf:

    中的应用文件夹
WSGIPythonHome "d:/..../django_project/env_folder"
WSGIPythonPath "d:/..../django_project/app_name" 

but:你不能把WSGIPythonHome/WSGIPythonPath放在httpd-vhosts.conf ....中的VirtualHost声明中它将导致错误消息

解决方案:在wsgi.py中动态设置路径,并从apache *.conf中删除WSGIPythonHome/WSGIPythonPath:

wsgi.py:
# place this before(!!) any package import that belongs to virtual env
# replacement for WSGIPythonHome "d:/..../django_project/env_folder"
# choose one:
sys.path.append('d:/.../env_folder/lib/site-packages')              # add individual virt.environment packages at the end of sys.path;  global env packages have prio
sys.path.insert(0,'d:/.../env_folder/lib/site-packages')            # add individual virt.environment packages at the beginning of sys.path;  indiv. virt.env packages have prio over global env

# replacement   WSGIPythonPath "d:/..../django_project/app_name"    
sys.path.append('d:/.../django_project/app_name')                   # add indiv. app folder to search path      
# after that the other wsgi.py stuff like .. 
from django.core.wsgi import get_wsgi_application       
  1. 下面是apache conf的示例:

(为什么虚拟主机:有一个(奇怪的或错误的)行为的apache…如果没有一个虚拟主机名与请求匹配,那么apache将自动将请求分派到配置中的第一个vhost—无论其中定义了哪个服务器名。这可能会导致混乱,因为调用了完全错误的应用程序,并且错误消息肯定会从django内部弹出,而不是表明错误在Apache conf级别。一个带有简单index.html和错误消息的虚拟主机可以使其透明)

httpd-vhost.conf:

<VirtualHost *:80>
ServerName Dumme_Host
DocumentRoot "d:/WEBSPACES/Dummy_Host"
<Directory d:/WEBSPACES/Dummy_Host>
Require all granted
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName  xxxx1
WSGIScriptAlias / "d:/.... /wsgi.py" application-group=app_name1
Alias /media/ d:/.../media/
Alias /static/ d:/.../static/
<Directory d:/.../app_name1>
Require all granted
</Directory>

<Directory d:/.../media>
Require all granted
</Directory>
<Directory d:/.../static>
Require all granted
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName  xxxx2
WSGIScriptAlias / "d:/.... /wsgi.py" application-group=app_name2
Alias /media/ d:/.../media/
Alias /static/ d:/.../static/
<Directory d:/.../app_name2>
Require all granted
</Directory>
.....
</VirtualHost>

相关内容