结合Nginx+Uwsgi部署Django项目

大致想法以及背景:

刚开始创建Django项目,可以通过runserver命令更方便地调试程序,但是如果当一个项目完成了之后,需要部署到真正的环境,就需要考虑其稳定性。
之前在写毕设的时候,写过一个自动化运维监控的项目,部署在自己的阿里云服务器上。那时候没啥经验,直接一个(pyhon runserver 0.0.0.0:8888 &)让项目在后台自己跑。所以对一些项目挂掉,数据库连接失败等问题不能够及时定位解决。
所以现在花点时间结合Nginx+Uwsgi部署自己的项目,利用Nginx处理静态资源请求以及Uwsgi处理后台的动态请求。

1、安装Uwsgi

pip安装:pip install uwsgi

源码包安装:wget https://files.pythonhosted.org/packages/a2/c9/a2d5737f63cd9df4317a4acc15d1ddf4952e28398601d8d7d706c16381e0/uwsgi-2.0.17.1.tar.gz
(解压文件,安装编译)

2、使用Uwsgi启动项目

2.1、使用uwsgi命令启动项目

cd /data/wwwroot/DevOps/ (进入Django项目,以下是项目的目录树)

uwsgi --http 0.0.0.0:8888 --file mysite/wsgi.py --static-map=/static=static
参数详解:--http:启动项目的IP地址和端口 --file:指定Django项目中wsgi文件,一般创建Django项目自动生成,--static-map:指定静态资源存放的目录

启动成功!!!

2.2、使用配置文件启动Django项目

创建uwsgi.ini配置文件

[uwsgi]
chdir=/data/wwwroot/DevOps/
module=mysite.wsgi:application
socket=/data/wwwroot/DevOps/uwsgi/uwsgi.sock
workers=5
pidfile=/data/wwwroot/DevOps/uwsgi/uwsgi.pid
http=192.168.1.1:8888
static-map=/static=/data/wwwroot/DevOps/static
uid=root
gid=root
master=true
vacuum=true
thunder-lock=true
enable-threads=true
harakiri=30
post-buffering=4096
daemonize=/data/wwwroot/DevOps/uwsgi/uwsgi.log

uwsgi.ini配置文件参数重点详解:
vacuum:自动移除unix Socket和pid文件当服务停止的时候;
thunder-lock:序列化接受的内容
enable-threads:启用线程
harakiri:设置自中断时间
post-buffering:设置缓冲

3、结合Nginx+Uwsgi启动项目

对于安装Nginx,本节忽略不讲,主要是针对安装玩Nginx,修改配置文件,添加虚拟主机。同时在前文也提到了,nginx对于处理静态资源能力强,而对于动态请求,nginx将其转发到uwsgi处理。
添加配置文件到/etc/nginx/conf.d/目录下

server{
                listen 80;
                server_name 192.168.1.1;
                access_log /data/wwwroot/DevOps/uwsgi/nginx/access.log main;
                error_log /data/wwwroot/DevOps/uwsgi/nginx/error.log;
                charset utf-8;
                gzip_types  text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png  application/octet-stream;
location / {
                include uwsgi_params;
                uwsgi_connect_timeout 30;
                uwsgi_pass unix:/data/wwwroot/DevOps/uwsgi/uwsgi.sock;
}
location /static/{
        alias  /data/wwwroot/DevOps/static/;
        index index.html index.htm;
}
}

重要参数详解:

gzip_types:支持的压缩类型
uwsgi_connect_timeout:设置Uwsgi超时时间
uwsgi_pass:指定uwsgi的sock文件处理动态请求
使用(nginx -t)命令检测nginx配置是否出错,然后重启nginx(systemctl restart nginx)

4、需要注意的几点:

4.1、在启动项目之后,再日志文件中出现了IOError: write error 问题

问题解决的方法:

通过查阅资料和整理文档:
“But uWSGI logs these things for misbehaving clients. A write error would happen if the upstream got disconnected, but the backend process was still attempting to write to the closed socket.”
在配置文件最后添加:

ignore-sigpipe = true
ignore-write-errors = true
disable-write-exception = true

4.2、Nginx在等待接收信息的过程会出现504错误

问题解决方法:

由于接受uwsgi的应答的事件超时,所以发生504错误,通过修改nginx的uwsgi超时连接时间就可以解决此类问题。

