Назад | Перейти на главную страницу

Как запустить Django 1.3 / 1.4 на uWSGI на nginx на EC2 (работает Apache2)

Я задаю вопрос от имени своего администратора. По сути, он хочет установить приложение Django (созданное на Django 1.3, но будет переходить на Django 1.4, поэтому я надеюсь, не имеет значения, какое из этих двух будет работать) на WSGI на nginx, установленном на Amazon EC2.

Приложение работает правильно, когда используется сервер разработки Django (с ./manage.py runserver 0.0.0.0:8080 например), также корректно работает Apache. Единственная проблема связана с nginx, и похоже, что что-то не так с конфигурацией nginx / WSGI или Django.

Его описание таково:

Сервер настроен согласно многим руководствам, но, к сожалению, Nginx и uWSGI по-прежнему не работают с приложением.

ProjectName.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 работал с uWSGI на nginx на EC2?

Добавьте еще несколько строк конфигурации в свой 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. Вы также можете рассмотреть вариант virtualenv.

Скажите ему, чтобы он начал с простых конфигураций, а затем настроил их:

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

Как только приложение в простом режиме http заработает, он может начать добавлять интеграцию с nginx.

После этого он может приступить к реальной настройке, добавляя процессы и функции мониторинга.

Из того, что я вижу, похоже, что он начинает в динамическом режиме, что является действительно сложной темой (и в 99% случаев не требуется).