在 apache 上的不同 virtualenv 中运行多个 django 项目
Posted
技术标签:
【中文标题】在 apache 上的不同 virtualenv 中运行多个 django 项目【英文标题】:run multiple django project in different virtualenv on apache 【发布时间】:2015-08-15 13:29:43 【问题描述】:我想在不同的 virtualenv 中运行两个不同的 django_projects。 这是代码:
ServerName ubuntu_server_apache
<VirtualHost *:80>
ServerName dev.hexxie.com
ErrorLog "/home/ashish/deployments/mysite_dev/conf/mysite_dev_error.log"
WSGIScriptAlias / /home/ashish/deployments/mysite_dev/mysite/mysite/wsgi.py
Alias /static /home/ashish/deployments/mysite_dev/static_root
<Directory /home/ashish/deployments/mysite_dev/static_root>
Require all granted
</Directory>
Alias /media /home/ashish/deployments/mysite_prod/data/media
<Directory /home/ashish/deployments/mysite_prod/data/media>
Require all granted
</Directory>
<Directory /home/ashish/deployments/mysite_dev/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
WSGIPythonPath /home/ashish/deployments/mysite_dev/mysite:/home/ashish/.virtualenvs/mysite_dev/lib/python2.7/site-packages
<VirtualHost *:80>
ServerName hexxie.com
ServerAlias *.hexxie.com
ErrorLog "/home/ashish/deployments/mysite_prod/conf/mysite_error.log"
WSGIScriptAlias / /home/ashish/deployments/mysite_prod/mysite/mysite/wsgi.py
Alias /static /home/ashish/deployments/mysite_prod/static_root
<Directory /home/ashish/deployments/mysite_prod/static_root>
Require all granted
</Directory>
Alias /media /home/ashish/deployments/mysite_prod/data/media
<Directory /home/ashish/deployments/mysite_prod/data/media>
Require all granted
</Directory>
<Directory /home/ashish/deployments/mysite_prod/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
WSGIPythonPath /home/ashish/deployments/mysite_prod/mysite:/home/ashish/.virtualenvs/mysite_prod/lib/python2.7/site-packages
但是我在使用这个 apache conf 时遇到了内部服务器错误。我觉得这是由于 WSGIPythonPath 在 conf 中使用了两次。 WSGIPythonPath
不能包含在虚拟主机中。那么如何在 apache 上的 diff virtualenv 上分别运行两个 diff django 项目呢?
【问题讨论】:
【参考方案1】:首先,使用守护进程组,以便每个进程在单独的进程中运行,然后在各自的WSGIDaemonProcess
组指令上使用python-home
选项。见:
【讨论】:
谢谢@Graham!它有帮助【参考方案2】:这是我如何做的一个例子。当然,您必须根据您的设置更改路径/项目名称(例如端口 443 上的 SSL,但也适用于端口 80):
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule ssl_module modules/mod_ssl.so
WSGISocketPrefix /var/run/wsgi
NameVirtualHost *:443
Listen 443
<VirtualHost *:443>
ServerName your.server.com
ErrorLog /home/user/apache_errors.log
WSGIDaemonProcess project1-https python-home=/home/user/.virtualenvs/project1
WSGIScriptAlias /project1 /var/www/html/project1/project1/wsgi.py process-group=project1-https application-group=project1-https
WSGIProcessGroup project1-https
Alias /project1/static/ /var/www/html/project1/static/
WSGIDaemonProcess project2-https python-home=/home/user/.virtualenvs/project2
WSGIScriptAlias /project2 /var/www/html/project2/project2/wsgi.py process-group=project2-https application-group=project2-https
WSGIProcessGroup project2-https
Alias /project2/static/ /var/www/html/project2/static/
</VirtualHost>
以这种方式配置时,virtualenv 负责 Python 可执行文件和路径。
【讨论】:
不需要您的WSGIProcessGroup
指令,因为您将 process-group
选项用于 WSGIDaemonProcess
。后者WSGIProcessGroup
实际上无论如何都会覆盖第一个并且不会做你所期望的。如果这只是该进程组中的应用程序,您还应该将application-group
选项设置为%GLOBAL
。这避免了 Python 的一些第三方 C 扩展模块的问题。另请注意,如果您有 80/443,则不需要为 443 使用单独的进程组。可以引用早期端口 80 中的那个VirtualHost
。
哇,直接从马的嘴里!感谢您如此参与 SO,在 mod_wsgi 上拥有源权限确实提供了丰富的信息。非常感谢!以上是关于在 apache 上的不同 virtualenv 中运行多个 django 项目的主要内容,如果未能解决你的问题,请参考以下文章
virtualenv和virtualenvwrapper工具
centos 6.5 上 Apache 2.2.15 上的 Django
使用pyenv和virtualenv在apache后面部署flask应用程序时找不到numpy,pandas模块
ImportError:没有名为 django.core.wsgi 的模块 Apache + VirtualEnv + AWS + WSGI