рд▓реЗрдЦ рдореЗрдВ рдпреВрдиреЗрдХреНрд╕ рдХреА рддрд░рд╣ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирдЧрдиреЗрдХреНрд╕ + uWSGI рдмрдВрдбрд▓ рдореЗрдВ Django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг, рд╕рд╛рде рд╣реА рдЖрдЧреЗ рд╕рдВрдЪрд╛рд▓рди рд╢реЛрд╖рдг FreeBSD рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рд┐рдирдХреНрд╕ рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреБрдЫ рдорд╛рдореВрд▓реА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реЛрдЧреАред
рдкрд░рд┐рдЪрдп
рдПрдХ рджрд┐рди, рдХрд╛рдо рдХреЗ рд╕реНрдерд╛рди рдкрд░, Django (рдкрд╛рдпрдерди) рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд▓реЗрдЦреЛрдВ рдХреЛ рдирдВрдЧреНрдХреНрд╕ + uWSGI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓реЙрдиреНрдЪ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ uWSGI рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (рдУрдВ) рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдереА, рд╕рд╛рде рд╣реА рд╕рд╛рде Nginx рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕реЙрдХреЗрдЯ / рдкреЛрд░реНрдЯ рднреА рдерд╛ред рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рдирдпрд╛ Django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА uWSGI рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (рдУрдВ) рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рднрд▓реЗ рд╣реА рдпрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╣реЛ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд┐рдзрд┐ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХреЛрдИ рдПрдХрд▓ рдирд╣реАрдВ рд╣реИ, рдЬреЛ
рдлреНрд░реАрдмреАрдПрд╕рдбреА рдХреЗ рдЕрдиреНрдирд┐рдХреНрдХреБ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдЬреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдорди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рднреА рдмрд┐рдВрджреБ рд╣реИред рдирддреАрдЬрддрди, рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рдпреВрдбрдмреНрд▓реНрдпреВрдПрд╕рдЬреАрдЖрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡рд┐рдХреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рд▓реЙрдиреНрдЪ рд╡рд┐рдзрд┐ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ (рдореМрд▓рд┐рдХ рдЕрдВрддрд░:
- UWSGI рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (рдиреЛрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓, рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд xml рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓;
- UWSGI рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (s) рдХреЗ рд▓рд┐рдП xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ Django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ Nginx рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ Nginx рд╕реЗ uWSGI рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
рдпрд╣ рдПрдХ рдПрдХрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ Django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рдореВрд╣ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ / usr / рд╕реНрдерд╛рдиреАрдп / www рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧреА:
# ls -la /usr/local/www/
...
drwxr-xr-x ... app1
drwxr-xr-x ... app2
drwxr-xr-x ... appN
-rw-r--r-- ... webapp.xml
Nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд╕реНрдерд╛рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ, рдПрдХ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рд╕реНрдерд╛рди рд╣реИред
nginx.conf:
рд╕реНрдерд╛рди / {
uwsgi_pass unix: ///tmp/uwsgi.sock;
uwsgi_params рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ;
uwsgi_param UWSGI_SCRIPT рд╡реЗрдмрдк;
uwsgi_param UWSGI_CHDIR / usr / рд╕реНрдерд╛рдиреАрдп / www / app1;
}
рд╕реНрдерд╛рди / app2 {
uwsgi_pass unix: ///tmp/uwsgi.sock;
uwsgi_params рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ;
uwsgi_param SCRIPT_NAME / app2;
uwsgi_param UWSGI_SCRIPT рд╡реЗрдмрдк;
uwsgi_param UWSGI_CHDIR / usr / рд╕реНрдерд╛рдиреАрдп / www / app2;
}
рд╕реНрдерд╛рди / appN {
uwsgi_pass unix: ///tmp/uwsgi.sock;
uwsgi_params рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ;
uwsgi_param SCRIPT_NAME / appN;
uwsgi_param UWSGI_SCRIPT рд╡реЗрдмрдк;
uwsgi_param UWSGI_CHDIR / usr / рд╕реНрдерд╛рдиреАрдп / www / appN;
}
рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ:
Webapp.xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓
UWSGI рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (s) webapp.xml рдХреЗ рд▓рд┐рдП xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ / usr / рд╕реНрдерд╛рдиреАрдп / www рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
webapp.xml:
<Uwsgi>
<рд╕реЙрдХреЗрдЯ> /tmp/uwsgi.sock </ рд╕реЙрдХреЗрдЯ>
<рдкреНрд░рдХреНрд░рд┐рдпрд╛> 1 </ рдкреНрд░рдХреНрд░рд┐рдпрд╛>
<рдЧреБрд░реБ />
<рд╕рдХреНрд╖рдо-рдереНрд░реЗрдб />
<uid> 80 </ uid>
<gid> 80 </ gid>
<pidfile> /var/run/uwsgi.pid </ pidfile>
</ Uwsgi>
Django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдРрдкреНрдк 1, рдРрдк 2, рдРрдкрдПрди рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╡реЗрдмрдПрдк рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рдХрд┐ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИред UWSGI рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдиреЗ webapp рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ webapp, рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ, WSGI рд╣реИрдВрдбрд▓рд░ рдХреЛ DjNO рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдРрдкреНрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдЕрдк рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
# - * - рдХреЛрдбрд┐рдВрдЧ: iso-8859-1 - * -
рдЖрдпрд╛рдд sys, рдУрдПрд╕
рдЖрдпрд╛рдд django.core.handlers.wsgi
sys.path.insert (0, '/ usr / рд╕реНрдерд╛рдиреАрдп / www / app1')
os.environ ['DJANGO_SETTINGS_MODULE'] = 'рд╕реЗрдЯрд┐рдВрдЧ'
рдЖрд╡реЗрджрди = django.core.handlers.wsgi.WSGIHandler ()
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдпрд╣ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдм, рд╕рднреА Django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП uWSGI рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:
# uwsgi -s /tmp/uwsgi.sock -x /usr/local/www/webgi.sml
рдлреНрд░реАрдмреАрдПрд╕рдбреА рдкрд░, рд▓реЙрдиреНрдЪ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
/etc/rc.conf:
uwsgi_enable = "рд╣рд╛рдБ"
uwsgi_flags = "- x /usr/local/www/webapp.xml"
# usr / рд╕реНрдерд╛рдиреАрдп / рдЖрджрд┐ / uwsgi рдкреНрд░рд╛рд░рдВрдн
рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдпрд╣ Django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд░реНрдХрд┐рдВрдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, Nginx рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реЛрдХреЗрд╢рди рдЬреЛрдбрд╝реЗрдВ рдФрд░ Nginx рдФрд░ uWSGI рдбреЗрдореЙрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред
рд╕рд╛рд╣рд┐рддреНрдп рдмреНрд▓реЙрдЧреЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛
projects.unbit.it/uwsgi/wiki/RunOnNginxprojects.unbit.it/uwsgi/wiki/Exampleprojects.unbit.it/uwsgi/wiki/Emperorhttp://wiki.diphost.ru/Category:WSGIblog.zacharyvoase.com/2010/03/05/django-uwsgi-nginxwww.westphahl.net/blog/2010/4/8/running-django-nginx-and-uwsgiposterous.adambard.com/start-to-finish-serving-mysql-backed-django-wbrandonkonkle.com/blog/2010/sep/14/django-uwsgi-and-nginxwww.jeremybowers.com/blog/post/5/django-nginx-and-uwsgi-production-serving-millions-page-viewswww.cherokee-project.com/doc/cookbook_uwsgi.html