nginx+uwsgi部署django及问题记录

step1:原理介绍

  1. nginx是什么?
    在这里插入图片描述

    关于nginx的理解,目前还比较浅。看到这篇文章不错,可以参考下:https://www.cnblogs.com/wcwnina/p/8728391.html
    我的理解就是,nginx是一个高性能的,通过HTTP协议提供各种网络服务的轻量级web服务器。其特点是占用内存少,稳定性高,并且并发能力强等。

  2. uwsgi、uWSGI、WSGI的关系
    在这里插入图片描述
    uWSGI是一个实现了uwsgi、WSGI协议的python web server。
    WSGI是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口,可以理解为是一种协议。
    uwsgi,同WSGI一样是一种协议,不过它是一种线路协议而不是通信协议。从上面的图中也可以看出,uwsgi通常用在uWSGI与其他网络服务器之间的数据通信。

  3. nginx+uwsgi+django的整体架构
    在这里插入图片描述

从上图可以看出,浏览器发出一个HTTP请求到nginx之后,由nginx通过uwsgi协议(这里存疑,也有人说是通过socket套接字进行通信)转发给uWSGI,uWSGI转发给后台的django服务,由此实现通过nginx代理uWSGI服务。

step2:环境准备&部署

  1. 基础环境:Ubuntu 20.04 server 64bit (64-bit) + python3
  2. 安装django:pip3 install django
  3. cd /home
  4. 在home目录下创建一个django项目:django-admin startproject djangoProject
  5. 进入到项目根目录下,执行python3 manage.py runserver 0.0.0.0:8000
    如果没有报错,一般可以通过你本地的localhost:8000来访问。也可以通过命令行:curl localhost:8000。如果是通过阿里云或华为云租赁的服务器部署的django,本地想要访问的时候,需要先修改django的setting.py文件,修改ALLOWED_HOSTS参数为:ALLOWED_HOSTS = [‘*’] # 允许全部地址访问django。也可以只允许你自己可以访问。
    这时候你已经拥有了一个可以正常启动的django项目。
  6. 安装uwsgi:pip3 install uwsgi。我用的ubuntu可以正常安装,没有报错。之前用的centos8,安装uwsgi的时候各种问题,后面再说。
  7. 测试uwsgi的启动,命令行启动:
uwsgi --http 0.0.0.0:8002 --chdir /home/djangoProject/ --wsgi-file djangoProject/wsgi.py --static-map=/static=static --master --processes 4 --threads 2    

参数说明:
–chdir:项目根目录
–wsgi-file:django项目wsgi.py文件的相对地址
–static-map:静态文件映射
8. 进入django项目的根目录,新建一个脚本文件夹:mkdir script # 用来存放uwsgi启动/日志相关的文件。
9. 进入script,新建uwsgi.ini文件,vim uwsgi.ini

[uwsgi]
#项目目录
chdir=/home/djangoProject
#指定项目application 项目下同名目录下的wsgi.py文件
module=djangoProject.wsgi
#指定sock的文件路径(nginx转发http的目的端口)
socket=0.0.0.0:8000
# 指定IP端口,web访问入口
http=0.0.0.0:8010
# 进程个数
processess = 2
# 线程数
theads = 2
#指定启动时的pid文件路径
pidfile=/home/djangoProject/script/uwsgi.pid
#指定ip及端口(配置nginx就不需要单独启动uwsgi需要填写)
#http=0.0.0.0:8000
#启动uwsgi的用户名和用户组
#uid=root
#gid=root
#启用主进程
master=true
# 启用线程
enable-threads=true
#自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
#设置日志目录
daemonize=/home/djangoProject/script/uwsgi.log
# 日志文件的权限权限不能太低,那样的话就无法写入了。
logfile-chmod = 666
#不记录信息日志,只记录错误以及uwsgi内部消息
disable-logging=true
#buffer-size=65536

  1. 现在我们可以通过配置文件启动uwsgi了:uwsgi --ini uwsgi.ini
    在这里插入图片描述
    如果你正常启动的话,可以通过浏览器的8000端口访问:
    在这里插入图片描述
  2. 安装nginx:apt-get install nginx # 有的可能需要root权限,由于我是root直接登录的,所以直接执行安装
    正确安装如下:
    在这里插入图片描述
    命令行执行:nginx -v
    在这里插入图片描述
    表示安装成功
  3. 进入nginx安装路径:cd /etc/nginx/
  4. 将原配置文件备份一下:mv nginx.conf nginx.conf.bak,然后新建一个nginx.conf配置文件,内容如下:
worker_processes 1;
events {
    worker_connections 1024;
}
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    upstream django {
        server 你的ip:8000;  # 该端口号一定要和之前uwsgi的那个文件里的socket对应的端口一致。
    }
    server {
        listen 80;
        server_name 你的ip:80;  # 这儿如果你有域名的话,就将127.0.0.1:80换成你的域名,没有的话就用这个。
        charset utf-8;
        location /static {
        alias /home/djangoProject/static;  #  静态文件的路径(注意,这儿的allstatic是执行了python manage.py collectstatic之后,自动产生的一个目录,该目录下收集了你>项目中所有的静态文件。其实就是将你的静态文件复制了一遍过来)
        }
        location / {
         # nginx转发动态请求到uWSGI
        include /etc/nginx/uwsgi_params;
        uwsgi_connect_timeout 20;
        uwsgi_pass 你的ip:8000;
       }
    }
}

  1. nginx常用命令:
./nginx				# 启动
./nginx -s reload	# 重载
./nginx -s stop		# 停止
  1. 到这时候,你的nginx+uwsgi+django项目已经基本部署成功了,可以通过页面ip:80端口来访问,同时查看对应的日志,可以看到访问的记录。
    nginx日志路径:/var/log/nginx
    uwsgi日志路径:/home/djangoProject/script

step3:问题及使用到的小知识记录

  1. 端口占用情况
    1.1 根据端口号查询:lsof -i:端口号
    1.2 根据程序查询:netstat -ap|grep 程序名
  2. 安装uwsgi出错:
    2.1 一开始用的是centos8,自带python3,但是缺少python依赖,解决如下:https://blog.csdn.net/weixin_45503064/article/details/123974713?spm=1001.2014.3001.5502
    2.2 centos6/7,由于是python2的环境,想切换成python3的环境,弄了挺久的,但是失败了。
    2.3 由于centos已经停止维护了,在时候centos8的时候真的是各种问题,包括yum源,切换阿里云镜像找不到对应的镜像地址报404。。层出不穷。最后不得不切换成ubuntu20。
  3. 找不到nginx路径的时候,可以:whereis nginx,每个目录下找找就找到了。
  4. 查看日志:tail -f access.log
  5. uwsgi报异常:invalid request block size: 21573 (max 4096)…skip
    原因:uwsgi启动的时候默认分配一个小的buffer(约4k),可以在配置文件里进行添加参数:buffer-size=65536
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值