Django项目部署-uWSGI
- Django运维部署框架
- 整体部署架构
- web服务器与web应用服务器的区别
- 部署环境准备
- 安装python3
- 安装mariadb
- 安装Django和相关模块
- Django托管服务器uWSGI
- 使用uWSGI
- 配置
- 使用
Django运维部署框架
整体部署架构
操作系统: Linux 。优势:生态系统丰富,程序支持度高,如docker在linux的性能就比在windows好
数据库: Mariadb / Mysql。优势:开源,性能强劲的关系型数据库
前端web服务器: Nginx
后端app服务器: uWSGI
web服务器与web应用服务器的区别
Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL。web服务器专注http请求的处理与返回,通用性,如nginx和apache可以处理所有http请求然后返回静态文件内容
Web应用服务器是通过很多协议来为应用程序提供(serves)商业逻辑,具备解释服务端代码能力。Web应用服务器专注程序框架和动态内容的处理,专用性,如tomcat只能处理java程序而不能处理python程序
简单归纳一下两者的区别: web服务器专注提供静态文件内容,web应用(app)服务器专注提供动态内容
常见的 web服务器 、web应用服务器
软件名词 | 是否Web服务器 | 是否app服务器 |
---|---|---|
IIS | 是 | 是 |
Nginx | 是 | 否 |
Apache | 是 | 否 |
Tomcat | 是 | 是 |
Jetty | 是 | 是 |
WebSphere | 是 | 是 |
WebLogic | 是 | 是 |
uWSGI | 否 | 是 |
部署环境准备
安装python3
卸载原有Python3
whereis python3 |xargs rm -frv
重新安装python3,新建一个脚本文件
CentOS7-installpython3.sh
#!/bin/sh
yum groupinstall -y "Development tools"
yum install -y sqlite-devel ncurses-devel ncurses-libs zlib-devel mysql-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl-devel libffi-devel
curl -O -sSL https://npm.taobao.org/mirrors/python/3.8.10/Python-3.8.10.tar.xz && xz -d Python-3.8.10.tar.xz && tar xvf Python-3.8.10.tar
cd Python-3.8.10
./configure
make&& make install
cd ..
rm -rf Python-3.8.10 Python-3.8.10.tar.xz
执行该脚本
安装mariadb
可参考该篇文章:https://blog.csdn.net/qq_44614026/article/details/128735494?spm=1001.2014.3001.5502
安装Django和相关模块
导出项目需要安装的模块:pip freeze > requirements.txt
安装需要的模块:pip install -r requirements.txt
python manage.py runserver
检查django相关的模块是否安装好
Django托管服务器uWSGI
uWSGI(Web Server Gateway Interface)
- WSGI是Web服务器网关接口。属于web服务器和应用程序之间的通信协议
- uwsgi协议是uWSGI服务器使用的本地协议。它是一个二进制协议,可以携带任何类型的数据。属性线路协议。
- uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。
uWSGI文档中文版:https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Download.html
使用uWSGI
配置
安装 pip install uwsgi
在项目根目录下创建一个uwsgi.ini
文件
[uwsgi]
chdir =/data/project/autotpsite/
// 项目根目录
module = autotpsite.wsgi:application
// 指定wsgi模块下的application对象
http = 0.0.0.0:8888
// 对本机8888端口提供服务
master = true
// 主进程
pidfile = /data/project/autotpsite/uwsgi8888.pid
// pid 文件,用于脚本启动,停止该进程
daemonize = /data/project/autotpsite/uwsgi_server.log
// 日志文件
在sqtp
应用目录下的apps.py
文件下增加path配置
from django.apps import AppConfig
class SqtpConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'sqtp'
path = './autotpsite/sqtp' # 增加path配置
使用
启动: uwsgi xxx.ini # ini是配置文件,保存启动项参数
重启: uwsgi –-reload xxx.pid # pid是进程文件
停止: uwsgi --stop xxx.pid
执行命令uwsgi uwsgi.ini
,会提示[uWSGI] getting INI configuration from uwsgi.ini
,说明读取配置文件启动成功
通过ls
命令,可以看到项目根目录下生成了uwsgi8888.pid
和uwsgi_server.log
文件
在浏览器中输入IP:8888/login.html
,如果展示登录页面,说明项目部署成功
后续使用,如果出现-bash: uwsgi: command not found
则需要对uwsgi创建软连接
find / -name uwsgi
# 找到uwsgi执行位置
/usr/local/python3/bin/uwsgi
# uwsgi所在位置
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# 建立软链接
软连接起作用后,uwsgi命令可正常使用