Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deploying Django on nginx

hi I need to deploy a django application on nginx . I install nginx and python-flup in my fedora I try this guide but nginx can't read my static file . in my project dir I used this command to run ​fastcgi:

[nima@ca005 bank]$ python ./manage.py runfcgi host=127.0.0.1 port=8080
[nima@ca005 bank]$ 

and this is my sample_project.conf in /etc/nginx/sites-enable/ :

server {
    listen 80;
    server_name 192.168.16.161;
    access_log /var/log/nginx/sample_project.access.log;
    error_log /var/log/nginx/sample_project.error.log;

    # https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-in-production
    location /static/ { # STATIC_URL
        alias /home/nima/workspace/bank/media/; # STATIC_ROOT
        expires 30d;
    }

    location /media/ { # MEDIA_URL
        alias /home/nima/workspace/bank/meli/static/; # MEDIA_ROOT
        expires 30d;
    }

    location / {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:8080;
        fastcgi_split_path_info ^()(.*)$;
    }
}

nginx.conf:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user              nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enable/*;



}

what should I do?!

like image 493
nim4n Avatar asked Jul 07 '13 10:07

nim4n


2 Answers

Firstly, if you chose to use nginx, then use gunicorn, its the best option out there, and if you so wish to use Apache, then you use mod_wsgi.

This will show you how to use gunicorn. Just to tell you how well it serves, gunicorn is used by Instagram, because they claim that it gives them better performance.

Setting up gunicorn is very simple and easy to do, and this tutorial here, gives you all the things necessary to make it happen very quickly.

This is their website.

like image 149
Games Brainiac Avatar answered Sep 28 '22 05:09

Games Brainiac


Try this link using fastcgi mode
Or this link using uwsgi mode

Edit: fcgi mode is deprecated in django and will be removed. uwsgi is the favourable mode. One of the many references, check this

like image 39
ashish Avatar answered Sep 28 '22 04:09

ashish