10.1、说明:

1、介绍:

创建Django项目,可以通过 pyhon3 manage.py runserver 0.0.0.0:8080 & 命令更方便地调试程序,但是如果当一个项目完成了之后,

需要部署到真正的环境,就需要考虑其稳定性。通过Nginx+Uwsgi部署自己的项目,nginx对于处理静态资源能力强,利用Nginx处理静

态资源请求,而对于动态请求,nginx将其转发到uwsgi处理,Uwsgi处理后台的动态请求后再转发给nginx,实现动静分离。

nginx+uwsgi动静分离架构图:

2、环境:

(1)服务器名称及ip地址配置:

服务器名称

ip地址

nfs01

172.16.1.31

(2)软件配置:

nfs01服务器上安装的 django 是 2.1.4 版本,python 是 3.7.0 版本。

实验用的django项目的python版本和django版本与服务器上安装的版本保持一致。

注意:如果服务器上的python版本、django版本与django项目所使用的python版本、django版本不符合,客

户端会包 500 的错误。浏览器显示 Internal Server Error,命令行可以看到如下错误

--- no python application found, check your startup logs for errors ---

10.2、安装uwsgi:

1、pip安装:

[root@nfs01 ~]# pip3.7 install uwsgi

2、编译安装(推荐):

(1)下载源码包:

[root@nfs01 ~]# mkdir -p tools/

[root@nfs01 ~]# cd tools/

[root@nfs01 tools]# wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz

(2)编译:

[root@nfs01 tools]# mkdir -p /application/

[root@nfs01 tools]# tar -xzf uwsgi-latest.tar.gz -C /application/

[root@nfs01 tools]# cd /application/uwsgi-2.0.18/

[root@nfs01 uwsgi-2.0.18]# python3.7 uwsgiconfig.py --build

[root@nfs01 uwsgi-2.0.18]# python3.7 setup.py install

#到此uwsgi编译完成,在/application/uwsgi-2.0.18目录下会生成一个uwsgi可执行文件

(3)创建软连接:

[root@nfs01 uwsgi-2.0.18]# ln -s /application/uwsgi-2.0.18/ /application/uwsgi

[root@nfs01 uwsgi-2.0.18]# ln -s /application/uwsgi-2.0.18/uwsgi /usr/bin/uwsgi

(4)查看uwsgi的版本:

[root@nfs01 uwsgi-2.0.18]# uwsgi --version

2.0.18

(5)查看uwsgi所使用的python版本:

[root@nfs01 uwsgi-2.0.18]# uwsgi --python --version

3、测试uwsgi:

(1)在/application/uwsgi-2.0.18/目录下创建foobar.py文件,代码如下:

def application(env, start_response):

start_response('200 OK', [('Content-Type','text/html')])

return [b"Hello World"]

(2)启动 uWSGI 来运行一个 HTTP 服务器,将程序部署在HTTP端口 8080 上:

[root@nfs01 uwsgi-2.0.18]# uwsgi --http 0.0.0.0:8080 --wsgi-file foobar.py

(3)在浏览器上进行访问:

10.3、使用uwsgi启动django项目:

1、上传一个django项目:

[root@nfs01 uwsgi-2.0.18]# mkdir -p /data/www/

[root@nfs01 uwsgi-2.0.18]# cd /data/www/

[root@nfs01 www]# rz -y

rz waiting to receive.

Starting zmodem transfer. Press Ctrl+C to cancel.

Transferring django_demo1.zip...

100% 171 KB 171 KB/sec 00:00:01 0 Errors

[root@nfs01 www]# unzip django_demo1.zip 1>/dev/null

[root@nfs01 www]# mv django_demo1.zip /tmp/

[root@nfs01 www]# tree -L 2 django_demo1/

2、使用uwsgi命令启动django项目:

(1)启动项目:

[root@nfs01 www]# cd django_demo1/

[root@nfs01 django_demo1]# uwsgi --http 0.0.0.0:8080 --file django_demo1/wsgi.py --static-map=/static=static

# 参数详解:

# --http:启动项目的IP地址和端口。

# --file:指定Django项目中wsgi文件,一般创建Django项目时自动生成。

# --static-map:指定静态资源存放的目录。

[root@nfs01 django_demo1]# ps -ef | grep uwsgi | grep -v grep

补充:直接ctrl+c就可将django项目服务杀死。

(2)在浏览器中访问:

3、使用uwsgi配置文件启动django项目:

(1)在/data/www/目录中创建script目录用于存放uwsgi的配置文件及相关启动文件:

[root@nfs01 django_demo1]# cd /data/www/

[root@nfs01 www]# mkdir -p script

[root@nfs01 www]# cd script/

[root@nfs01 script]# cat uwsgi.ini

[uwsgi]

chdir=/data/www/django_demo1

#指定django项目的目录。

module=django_demo1.wsgi:application

#指定django项目的应用程序=>/data/www/django_demo1/django_demo1/wsgi.py。

socket=/data/www/script/uwsgi.sock

#指定django项目的socket文件路径,用于和其它程序进行通信。

workers=1

#指定django项目的进程个数,根据cpu的核数来指定。

pidfile=/data/www/script/uwsgi.pid

#指定django项目的后台进程pid文件路径,用于标识当前django项目所处的状态。

http=0.0.0.0:8080

#指定django项目的ip地址和端口号。

static-map=/static=/data/www/django_demo1/static

#指定django项目的静态文件目录。

uid=root

gid=root

#指定启动django项目的用户名和用户组。

master=true

#django项目启用主进程。

vacuum=true

#当django项目服务停止的时候自动移除相应的 socket 文件和 pid 文件。

thunder-lock=true

#django项目序列化接受的内容。

enable-threads=true

#django项目启用线程。

harakiri=30

#django项目自动中断时间,单位是秒(s)。

post-buffering=4096

#django项目设置的缓冲。

daemonize=/data/www/script/uwsgi.log

#django项目的日志文件路径。

(2)启动django项目:

[root@nfs01 script]# uwsgi --ini uwsgi.ini

[root@nfs01 script]# ls

[root@nfs01 script]# ps -ef | grep uwsgi | grep -v grep

[root@nfs01 script]# netstat -tunlp | grep 8080

(3)在浏览器中进行访问:

(4)通过uwsgi 配置文件管理django项目的其它命令:

1)重载django项目:

[root@nfs01 script]# uwsgi --reload uwsgi.ini

2)停止django项目:

[root@nfs01 script]# uwsgi --stop uwsgi.pid

[root@nfs01 script]# ls

(5)将django服务加入开机自启动:

[root@nfs01 script]# echo "uwsgi --ini /data/www/script/uwsgi.ini" >>/etc/rc.local

10.4、nginx+uwsig启动项目,实现动静分离:

1、安装nginx:

(1)下载nginx:

[root@nfs01 script]# cd /root/tools/

[root@nfs01 tools]# wget http://nginx.org/download/nginx-1.16.0.tar.gz

(2)安装:

[root@nfs01 tools]# yum install openssl openssl-devel gcc pcre pcre-devel -y

[root@nfs01 tools]# useradd -M -s /sbin/nologin www

[root@nfs01 tools]# tar -xzf nginx-1.16.0.tar.gz

[root@nfs01 tools]# cd nginx-1.16.0/

[root@nfs01 nginx-1.16.0]# ./configure --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.16.0/

[root@nfs01 nginx-1.16.0]# make install

[root@nfs01 nginx-1.16.0]# ln -s /application/nginx-1.16.0/ /application/nginx

(3)启动nginx:

[root@nfs01 nginx-1.16.0]# cd /application/

[root@nfs01 application]# nginx/sbin/nginx

[root@nfs01 application]# netstat -tunlp | grep 80

(4)访问验证:

2、配置nginx:

(1)清理注释的配置:

[root@nfs01 application]# sed -ri.bak "/#|^$/d" nginx/conf/nginx.conf

(2)创建nginx的配置文件目录:

[root@nfs01 application]# mkdir nginx/conf/conf.d/ -p

(3)修改配置文件:

1)主配置文件:

[root@nfs01 application]# vim nginx/conf/nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

