首页 > 解决方案 > 单个 apache 上的多个 wsgi.mod

问题描述

django3在 apache 上有一个应用程序http://myapp.example.com

现在它可以工作,但我想将第二个django3应用程序与Anaconda.

可能吗?如果是这样,我应该如何为每个应用程序设置WSGIPythonPath和?Alias /static/

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    ServerName myapp.example.com
    DocumentRoot "/var/www/html/myapp/current/"
    ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
    CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined

    <Directory /var/www/html/myapp/current/>
       Order allow,deny
       Allow from all
    </Directory>
    WSGIScriptAlias / /var/www/html/myapp/current/myapp/wsgi.py
    WSGIDaemonProcess py37 user=ubuntu group=ubuntu python-path=/home/ubuntu/anaconda3/envs/py37/lib/python3.7/site-packages
</VirtualHost>

LoadModule wsgi_module /home/ubuntu/anaconda3/envs/py37/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so

WSGIPythonHome /home/ubuntu/anaconda3/envs/py37/
WSGIPythonPath /var/www/html/myapp/current/

<Directory /var/www/html/myapp/current>
  <Files wsgi.py>
    Order allow,deny
    Allow from all
  </Files>
</Directory>

Alias /static/ /var/www/html/myapp/current/static/
Alias /media/ /var/www/html/myapp/current/media/
<Directory /var/www/html/myapp/current/static>
  Order allow,deny
  Allow from all
</Directory>

标签: pythondjangowsgi

解决方案


只需克隆虚拟主机并替换与新应用程序相关的路径,您可能需要移动目录别名:

Alias /static/ /var/www/html/myapp/current/static/
Alias /media/ /var/www/html/myapp/current/media/
<Directory /var/www/html/myapp/current/static>
  Order allow,deny
  Allow from all
</Directory>

进入虚拟主机。我不使用 wsgi.py 而是使用 site.wsgi。哪个运行应用程序。它的内容是:

import os
import sys
import site

# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('{{PATH TO}/site-packages')

# Add the app's directory to the PYTHONPATH
sys.path.append('{PATH TO PROJECT}')

os.environ['DJANGO_SETTINGS_MODULE'] = '{PROJECT}.settings'

# Activate your virtual env
activate_env=os.path.expanduser("{PATH TO}/bin/activate_venv.py")
exec(open(activate_env).read(), dict(__file__=activate_env))

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

在我的舞台上有效的是(httpd.conf):

LoadModule wsgi_module {PATH TO}/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

WSGISocketPrefix /var/run/wsgi

并且 pyhton 路径/脚本是在虚拟主机中设置的,而不是在主文件中:

WSGIDaemonProcess {GROUP} threads=1 python-home={PATH TO} python-path={PATH TO APP} user={USER}
WSGIProcessGroup {GROUP}


WSGIScriptAlias / {PATH TO FILE}/site.wsgi

如果您想使用上面的设置,您可能需要在 wsgi.py 中注释启动应用程序的行


推荐阅读