Centos7部署django+uwsgi+nginx 转载: https://www.cnblogs.com/wztshine/p/16172154.html
Centos7部署django+uwsgi+nginx
Django + uwsgi + nginx on Centos7
wsgi 介绍
本小节来自 廖雪峰 wsgi 一文
一个Web应用的本质就是:
- 浏览器发送一个HTTP请求;
- 服务器收到请求,生成一个HTML文档;
- 服务器把HTML文档作为HTTP响应的Body发送给浏览器;
- 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。
因此,一个最简单的静态网站就是一堆固定的 HTML 文档,然后用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。Apache、Nginx、Lighttpd等这些常见的静态服务器就是干这件事情的。
但是 Django 是动态的生成 HTML 文档的,如果要动态生成HTML,就需要把上述步骤自己来实现:接受HTTP请求、解析HTTP请求、发送HTTP响应... ,为了省去这些操作,python 引入了 WSGI:Web Server Gateway Interface
WSGI接口只要求 Web 开发者实现一个函数,就可以响应HTTP请求。我们来看一个最简单的Web版本的“Hello, web!”:
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')]) # 发送响应码和请求头
return [b'<h1>Hello, web!</h1>'] # 发送响应的 Body
上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
- environ:一个包含所有 HTTP 请求信息的
dict对象; - start_response:一个发送HTTP响应的函数。
在application()函数中,调用 start_response 便可完成响应。start_response 有两个参数:一个是HTTP响应码,一个是一组 list 表示的 HTTP Header。
有了WSGI,我们关心的就是如何从environ这个dict对象拿到HTTP请求信息,然后构造HTML,通过start_response()发送Header,然后返回 Body。
整个application()函数本身没有涉及到任何解析HTTP的部分,也就是说,底层代码不需要我们自己编写,我们只负责在更高层次上考虑如何响应请求就可以了。而且 application()函数不是我们手动调用的,它必须由 WSGI服务器来调用。Python 内置了一个 WSGI服务器,这个模块叫 wsgiref,它是用纯 Python 编写的 WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。
一个示例如下:
hello.py
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
body = '<h1>Hello, %s!</h1>' % (environ['PATH_INFO'][1:] or 'web')
return [body.encode('utf-8')]
server.py
# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数:
from hello import application
# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpd.serve_forever()
运行
python server.py,然后浏览器访问:localhost:8000
一些概念
WSGI:Web Server Gateway Interface,即Web服务网管接口,它是一种 Web 通信规范。
WSGI 服务器:实现了 wsgi 的服务器,可以和应用程序(如 Django)交互(Django 本身就带一个 wsgi 服务器,只不过该服务器通常仅用于开发测试,在部署项目时,要换成别的 wsgi 服务器)
WSGI Application:如 Django,flask,属于 WSGI 应用,需要配合 WSGI 服务器才能使用
uWSGI:它是一个 wsgi 服务器
nginx:Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强。它可以处理静态文件,并直接处理返回给客户端。

