Here we are going install a basic django application using
uwsgi application server and
nginx as load balancer. Requirements:
- django code location: /usr/local/lib
- django project: hello
Let install few packages we need:
apt-get -y install nginx uwsgi \ uwsgi-plugin-python python-django
Create a simple django application:
cd /usr/local/lib django-admin startproject hello
uWSGI
Create uWSGI configuration (file
/etc/uwsgi/apps-available/hello.yaml):
uwsgi: uid: www-data gid: www-data socket: /tmp/uwsgi-hello.sock plugins: http, python module: django.core.handlers.wsgi:WSGIHandler() pythonpath: /usr/local/lib chdir: /usr/local/lib/hello env: DJANGO_SETTINGS_MODULE=hello.settings
Enable this configuration and restart uwsgi server:
ln -s /etc/uwsgi/apps-available/hello.yaml \ /etc/uwsgi/apps-enabled/hello.yaml /etc/init.d/uwsgi restart
nginx
Create nginx site configuration (file
/etc/nginx/sites-available/hello):
upstream backend { server unix:///tmp/uwsgi-hello.sock; } server { location / { uwsgi_pass backend; include uwsgi_params; } location /static/admin/ { alias /usr/lib/pymodules/python2.6/django/contrib/admin/media/; access_log off; expires 7d; } location /static/ { alias /usr/local/lib/hello/static/; access_log off; expires 7d; } }
Remove default site, enable this configuration and restart nginx server:
rm /etc/nginx/sites-enabled/default ln -s /etc/nginx/sites-available/hello \ /etc/nginx/sites-enabled/hello /etc/init.d/nginx restart
nginx - uwsgi_cache
Web sites that serve almost static content (updated let say every 15 mins) can benefit by utilizing content caching:
... uwsgi_cache_path /var/cache/hello levels=1:2 keys_zone=NAME:15m inactive=5m; server { location / { uwsgi_pass backend; include uwsgi_params; uwsgi_cache NAME; uwsgi_cache_valid 200 302 15m; uwsgi_cache_key $request_uri; expires 15m; } ... }
If you experience performance issue with content rendering, overhead of framework internal time, have a willing to fine control content caching consider take a look at the following
post and
this one.
Great howto, thanks :)
ReplyDelete