Django 部署 ubuntu uwsgi nginx 处理 静态文件

在说正事之前先补充下概念:

有太多的文章告诉我们nginx uwsgi django 这些东西怎么用了,太多的人知道这些东西的怎么使用,怎么配置,怎么优化,但是还是有一部分人比如我这种水货不知道这些东西到底是啥,为啥一个项目的发布要经过这么多层级,他们每一层都做了什么,都是必须的吗

1 首先nginx 是对外的服务接口,外部浏览器通过url访问nginx,

2nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,

如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,uwsgi 接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,wsgi 根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,uwsgi接收wsgi 发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。

3要知道第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程,但是要考虑到某些情况

1 安全问题,程序不能直接被浏览器访问到,而是通过nginx,nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在nginx上加上安全性的限制,可以达到保护程序的作用。

2负载均衡问题,一个uwsgi很可能不够用,即使开了多个work也是不行,毕竟一台机器的cpu和内存都是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡。

3静态文件问题,用django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个静态文件的处理都直接由nginx完成,静态文件的访问完全不去经过uwsgi以及其后面的东西。

这就是这几者之间的关系。from:http://blog.csdn.net/u014761344/article/details/40146597

正文

累死宝宝了,从下午搞到现在终于搞定了,记下来这个大坑,以防其他同学踩到!

settings.py中的debug改为False
python-dev是系统级的软件包,包含了用于构建Python模块的开发工具。

python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic
sudo apt-get install python-dev

用sudo apt-get install nginx 安装nginx
用sudo pip install uwsgi –upgrade 来安装uwsgi

seeting.py 里面ALLOWED_HOSTS = [‘*’]
设置超级用户
python manage.py createsuperuser

我的项目名devnav,结构如图,我只说干货
这里写图片描述

1.把项目放在home/ubuntukylin/下,再在项目目录下,创建 devnav_uwsgi.ini,再sudo uwsgi –ini devnav_uwsgi.ini来启动

# Django-related settings
[uwsgi]
socket = :8001

# the base directory (full path)
chdir           = /home/ubuntukylin/devnav

# Django s wsgi file
module          = devnav.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

2.新建nginx配置devnav_nginx.conf,再在/etc/nginx/sites-enabled里面创建软链接

server {
    listen      8088;
    server_name 127.0.0.1;
    charset     utf-8;

    client_max_body_size 75M;

    location /upload_picture {
        alias /home/ubuntukylin/devnav/upload_picture;
    }

    location /static {
        alias /home/ubuntukylin/devnav/static;
    }

    location / {
        include uwsgi_params;
    uwsgi_pass 127.0.0.1:8001;

    }
}

uwsgi_pass 127.0.0.1:8001这么设置是和uwsgi沟通的,可以用soket代替的

3.修改项目文件夹的权限,让nginx能读到静态文件,返回403就是权限问题,要是返回404就是路径配置问题,sudo service nginx restart重启服务即可

坑太深,其他宝宝想深入了解还可以看下这几篇文章,有参考意义:
http://code.ziqiangxuetang.com/django/django-nginx-deploy.html
http://www.cnblogs.com/jhao/p/6071790.html
http://www.cnblogs.com/fnng/p/5268633.html
https://yq.aliyun.com/articles/36339
http://blog.csdn.net/sinat_21302587/article/details/74059078
http://m.blog.csdn.net/wenxuansoft/article/details/8580508
http://www.cnblogs.com/qwj-sysu/p/4264206.html

有问题的留言

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值