如何在 EC2 上的 nginx 上的 uWSGI 上运行 Django 1.3/1.4(Apache2 有效)

如何在 EC2 上的 nginx 上的 uWSGI 上运行 Django 1.3/1.4(Apache2 有效)

我代表管理员发布一个问题。基本上,他想在 Amazon EC2 上安装的 nginx 上的 WSGI 上设置 Django 应用程序(基于 Django 1.3 制作,但将迁移到 Django 1.4,因此我希望这两个中的哪一个能工作并不重要)。

当使用 Django 的开发服务器时(例如./manage.py runserver 0.0.0.0:8080),应用程序可以正常运行,Apache 也可以正常工作。唯一的问题是 nginx,看起来 nginx / WSGI 或 Django 配置还有其他问题。

他的描述如下:

服务器已经按照很多教程配置好了,但是遗憾的是Nginx和uWSGI仍然不能与应用程序一起工作。

项目名称.py:

import os, sys, wsgi

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ProjectName.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

我通过命令运行 uWSGI:

uwsgi -x /etc/uwsgi/apps-enabled/projectname.xml

XML 文件:

<uwsgi>
        <chdir>/home/projectname</chdir>
        <pythonpath>/usr/local/lib/python2.7</pythonpath>
        <socket>127.0.0.1:8001</socket>
        <daemonize>/var/log/uwsgi/proJectname.log</daemonize>
        <processes>1</processes>
        <uid>33</uid>
        <gid>33</gid>
        <enable-threads/>
        <master/>
        <vacuum/>
        <harakiri>120</harakiri>
        <max-requests>5000</max-requests>
        <vhost/>
</uwsgi>

在来自 uWSGI 的日志中:

*** no app loaded. going in full dynamic mode ***

在 Nginx 的日志中:

XXX.com [pid: XXX|app: -1|req: -1/1] XXX.XXX.XXX.XXX () {48 vars in 989 bytes} [Date] GET / => generated 46 bytes in 77 m
secs (HTTP/1.1 500) 2 headers in 63 bytes (0 switches on core 0)
added /usr/lib/python2.7/ to pythonpath.
Traceback (most recent call last):
  File "./ProjectName.py", line 26, in <module>
    from django.core.wsgi import get_wsgi_application
ImportError: No module named wsgi
unable to load app SCRIPT_NAME=XXX.com|

使用的示例教程:

你知道哪里做错了吗,或者应该做什么才能让 Django 在 EC2 上的 nginx 上的 uWSGI 上运行?

答案1

告诉他从简单的配置开始,然后进行调整:

http://projects.unbit.it/uwsgi/wiki/Quickstart

一旦简单 http 模式的应用程序运行起来,他就可以开始添加与 nginx 的集成。

之后,他可以开始真正的调整、添加流程和监控功能。

据我所见,他似乎正从动态模式开始,这是一个非常复杂的话题(而且 99% 的时间都是不需要的)

答案2

在你的 uwsgi.xml 中添加更多配置行,这是我的一个项目的 yaml 版本:

uwsgi:
    uid: 33
    gid: 33
    socket: /webapps/<project_name>/run/uwsgi-socket
    logto: /webapps/<project_name>/logs/uwsgi.log
    pidfile: /webapps/<project_name>/run/uwsgi.pid
    touch-reload: /webapps/<project_name>/run/reload
    enable-threads: true
    single-interpreter: true
    thread: 3
    master: true
    chdir: /webapps/<project_name>
    env: DJANGO_SETTINGS_MODULE=<project_name>.settings.production
    module: <project_name>.wsgi
    virtualenv: /webapps/.virtualenvs/<project_name>

看起来您缺少了 env 和 module 部分。您可能还需要考虑虚拟环境。

相关内容