如何在Debian机器上使用mod_wsgi部署Django?

时间:2013-06-12 04:48:25

标签: django apache2 mod-wsgi

我在Debian机器上安装了apache2,mod_wsgi,并将其添加到我的apache2.conf文件中:

WSGIScriptAlias /home/zurelsoft/Documents/workspace/genalytics/genalytics/wsgi.py
WSGIPythonPath /home/zurelsoft/Documents/workspace/genalytics

<Directory /home/zurelsoft/Documents/workspace/genalytics/genalytics>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

我的项目名称是genalytics。我正在使用Django 1.5。已经有wsgi.py了。我应该怎么做用mod_wsgi运行django,我应该在哪里给出我的静态文件的路径。感谢

修改

我的apache.conf文件中有这个:

Listen 8000

Alias /static/ /home/zurelsoft/Documents/workspace/genalytics/fileupload/static

<Directory /home/zurelsoft/Documents/workspace/genalytics/fileupload/static>
Order deny,allow
Allow from all
</Directory>


WSGIScriptAlias / /home/zurelsoft/Documents/workspace/genalytics/fileupload/static


<Directory /home/zurelsoft/Documents/workspace/genalytics/fileupload/static>
<Files wsgi.py>
Order allow,deny
Allow from all
</Files>
</Directory>

但是当我运行尝试启动apache时,我收到此错误:

(98)已经在使用的地址:make_sock:无法绑定到地址0.0.0.0:80 没有可用的监听套接字,关闭 无法打开日志 行动开始&#39;失败。

3 个答案:

答案 0 :(得分:1)

假设您已正确设置所有内容,那么您没有太多工作要做。

在您的应用程序根目录中,创建一个名为django.wsgi的文件并编写以下代码。

import os
import sys

sys.path.append('/path/to/your/app')

os.environ['PYTHON_EGG_CACHE'] = '/path/to/your/app/.python-egg'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

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

现在,在apache配置中添加虚拟主机以提供静态和其他文件,并添加以下行:

   WSGIScriptAlias / /path/to/your/app/django.wsgi

   <Directory /path/to/your/app>
      Order allow,deny
      Allow from all
   </Directory>

   Alias /robots.txt /path/to/your/app/robots.txt
   Alias /favicon.ico /path/to/your/app/favicon.ico
   Alias /images /path/to/your/app/images
   Alias /static /path/to/your/app/static

   ErrorLog /path/to/your/app/logs/error.log
   CustomLog /path/to/your/app/access.log combined

记得重启apache。 您可以查看thisthis链接以获取完整信息。此外,如果您需要知道如何添加虚拟主机,请检查this输出。

希望有所帮助。

答案 1 :(得分:0)

网上有许多声音,其中大多数都与当前的Django版本配合使用,但我对他们对Django当前文档缺乏一致性感到不满,并找到了遵循这些说明的最简单方法:

https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/modwsgi/

在那里它说:'从Django版本1.4开始, startproject将为你创建wsgi.py - 看起来像这样:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

所以现在它是连接到mod_wsgi的 wsgi.py ,你使用aptitude安装,而 django.wsgi 已被弃用。

现在我们要尊重配置apache站点的 debian方法,所以我们创建了一个 dj-myapp,而不是将以下代码放入httpd.conf中,而不是像django-docs建议的那样。 / etc / apache2 / sites-available中的文件,使用 a2ensite dj-myapp 激活它,并使用 a2dissite default 禁用默认值。 WSGI指令是在virtualhost部分之前编写的:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com
<VirtualHost *:80>
    <Directory /path/to/mysite.com/mysite>
      <Files wsgi.py>
            Order deny,allow
            Allow from all
      </Files>
    </Directory>
</VirtualHost>

这适用于apache 2.2x,2.4+使用需要所有授予而不是允许来自所有

最后配置静态文件服务,如django文档中所述。指令也放在 dj-myapp 中。对于管理静态文件,这行适用于我:

Alias /static/admin /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin

答案 2 :(得分:0)

在/etc/apache2/sites-available中创建名为app.conf的文件.app.conf:

WSGIPassAuthorization On
WSGIPythonPath /home/brms/manage/web/brms
WSGIDaemonProcess pyramid user=brms group=brms threads=4 \
   python-path=/usr/local/lib/python3.4/dist-packages/
<VirtualHost *:80>
    <Directory /home/brms/manage/>
        <Files wsgi.py>
                WSGIProcessGroup pyramid
                Require all granted
        </Files>
    </Directory>
    Alias /meetingApp /var/www/meetingApp
</VirtualHost>
WSGIScriptAlias / /home/brms/manage/wsgi.py

启用此网站:sudo a2ensite app.conf 重启Apache:sudo service apache2 restart