10、nginx+uwsgi+django部署(动静分离)
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部署(动静分离)的更多相关文章
- Nginx+uWSGI+Django部署web服务器
目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py ...
- nginx+uwsgi+django 部署原理
python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出 ...
- nginx+uwsgi+django部署流程
当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uws ...
- ubuntu16.4+nginx+uwsgi+Django 部署上线
Nginx概述 Nginx是一款轻量级的HTTP服务器,采用事件驱动和异步非阻塞处理方式框架,这让其具有极好的IO性能,市场用于服务端的反向代理和负载均衡 Nginx优点 高并发连接:官方测试Ngin ...
- 在ubuntu16上进行nginx+uwsgi+django部署的简要步骤
网上有很多部署教程,说了一大堆,遇到坑还是要自己一个个解决,这里有几个比较重要的坑大家一定要注意. 1.首先要安装python和python-dev环境,如果没有安装python-dev后面安装有些依 ...
- ubantu+nginx+uwsgi+django部署
1.更新ubantu的apt apt-get update 必要时候更新系统: apt-get upgrade 2.远程连接服务器 ssh 用户名@ip 上传代码 : scp ...
- 使用docker-compose+nginx+uwsgi+django部署项目
(1)centos上下载docker + docker-compose (2)基础目录 (3)首先创建一个纯净的python+django+uwsgi的镜像,便于后期使用(也可不用创建,后期docke ...
- Ubuntu-18.04.2系统 Nginx+uWSGI+Django 部署生产环境
首先准备环境: 1.使用虚拟机 VMware Workstation Pro (也可以不用),安装Ubuntu-18.04.2系统 开始搭建环境 (因为ubuntu18.4.2集成了python3.6 ...
- Nginx+uwsgi+django部署项目
nginx把请求转发给uwsgi,然后把uwsgi处理得到的结果返回给浏览器. 安装nginx: yum -y install gcc pcre-devel openssl-devel #安装Ngin ...
随机推荐
- 使用alpine为基础镜像Q&A
作为go应用存在二进制文件却不能执行 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file 或 standard_init_linux.go:211: ex ...
- 源码安装Apache(httpd)
[RHEL8] !!!测试环境我们首关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# sys ...
- Linux中级之ansible配置(playbook)
一.playbooks 如果用模块形式一般有幂等性,如果用shell或者command没有幂等性 playbooks相当于是shell脚本,可以把要执行的任务写到文件当中,一次执行,方便调用 task ...
- 1.5linux用户权限相关命令
用户权限相关命令 目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01. 用户 和 权限 的基本概念 1.1 基本概念 用户 是 Linux 系统工作中重要 ...
- 1.4linux文件和目录常用命令
文件和目录常用命令 目标 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 ...
- 治理对象ing
计算治理项包括产出表未被读.暴力扫描.数据膨胀.数据倾斜.出错节点.导入为空和输入为空. 存储的治理项包括生命周期过长.未管理表.废弃表.空表.逻辑未管理表.逻辑废弃表.逻辑空表和黑盒物化空表.
- Jenkins 基础篇 - 任务创建
前面了解了 Jenkins 上各种任务的区别后,我们就来实践应用下,先创建一个[文件夹]类型的任务,将我们目前的一些基础的演示任务[移动]到文件夹里面去,这样可以先做个简单的分类. 新建一个[文件夹] ...
- vue相关面试知识点总结
vue v-for循环中为什么要用key?为什么index不能作为key? key 的特殊 attribute 主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes.如 ...
- Mybatis3详解(十四)----Mybatis的分页
1.前言 在前面学习mybatis的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,但是前面都是简单的案例,所以查询的数据量不是很大,自然查询时没有任何压力,但是如果在实际的项目 ...
- js动态加载HTML元素时出现的无效的点击事件
项目中列表数据中隐藏着详情数据, 图一: 详情数据是:根据当前行的数据作为参数,通过ajax请求到后台返回的数据,再根据返回的结果动态生成HTML页面 图二: js文件中的这些js的点击事件无效: j ...