运行 apache 上不同 virtualenv 中的多个 django 项目

run multiple django project in different virtualenv on apache

我想 运行 两个不同的 django_projects 每个都在不同的 virtualenv 中。 这是代码:

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 无法包含在虚拟主机中。那么如何 运行 两个不同的 django 项目分别在 apache 上的 diff virtualenv 上?

下面是我如何操作的示例。当然,您必须根据您的设置更改路径/项目名称(示例是端口 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 可执行文件和路径。

首先,使用守护进程组,这样每个进程组都在单独的进程中运行,然后在各自的 WSGIDaemonProcess 组指令上使用 python-home 选项。参见: