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. 戴尔服务器如何配置远程管理卡(IDRAC9)适用于戴尔R740服务器

    戴尔服务器如何配置远程管理卡(IDRAC9)适用于戴尔R740服务器 转: DELL IDRAC9 该配置方法适合于所有戴尔14G服务器,包括全系列戴尔服务器,标准版适用于R440/R540/R640 ...

  2. Linux软件安装管理之——dpkg与apt-*详解

    Linux软件安装管理之--dpkg与apt-*详解 [Linux软件安装管理系列]- - 传送门: - -<Linux软件安装管理之--源码安装详解> - -<Linux软件安装管 ...

  3. ARP欺骗-断网小技巧

    警告:请勿用于非法用途,后果自负! 环境: 攻击方: Kali Linux 被攻击方: Windows XP 二者在同一局域网下 步骤 1.查看Windows的IP,联网状态 在Windows的cmd ...

  4. Linux_进程管理的基本概述

    一.进程的基本概述 1️⃣:进程是已启动的可执行程序的运行中实例 2️⃣:/proc目录下以数字为名的目录,每一个目录代表一个进程,保存着进程的属性信息 3️⃣:每一个进程的PID是唯一的,就算进程退 ...

  5. Hutool :一个小而全的 Java 工具类库

    Hutool 简介 Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的 ...

  6. MyBatis 高级查询之多对多查询(十一)

    高级查询之多对多查询 查询条件:根据玩家名,查询游戏信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据玩家名查询游戏 * @param name ...

  7. 90%的人都不知道的Node.js 依赖关系管理(上)

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/nodejs-dependency-mana ...

  8. Linux应用程序设计:用一种讨巧方式,来获取线程栈的使用信息

    面对的问题 对于线程的栈空间,相信各位小伙伴都不陌生.它有下面的这几项特性: > 1. 由操作系统分配固定的空间; > > 2. 使用一个栈寄存器来保存实时位置; > > ...

  9. 西门子 S7300 以太网模块连接组态王方法

    北京华科远创科技有限研发的远创智控ETH-YC模块,以太网通讯模块型号有MPI-ETH-YC01和PPI-ETH-YC01,适用于西门子S7-200/S7-300/S7-400.SMART S7-20 ...

  10. Python小白的数学建模课-A1.国赛赛题类型分析

    分析赛题类型,才能有的放矢. 评论区留下邮箱地址,送你国奖论文分析 『Python小白的数学建模课 @ Youcans』 带你从数模小白成为国赛达人. 1. 数模竞赛国赛 A题类型分析 年份 题目 要 ...