include conf.d/*.conf;

}

2)包含配置文件:

[root@nfs01 application]# cat nginx/conf/conf.d/uwsgi.conf

server{

listen 80;

server_name 0.0.0.0;

access_log logs/uwsgi_access.log;

error_log logs/uwsgi_error.log;

charset utf-8;

gzip on;

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模块,它是用来和uwsgi进行通讯的。

uwsgi_connect_timeout 30;

# uwsgi的超时时间。

uwsgi_pass unix:/data/www/script/uwsgi.sock;

# uwsgi的socket文件所在路径,客户端所有的动态请求都会直接传给它。

}

# 静态文件路径

location /static/ {

alias /data/www/django_demo1/static/;

# 注意这里的静态文件目录后面必须要加左斜杠,否则会找不到静态资源。

index index.html index.htm;

}

# 错误页面配置

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

(4)验证nginx配置文件:

[root@nfs01 application]# nginx/sbin/nginx -t

3、重启nginx服务:

[root@nfs01 application]# nginx/sbin/nginx -s reload

4、将nginx服务加入到开机自启动:

[root@nfs01 application]# echo "/application/nginx/sbin/nginx" >>/etc/rc.local

5、在浏览其中访问:

10、nginx+uwsgi+django部署(动静分离)的更多相关文章

  1. Nginx+uWSGI+Django部署web服务器

    目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py ...

  2. nginx+uwsgi+django 部署原理

    python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出 ...

  3. nginx+uwsgi+django部署流程

    当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uws ...

  4. ubuntu16.4+nginx+uwsgi+Django 部署上线

    Nginx概述 Nginx是一款轻量级的HTTP服务器,采用事件驱动和异步非阻塞处理方式框架,这让其具有极好的IO性能,市场用于服务端的反向代理和负载均衡 Nginx优点 高并发连接:官方测试Ngin ...

  5. 在ubuntu16上进行nginx+uwsgi+django部署的简要步骤

    网上有很多部署教程,说了一大堆,遇到坑还是要自己一个个解决,这里有几个比较重要的坑大家一定要注意. 1.首先要安装python和python-dev环境,如果没有安装python-dev后面安装有些依 ...

  6. ubantu+nginx+uwsgi+django部署

    1.更新ubantu的apt apt-get update 必要时候更新系统:      apt-get upgrade 2.远程连接服务器 ssh 用户名@ip 上传代码 :        scp ...

  7. 使用docker-compose+nginx+uwsgi+django部署项目

    (1)centos上下载docker + docker-compose (2)基础目录 (3)首先创建一个纯净的python+django+uwsgi的镜像,便于后期使用(也可不用创建,后期docke ...

  8. Ubuntu-18.04.2系统 Nginx+uWSGI+Django 部署生产环境

    首先准备环境: 1.使用虚拟机 VMware Workstation Pro (也可以不用),安装Ubuntu-18.04.2系统 开始搭建环境 (因为ubuntu18.4.2集成了python3.6 ...

  9. Nginx+uwsgi+django部署项目

    nginx把请求转发给uwsgi,然后把uwsgi处理得到的结果返回给浏览器. 安装nginx: yum -y install gcc pcre-devel openssl-devel #安装Ngin ...

随机推荐

  1. [DB] Hadoop免密登录原理及设置

    情景: 现有两台电脑bigdata111.bigdata112,bigdata111想免密码登录bigdata112 过程: 1.bigdata111生成公钥(用于加密,给别人)和私钥(用于解密,自己 ...

  2. Linux(CentOS7)下二进制安装MySQL5.7.26

    记录一下自己在 CentOS7 下二进制安装 MySQL5.7.26 的过程,之前使用 Linux(CentOS7)下rpm安装MySQL8.0.16 之后发现 rpm 方式安装不利于维护,也不利于单 ...

  3. linux小本

    登陆CentOS 2.重启系统:reboot 3.设置客户机显示器分辨率 4.查看IP地址:ip addr 5.切换目录:cd 6.查看目录:ls 7.复制文件:cp 8.编辑文件:vi cd /et ...

  4. pika详解(二) BlockingConnection

    pika详解(二) BlockingConnection   本文链接:https://blog.csdn.net/comprel/article/details/94592348 版权 Blocki ...

  5. Go语言的GOPATH详解

    在GOLAND中设置GOPATH: 设置好路径后,并不是直接在这个路径下面写代码文件就行了 GO会识别GOPATH下的src目录,而真正的引用的包名,是src下的目录名,然后才是代码模块名 目录结构如 ...

  6. Jmeter- 笔记3 - Jmeter录制功能 / 抓包

    http代理服务器录制脚本: 1.新建线程组 2.添加 http代理服务器 元件 3.http代理服务器修改: 1)端口:8899,任意给个无占用的 2)目标控制器:改成刚刚新建的线程组.不改就录制会 ...

  7. Python+Selenium学习笔记7 - os模块

    os模块是关于文件/目录方面的 导入语法 import os 相关方法 path.abspath()   用来获取当前路径下的文件 os.path.abspath('checkbox.html')  ...

  8. 异步编程CompletableFuture

    多线程优化性能,串行操作并行化 串行操作 // 以下2个都是耗时操作 doBizA(); doBizB(); 修改变为并行化 new Thread(() -> doBizA()).start() ...

  9. 短波红外(SWIR)相机camera

    短波红外(SWIR)相机camera AVs Can't Drive Everywhere. Can TriEye's SWIR Camera Help? TriEye的短波红外(SWIR)摄像机能否 ...

  10. 特斯拉Tesla Model 3整体架构解析(上)

    特斯拉Tesla Model 3整体架构解析(上) 一辆特斯拉 Model 3型车在硬件改造后解体 Sensors for ADAS applications 特斯拉 Model 3型设计的传感器组件 ...