24. Django部署:项目部署
一、基础概念
项目部署是指在软件开发完成后,将开发机器上运行的软件实际安装到服务器上进行长期运行
在安装机器上安装和配置同版本的环境【py、数据库等】
django项目迁移
sudo scp /home/tarena/django/mysite1 # 复制本地目录下文件夹 root@88.77.66.55:/home/root/xxx # 复制到指定ip目录 请输入root密码: # 输入root密码
用
uWSGI
代替python3 manage.py runserver
方法启动服务器配置nginx反向代理服务器
用nginx配置静态文件路径,解决静态路径问题
二、uWSGI网关接口配置
2.1. WSGI定义
WSGI(Python Web Server Gateway Interface)Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛使用
使用python3 manage.py runserver
通常只在开发和测试环境中使用
当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用WSGI
2.2. uWSGI定义
uWSGI是WSGI的一种,它实现了HTTP协议WSGI协议以及uwsgi协议
uWSGI协议功能完善,支持协议众多,在python web圈热度极高
uWSGI学习以学习配置为主
2.3. uWSGI安装
Ubuntu执行:
sudo pip3 install uwsgi==2.0.18 -i https://pypi.tuna.tsinghua.edu.cn/simple/
检查是否成功安装
sudo pip3 freeze|grep -i 'uwsgi'
如果成功安装,则会输出uWSGI==2.0.18
2.4. 配置uWSGI
添加配置文件项目同名文件夹/uwsgi.ini
如:mysite7/mysite7/uwsgi.ini
文件以[uwsgi]
开头,有如下配置项:
套接字方式的 IP地址:端口号 【此模式需要有nginx】:socket=127.0.0.1:8000
Http通信方式的 IP地址:端口号:http=127.0.0.1:8000
项目当前工作目录:chdir=/home/tarena/…/my_project
项目中wsgi.py文件的目录,相对于当前工作目录【相对路径】:wsgi-file=my_project/wsgi.py
进程个数:process=4
每个进程的线程个数:threads=2
服务的pid记录文件:pidfile=uwsgi.pid
服务的日志文件位置:daemonize=uwsgi.log
开启主进程管理模式:master=true
特殊说明:Django的setting.py需要做如下配置
- 修改setting.py将DEBUG=True改为DEBUG=False
- 修改setting.py将ALLOWED_HOSTS=[]改为ALLOWED_HOSTS = [‘网站域名’] 或者 [‘服务监听的ip地址’]
2.5. 启动uwsgi
cd 到 uWSGI配置文件所在目录
uwsgi --ini uwsgi.ini
2.6. 停止uwsgi
cd 到 uWSGI配置文件所在目录
uwsgi --stop uwsgi.pid
2.7. 说明
- 无论是启动还是关闭,都需要执行
ps aux|grep 'uwsgi'
确认是否符合预期 - 启动成功后,进程在后台执行,所有日志均输出在配置文件所在目录的
uwsgi.log
中 - Django中代码有任何修改,都需要重新启动uwsgi
2.8. 测试
在浏览器端输入http://127.0.0.1:8000进行测试
注意:
- 此时端口8000被uWSGI进程监听,而非runserver
如果当前有预期返回,则uWSGI启动成功
2.9. 常见问题
启动失败:端口被占用
原因:有其他进程占用uWSGI启动的端口
解决方案:可执行
sudo lsof -i:端口号
查询出具体进程,杀掉进程后,重新启动uWSGI即可停止失败:stop无法关闭uWSGI
原因:重复启动uWSGI,导致pid文件中的进程号失准
解决方案:ps出uWSGI进程,手动kill掉
三、Nginx
3.1. 定义
Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡等一系列重要特征
C语言编写,执行效率高
Nginx作用
- 负载均衡,多台服务器轮流处理请求
- 反向代理
原理:客户端请求Nginx,再有Nginx将请求转发uWSGI运行的Django
3.2. 安装
sudo apt install nginx
如果下载速度很慢,考虑更换为国内源
vim /etc/apt/sources.list
更改国内源
sudo apt-get update
安装完毕后,ubuntu终端输入nginx -v
显示如下:
3.3. 配置
修改nginx的配置文件
/etc/nginx/site-enable/default;
sudo vim该文件sudo vim /etc/nginx/site-enable/default
# 在server节点下添加新的location项,指向uwsgi的ip与端口 server{...location / {uwsgi_pass 127.0.0.1:8000 # 所有/开头的请求均重定向到127.0.0.1到8000端口inclue /etc/nginx/uwsgi_params; # 将所有的参数转到uwsgi下}... }
一定带有;
3.4. 启动/停止
$ sudo /etc/init.d/gninx start|stop|restart|status
# 或者
$ sudo service nginx start|stop|restart|status
- 启动 -
sudo /etc/init.d/nginx start
- 停止 -
sudo /etc/init.d/nginx stop
- 重启 -
sudo /etc/init.d/nginx restart
- 注意:nginx配置只要修改,就需要进行重启,否则配置不生效
3.5. 修改uWSGI启动模式
说明nginx负责接收请求,并把请求转发给后面的uWSGI
此模式下,uWSGI需要以socket模式启动
样例:
uWSGI配置变化后,也需要重启
四、nginx + uwsgi排错
排错问题宗旨 → 看日志!看日志!看日志
nginx日志位置:
- 异常信息
/var/log/nginx/error.log
- 正常访问信息
/var/log/nginx/access.log
uwsgi日志位置:
项目同名目录下,uwsgi.log
4.1. 常见问题
访问127.0.0.1:80地址,502响应
502响应,代表Nginx反向代理配置成功,但是对应的uWSGI未启动
访问127.0.0.1:80/url,404响应
- 路由的确不在Django配置中
- Nginx配置错误,未禁止掉try_files
五、Nginx静态文件配置
创建新路径,主要存放Django所有静态文件。
如:/home/tarena/项目名_static/
在Django setting.py中添加新配置
STATIC_ROOT = '/home/tarena/项目名_static/static'# 注意 此配置路径为存放所有正式环境中需要的静态文件
进入项目,执行
$ python3 manage.py collectstatic
执行该命令后,Django将项目中所有的静态文件复制到STATIC_ROOT中,包括Django内建的静态文件
Nginx配置中添加新配置
# file : /etc/nginx/sites-enabled/default # 新添加location /static 路由配置,重定向到指定的 第一步创建的路径即可 server{...location /static {# root 第一步创建文件夹的绝对路径,如:root /home/tarena/项目名_static;} }
重启Nginx
六、404/500界面
定义和配置
在模板文件夹内添加404.html模板,当视图出发HTTP404异常时将会被显示
404.html仅在发布版(即setting.py中的DEBUG=False时)才起作用
当响应处理函数出发HTTP404异常时就会跳转到404界面
七、邮箱告警
定义和配置
当正式服务器上代码运行有报错时,可以将错误追溯信息发送至指定的邮箱
setting.py中 - 在基础邮箱授权后 添加如下配置:
# 关闭调试模式
DEBUG = False# 错误报告接收方
ADMINS = [('name1', 'name1@example.com'), ('name2', 'name2@example.com')]# 发送错误报告放,默认为root@localhost账户,多数邮件服务器会拒绝
SERVER_EMAIL = 'eamil配置中的邮箱'
八、过滤敏感信息
报错邮件中会显示一些错误的追踪,这些错误追踪会出现如password等敏感信息,Django已经将配置文件中的敏感信息过滤修改为多个星号,但是用户自定义的视图函数需要用户手动过滤敏感信息
可过滤信息如下:
- 局部变量
- POST提交数据
8.1. 局部变量
from django.views.decorators.debug import sensitive_cariables@sensitive_variables('user', 'pw', 'cc')
def process_info(user):pw = user.pass_wordcc = user.credit_card_numbername = user.name...
说明:
- 若报错邮件中牵扯到user、pw、cc等局部变量的值,则会将其替换成*****,而name变量还显示其真实值
- 多个装饰器时,需要将其放在最顶部
- 若不传参数,则过滤所有局部变量的值
8.2. POST数据
from django.views.decorators.debug import sensitive_post_parameters@sensitive_post_parameters('password', 'username')
def index(request):s = request.POST['username'] + request.POST['abcd']...# 'abcd'并不存在,此时引发error# POST中username及password的值会被替换成*****
24. Django部署:项目部署相关推荐
- Django(part52)--项目部署
学习笔记,仅供参考 文章目录 项目部署 项目部署的几个步骤 安装同版本的数据库(略) django项目迁移 安装python 安装相同版本的包 将当前项目源代码复制到运程主机上(scp 命令) ssh ...
- 如何将本地django项目部署到服务器,Django本地项目部署到云服务器
开发环境 开发语言: Python 后台框架:Django web 服务器:nginx wsgi 服务器:uwsgi 云服务器系统:Ubuntu 查看本地项目 Django 和 Python 版本: ...
- django+boostrap项目部署在IIS上出现找不到woff2文件404错误
django+bootstrap项目正式部署到IIS服务器上后总是出现woff2文件找不到,查找相应文件也是存在的,但是一直报错,很无奈. 后来再查了度娘之后才发现这是IIS服务器的一个bug,它本身 ...
- python项目部署nginx_【python】Django web项目部署(Nginx+uwsgi)
一.安装uwsgi 通过pip安装uwsgi. 测试uwsgi,创建test.py文件: 通过uwsgi运行该文件. 常用选项: http: 协议类型和端口号 processes : 开启的进程数量 ...
- 【Django】Django web项目部署(Nginx+uwsgi)
一.安装uwsgi 通过pip安装uwsgi. pip install uwsgi 测试uwsgi,创建test.py文件: def application(env, start_response): ...
- Django(Ngnix)项目部署 负载均衡
踩过不少坑,所以一定要看清楚自己的配置,地址这些都不能有错 简单的说就是本机当Ngnix,安装自己设置的规则分配客户端的请求给不同后端的服务器,解决大量并发访问服务问题 首先: 在本机与后端服务器都要 ...
- 1.django restframework 项目部署到ubuntu18.04上(同步数据库)
1.mysql5.7安装 sudo -i #切换为root用户 #安装mysql5.7 apt-get install mysql-server y apt-get install mysql-cli ...
- k8s管理java项目_Kubernetes集群部署项目-部署Java项目(推送镜像
Kubernetes(简称k8s)是谷歌开源的一套容器化集群管理系统,当下已被众多大厂及中小企业采用,容器化技术是目前的大势所趋. 本套教程k8s版本升级为最新版1.18.0,内容由浅入深,且更加深化 ...
- python项目部署
第 1 章 部署基础知识 1.1 部署基础 学习目标: 了解 传统项目生命周期的阶段特点 了解 新型项目生命周期的特点 了解 部署方案的一般流程 1.1.1 项目生命周期 世间万物皆有其生命,软件项目 ...
- JBoss5.1.0部署项目
我本地JBoss安装目录是 JBoss_Home为C:\Java\JBoss\jboss-5.1.0.GA. 1.部署项目 部署项目时,把war包.ear包打包好了放到目录 {JBoss_Home}\ ...
最新文章
- 码农技术炒股之路——任务管理器
- 一分钟在Linux环境下创建一台SFTP服务器(含账户创建)
- linux 桌面管理器 xfce 用户自动登录
- 7.破解的最简单例子
- DIV CSS display (block none inline)属性的用法教程
- python生成gif【简明教程】
- 计算机英语语言学考研真题,考研类试卷英语专业语言学历年真题试卷汇编14
- C#断点续传原理与实现
- java word加粗_java word文档进行填充使用 ${xxx} 的形式
- php自定义函数表格,自定义函数table()
- Android异步批量下载图片并缓存
- 微信服务号开发IOS设备js-sdk认证失败问题总结
- pyqt:使用qrc文件配置图片资源,生成py文件
- 笔记本检测工具(全)
- kvaser怎么用?Kvaser 汽车CAN通讯协议总线分析仪新手入门常见问题解决方案教程
- layui扩展模块的使用注意事项
- 将文本保存为TXT文档
- 【SSM直击大厂】第十三章:MyBatis 详解
- VMware tool 和window共享文件夹,被坑了许久!!!
- Nginx-正向代理HTTPS
热门文章
- 1.PHP7内核剖析 --- PHP 基础架构
- 如何遍历JTree的每一个节点
- [2019杭电多校第五场][hdu6630]permutation 2
- 记一次oracle安装错误:INFO: //usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'...
- UDF函数 解码url
- asp.net中使用水晶报表 ---pull
- 每天CookBook之JavaScript-073
- NOIP 2014	无线网络发射器选址
- HDU 5353 Average 贪心
- 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类...