安装 python3.9
看完上面的教程后,创建虚拟环境,在虚拟环境中安装 django, uwsgi 两个库
django 设置
首先,将 django 项目放到 linux 服务器上。设置 django 项目的配置文件:/root/blog_site/blog/settings.py (这是本文项目配置文件的地址, blog_site 是项目文件夹)
修改 settings.py 中的如下三个参数:
DEBUG = False # 关闭调试模式
ALLOWED_HOSTS = ['*'] # 允许其他主机访问连接
STATIC_ROOT = BASE_DIR / 'static' # 添加这个变量,用来收集所有的静态资源
执行:
python manage.py collectstatic
将项目中所有用到的静态文件,统统收集到
STATIC_ROOT定义的文件夹中,这样,在 nginx 中配置这个目录,Nginx 就可以用来访问所有的静态资源。
Nginx 配置
nginx 安装和基础了解,查看:Nginx 简介
修改 nginx 的配置文件:
/usr/local/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;
upstream django { # 定义一组名为 django 的服务器池
server 0.0.0.0:8082; # 使用这个地址和 uwsgi 通信
}
server {
listen 80;
server_name ip_address; # 这里填写你自己服务器的 ip
charset utf-8;
gzip on;
gzip_disable "msie6";
gzip_proxied any;
gzip_min_length 1k;
gzip_comp_level 4;
access_log logs/host.access.log;
# 当用户访问 /media 和 /static 时,代表请求的是静态文件,我们可以直接给他们返回 /root/mysite/media 和 /root/blog_site/static 目录下的静态文件
location /media {
alias /root/mysite/media; # 指向 django 的 media 目录(绝对路径)
}
location /static {
alias /root/blog_site/static; # 指向 django 的 STSTIC_ROOT 目录(绝对路径)
}
# 当用户访问其他 url 时,我们需要让 nignx 将请求转发给 django 服务器池,然后找到池中的服务器 0.0.0.0:8082 来进行转发。
location / {
uwsgi_pass django; # 对 uWSGI 进行代理,目标是我们上面定义的 django 服务器池
include /usr/local/nginx/conf/uwsgi_params; # include uwsgi 的配置
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重新加载 ngnix 设置:
# 先进入你 nginx 安装目录的 sbin 下
./nginx -s reload
uwsgi 配置
先在 python 虚拟环境下安装 uwsgi 包
然后创建 /root/blog_site/uwsgi.ini: (注意这个配置文件,放到了 django 项目的根目录)
[uwsgi]
chdir = /root/blog_site # 项目的绝对路径
module = blog.wsgi:application # 指明 django 项目的 wsgi.py 文件路径,它包含了 application 函数,应用服务器用它与 django 代码交互
home = /root/Envs/venv # 指明你的 python 虚拟环境的目录
processes = 5 # 指明通过uwsgi,启动多少个进程
master = True # 配置启动管理主进程
# 使用 unix socket 与 nginx 通信;Nginx 配置中 uwsgi_pass 应指向这个 socket 文件
socket = 0.0.0.0:8082
# 在退出 uwsgi 环境后,自动清理文件
vacuum = true
当 WSGI 服务器(uWSGI、Gunicorn等)加载应用时,Django 需要导入配置模块。
Django 利用
DJANGO_SETTINGS_MODULE环境变量来决定使用哪个 settings.py若未设置该变量,
wsgi.py默认将其设置为your_site.settings,your_site即工程名字。你可以在
wsgi.py中强制设置os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"来重新指定要使用的配置文件
执行命令:
cd /root/blog_site
uwsgi --ini uwsgi.ini # 运行 uwsgi 服务器
完成,此时在浏览器访问:linux服务器的ip ,应该就能访问你的 django 网站了。
本文只能算是一个 demo,不能面向复杂的实际场景,尤其是 nginx 的配置。
可选部分
uwsgi 和 Nginx 有三种通信方式,上文中我们用的是:
# uwsgi.ini
socket = 0.0.0.0:8082
# nginx.conf
location / {
uwsgi_pass 0.0.0.0:8082; # 上文中用的其实是 uwsgi_pass django; 但效果是一样的。
include /usr/local/nginx/conf/uwsgi_params;
}
注意:uwsgi 服务器可以和 nginx 服务器运行在不同的机器上,只要把 IP 改成 uwsgi 服务器所在的主机就行。
其实还有其他方式来让两者通信。
两者在同一台机器上,可以用 socket 方式通讯:
# uwsgi.ini
socket=/run/uwsgi/project.sock
# nginx.conf
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass unix:/run/uwsgi/project.sock;
}
两者在不同机器上,可以使用 TCP socket 通信:
# uwsgi.ini
socket=0.0.0.0:8082
# nginx.conf
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass uswsgi的ip:8082;
}
两者在不同机器上,可以使用 http 通信:
# uwsgi.ini
http=0.0.0.0:8082
# nginx.conf
location / {
proxy_pass http://uwsgi的ip:8082;
}
Centos7部署django+uwsgi+nginx 转载: https://www.cnblogs.com/wztshine/p/16172154.html的更多相关文章
- [linux]centos7.4部署django+Uwsgi+Nginx
前言:我已经写了几个接口用来部署在服务器上的,首先选择django+Uwsgi+Nginx因为配置简单,比较符合python的简单操作功能强大的特点 然后对于django的一些版本在之前的文章写了 参 ...
- Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)
本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...
- Centos 7 下部署Django + uWSGI + Nginx
1.废话 之前利用Django写了些测试工具,一直是直接 python manage.py runserver 8081这么来用的.用户量不大,倒也不影响什么.uWSGI+Nginx的性能肯定要好,s ...
- 学习项目部署Django+uwsgi+Nginx生产环境部署
绪论 项目生产环境部署,是很重的一个知识点.第一,Django自带的服务器很简陋,由于测试和开发环境尚可,无法用于生产环境,保障安全性和可靠性.以及性能.此外,学习部署方式,还有利于了解生产部署后的项 ...
- 在UOS 上部署 django + uwsgi + nginx 流程
前言:这篇主要是流程,不喜勿喷,虽然我知道在部署过程中 参照博客写的越详细越好. 强大的百度会解决一切的 爬了诸多坑 ,心累,必须总结!! 最近 芯片封锁闹的很凶 支持国产!! UOS 统一操作系统 ...
- Ubuntu环境下部署Django+uwsgi+nginx总结
前言 这是我在搭建Django项目时候的过程,拿来总结记录,以备不时之需. 项目采用nginx+uwsgi的搭配方式. 项目依赖包采用requirements.txt文件管理的方式. 本地准备工作 确 ...
- 记 第一次linux下简易部署 django uwsgi nginx
1.首先确定django项目是跑起来的 2.装nginx uwsgi ,网上教程一大堆 3.uwsgi的配置了 我是通过ini启动的 随意找个顺手的文件夹创建uwsgi.ini文件 我是在/home ...
- CentOS7.4部署Python3+Django+uWSGI+Nginx
CentOS7.4部署Python3+Django+uWSGI+Nginx http://www.showerlee.com/archives/2590
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
- Django+uwsgi+nginx+angular.js项目部署
这次部署的前后端分离的项目: 前端采用angular.js,后端采用Django(restframework),他俩之间主要以json数据作为交互 Django+uwsgi的配置可以参考我之前的博客: ...
随机推荐
- java项目实践-tomcat实现用户登录-day17
目录 1. 安装 2. 初识tomcat 2. 创建tomcat项目 3. 启动之前 3. java jsp 4. Request Response对象的其他属性 5. 用户登录小功能 1. 安装 t ...
- JVM 性能调优 及 为什么要减少 Full GC
本文为博主原创,未经允许不得转载: 系统上线压测,需要了解系统的瓶颈以及吞吐量,并根据压测数据进行对应的优化. 对压测进行 JVM 性能优化,有两条思路: 第一种情况 : 使用压测工具 jmeter ...
- [转帖]oracle 11.2.0.4 rac集群等待事件enq: TM - contention
近期,一金融客户oracle 11.2.0.4 rac集群delete不当导致等待事件enq: TM - contention严重引起大范围会话堆积,记录的相关分析工作如下. 1.登录集群任意节点,查 ...
- [粘贴]TiDB Lightning 断点续传
https://www.bookstack.cn/read/tidb-6.1-zh/tidb-lightning-tidb-lightning-checkpoints.md 大量的数据导入一般耗时数小 ...
- [转帖]TiKV & TiDB相关笔记
https://www.jianshu.com/p/1141be233bb2 一.TiKV存储 简述 通过单机的 RocksDB,TiKV 可以将数据快速地存储在磁盘上:通过 Raft,将数据复制到多 ...
- [转帖]高性能分布式对象存储——MinIO实战操作(MinIO扩容)
https://juejin.cn/post/7132852449244610574 一.前言 MinIO的基础概念和环境部署可以参考我之前的文章:高性能分布式对象存储--MinIO(环境部署) 二. ...
- [转帖]阿里发布自研ARM服务器芯片倚天710,不对外出售
https://www.modb.pro/db/139440 10月19日,阿里巴巴旗下半导体公司平头哥发布自研云芯片倚天710,并宣称该芯片是业界性能最强的ARM服务器芯片,性能超过业界标杆20%, ...
- Python学习之十一_Windows获取硬件信息
Python学习之十一_Windows获取硬件信息 简介 网上找了一些方法简单整理了下,可以快速获取部分信息 包含机器名称等. 以及序列号相关 部分学习来源: https://blog.51cto.c ...
- [转帖]BF16 与 FP16 在模型上哪个精度更高呢
https://zhuanlan.zhihu.com/p/449345588 BF16 是对FP32单精度浮点数截断数据,即用8bit 表示指数,7bit 表示小数. FP16半精度浮点数,用5bit ...
- [转帖]Nginx 性能测试
https://plantegg.github.io/2022/10/10/Nginx%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/ 压测工具选择 wrk ,apache ...