如何在CentOS上通过WSGI运行Django

0 投票
1 回答
1816 浏览
提问于 2025-04-18 13:24

我尝试了两种方法来配置wsgi,以便在我的网站上使用Django。我的项目根目录在 /var/run/myApp。这是我的 wsgi.py 文件:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myApp.settings'

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

1. 我在apache上安装了运行Django所需的一切,并使用centos作为操作系统。我使用这个网站来运行wsgi。我用这个命令来设置我的服务器:

mod_wsgi-express setup-server wsgi.py --port=80 --user test --group test --server-root=/var/run/myApp/mod_wsgi-express-80

之后我运行了这个命令,一切都正常:

/var/run/myApp/mod_wsgi-express-80/apachectl start

但是当我访问我的网站时,出现了错误 500 : Internal Server Error

2. 我还尝试了另一种配置apache配置文件的方法,但在apache的错误日志中出现了这个错误:

" Target WSGI script not found or unable to stat: /run "

这是我在 httpd.conf 中写的内容:

WSGIDaemonProcess mySite user=test group=test
WSGIProcessGroup mySite

<VirtualHost *:80>
    WSGIScriptAlias / run/myApp/my_App/wsgi.py
    <Directory run/myApp/my_App>
    Order allow,deny
    Allow from all
    </Directory>
</VirtualHost>

问题出在哪里呢?谢谢。

1 个回答

2

如果你在用Django,建议使用mod_wsgi express来集成Django,这样会更好。

首先,在Django的settings.py文件里,把'mod_wsgi.server'加到INSTALLED_APPS里。

接着,使用runmodwsgi管理命令时,加上--setup-only这个选项:

python manage.py runmodwsgi --setup-only --port=80 --user test --group test --server-root=/var/run/myApp/mod_wsgi-express-80

这样做是为了替代mod_wsgi-express setup-server这个命令。

然后你可以使用:

/var/run/myApp/mod_wsgi-express-80/apachectl start

以root身份运行。

通过使用runmodwsgi这个管理命令,mod_wsgi express会自动考虑Django的静态文件目录,并把它加入到生成的Apache配置里。

在使用静态文件时,记得运行:

python manage.py collectstatic

这样可以把任何静态文件复制到你在Django的settings.py文件里指定的STATIC_ROOT目录。

使用管理命令时,mod_wsgi express还会正确设置Django的顶级目录作为应用的主目录,并确保模块搜索路径设置得当,这样你的项目模块才能被找到。

撰写回答