uwsgi_send_timeout 600; # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
uwsgi_connect_timeout 600; # 指定连接到后端uWSGI的超时时间。
uwsgi_read_timeout 600; # 指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间。 

原文地址:http://blog.51cto.com/mbb97/2151933

时间: 2024-10-11 11:57:37

结合Nginx+Uwsgi部署Django项目的相关文章

使用Nginx+uWSGI部署Django项目

1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi ln -s /usr/local/python3/bin/uwsgi /usr/local/bin/uwsgi #建立软链接 uwsgi --version #检查安装成功 3.基于uwsgi+django项目部署 django项目目录结构(orange_manage为app): uwsgi --ht

nginx+uwsgi部署django项目

操作可参考http://www.linuxyw.com/353.html (nginx+uwsgi+django+python环境部署文档) 这里只说明几点我的配置 环境: Nginx版本:1.7.9 Django版本: 1.6.8 Python版本:2.7.5 Uwsgi版本:2.0.9 安装MySQL-python: 最好源码安装,yum install -y MySQL-python可能因为路径问题import MySQLdb失败,下载地址: http://sourceforge.net/

nginx + uwsgi 部署 Django+Vue项目

nginx + uwsgi 部署 Django+Vue项目 windows 本地 DNS 解析 文件路径 C:\Windows\System32\drivers\etc 单机本地测试运行方式,调用django第三方的wsgifef单机模块,性能很低 python3 manage.py runserver 0.0.0.0:8000 使用uwsgi 去启动django项目,支持并发更多 准备前后端代码 先从vue前端搞起 解决node环境 更改vue发送请求的接口地址, 这个vue发送的地址,应该是

nginx+uwsgi部署django的简单介绍

1.安装django  环境ubuntu:sudo pip install django 2.新建一个django项目 命令:django-admin.py startproject  wlwebsite1 启动项目:python manage.py runserver 0.0.0.0:8000 浏览器查看,如下显示即正常 3.django项目有了,现在安装uwsgi 环境ubuntu:sudo pip install uwsgi 安装成功后看uwsgi版本:uwsgi --version ws

使用uWSGI部署django项目

先说说什么是uWSGI吧,他是实现了WSGI协议.uwsgi.http等协议的一个web服务器,那什么是WSGI呢? WSGI是一种Web服务器网关接口.它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范(协议). 还有一种wsgi,uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信.uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information). 部署步骤: 1.

Debian7下初次尝试Nginx+Uwsgi部署Django开发环境

之前一直都用的是新浪的SAE,但是由于各种限制,各种不爽,终于下定决心开始折腾VPS,于是在搬瓦工上买了个年付VPS,开始折腾之旅. 由于对Linux一窍不通,所以不知道如何在Linux上部署开发环境,因此事先查询了好多的资料,找到几篇可以参考的文章,由于系统版本,Nginx版本,Python版本不同,配置的情况可能也略有不同,所以先照着别人的折腾看看. debian一般默认就安装有python,所以省略这一步,不过有些系统python版本太低,需要先升级Python到需要的版本,怎么升级就不介

uwsgi部署django项目—报内部错误

在django项目目录下建立uwsgi.ini文件: [uwsgi] #使用nginx连接时使用 #socket=127.0.0.1:8080 #直接做web服务器使用 http=127.0.0.1:8080 #项目目录 chdir=/Users/userName/PycharmProjects/linaxi #项目中wsgi.py文件的目录,相对于项目目录 wsgi-file=linaxi/wsgi.py processes=4 threads=2 master=True pidfile=uw

使用nginx+uwsgi部署django应用

使用过django来开发网页的人都知道,django的manage.py自带了一个runserver命令,这个命令使得本地调试非常方便,然而在真正上线网站时对并发能力的支持非常重要,本教程教你用nginx+uwsgi来将django应用部署在服务器上. 教程: 1.首先保证django项目在本地调试完毕.(这是废话) 2.在服务器安装好nginx和uwsgi两个软件.(yum或者apt-get) 3.找到nginx.conf文件(位置在/usr/local/nginx/conf/nginx.co

生产环境使用Nginx+uwsgi部署Diango项目

环境:CentOS6.5 + Nginx1.11.5 + Python3.5.2 1. 安装基础软件包 yum install -y zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel  2. 安装Python3.5.2版本 源码包下载,戳我 wget https://www.python.org/ftp/python/3.5.2/Python-3.5