2012-05-04 18 views
23

Próbuję wdrożyć projekt django. Próbowałem wielu tutoriali, ale nie miałem szczęścia. Używam nowego, czystego Ubuntu 11.10. Mam wykonywaneDjango + uWSGI przez NGINX na Ubuntu 11.10

apt-get install nginx 
apt-get install uwsgi 
service nginx start 

I utworzeniu folderu /deploy/project1 i umieścić tam manage.py i innych plików.

mojego obecnego /deploy/project1/project1/wsgi.py zawiera:

import os 

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

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

Więc może mi pan powiedzieć, jak wdrożyć aplikację dla mojego django domain.com prawidłowo?

Ja również zainstalowane Django poprzez pip i easy_install

Co należy dodać w /etc/nginx/sites-enabled/default.

Odpowiedz

36

Zakładając, że masz zainstalowane wszystkie wymagania i korzystasz z pakietów aptitude, nie potrzebujesz pliku wsgi.py. Cała konfiguracja znajduje się w pliku uwsgi ini/xml/yaml. (wybierz preferowany format).

Oto minimalne przykładem example.com pliku do nginx (/ etc/nginx/strony-available/examplecom dla Ubuntu 11.10)

server { 
    listen  80; 
    server_name example.com; 
    access_log /var/log/nginx/projectname.log; 
    location /media { 
     alias /vagrant/test/projectname/media/; 
    } 
    location /static { 
     alias /vagrant/test/projectname/static/; 
    } 
    location/{ 
     uwsgi_pass unix:///run/uwsgi/projectname/socket; 
     include uwsgi_params; 
    } 
} 

utworzyć dowiązanie symboliczne do pliku/etc/nginx/sites włączoną

sudo ln -s /etc/nginx/sites-available/examplecom /etc/nginx/sites-enabled/examplecom 

lub

sudo /usr/sbin/nxensite examplecom 

skończysz z nginx.

idź do /etc/uwsgi/apps-available i utworzyć plik ini

sudo vim /etc/uwsgi/apps-available/projectname.ini 

[uwsgi] 
virtualenv=/home/vagrant/.virtualenvs/projectenv 
thread=3 
master=1 
env = DJANGO_SETTINGS_MODULE=projectname.settings 
module = django.core.handlers.wsgi:WSGIHandler() 
chdir = /path/to/my/django/project 
socket = /run/uwsgi/projectname/socket 
logto = /var/log/uwsgi/projectname.log 

Skieruj ini do /etc/uwsgi/apps-enabled/projectname.ini

sudo ln -s /etc/uwsgi/apps-available/projectname.ini /etc/uwsgi/apps-enabled/projectname.ini 

Aby uzyskać więcej informacji, zobacz którykolwiek z tych pliki w systemie:

/etc/uwsgi/apps-available/README 
/etc/uwsgi/apps-enabled/README 
/usr/share/doc/uwsgi/README.Debian.gz 
/etc/default/uwsgi 

Skończyłeś. Można teraz ponownie nginx & uwsgi

sudo service nginx restart 
sudo service uwsgi restart 

Cheers!

+0

Dzięki za wspaniałą odpowiedź. Dodałem edycję z pewnymi elementami ubuntu (nxensite, README dla/etc/uwsgi/apps- *). – spazm

+0

Dlaczego używasz: uwsgi_pass unix: /// z 3 ukośnikami? Czy jest inny sposób użycia 3 lub 1 wiodących ukośników? – cebor

+0

Nie ma różnicy, 1 lub 3 wiodące ukośniki oznaczają pełną ścieżkę do gniazda unix. – ScotchAndSoda

9

nie należy zapominać, że w Debianie, Ubuntu i uwsgi pakiet jej pochodnych nie wymaga instalacji jego Python Plugin - uwsgi-plugin-python, ponieważ uWSGI niekoniecznie używa tylko Python (istnieją wtyczki dla Lua, Erlang i innych języków). Jednak Django wymaga wtyczki Python.Zainstalować go:

sudo apt install uwsgi-plugin-python 

odróżnieniu od instalacji PIP, należy wyraźnie wspomnieć uwsgi za wtyczki używane w aplikacji config dodając plugins = python linię do niego (jeśli używasz Python), podobnie jak to:

[uwsgi] 
plugins = python 
uwsgi-socket = /var/sockets/django.sock 
chmod-socket = 660 
chdir = /home/v/django 
module = project.wsgi 

ile zrobisz to, nie będzie dostępnych opcji specyficznych dla Pythona. UWSGI Debiana/Ubuntu będzie po prostu cicho!

+2

'plugin = python', myślę. Nie uwierzysz *, ile miejsc zaniedbuje to w ogóle. Migrowałem aplikację Pythona z 1 serwera (który działał w 100%) do innego hostowanego w innej lokalizacji, a ja oczywiście robiłem to w wieku i wieki temu, zupełnie o tym zapomniałem. Szukając informacji o pliku ini aplikacji uwsgi python, większość miejsc mówi, aby po prostu całkowicie usunąć "wtyczkę", nie wspominając o tym, aby upewnić się, że 'uwsgi-plugin-python' jest zainstalowany w systemie. – seaders

+0

Z 'man uwsgi':' --pinsins - ładuje wtyczki uWSGI; --plugin - ładuje wtyczki uWSGI', więc te dwa parametry są efektywnie synonimami. – TranslucentCloud

Powiązane problemy