我想在apache上部署多个django应用程序,但只知道如何部署一个。
重写Wamp服务器的本地主机,我可以部署应用程序没有问题,但我需要部署更多,不知道如何。我见过虚拟主机,认为很好,但不知道如何配置它们。有人知道怎么做吗?提前谢谢。
可以使用虚拟主机(vhosts)在Apache上托管多个django应用程序
重要的要关心:
-
在配置Apache时,我建议从命令行启动Apache,如"httpd.exe"与XAMPP或WAMP一样,您将不会在error.log文件中看到一些初始启动错误消息。
-
你只能使用一个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
如何设置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
- 下面是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>