一、基础概念

项目部署是指在软件开发完成后,将开发机器上运行的软件实际安装到服务器上进行长期运行

  1. 在安装机器上安装和配置同版本的环境【py、数据库等】

  2. django项目迁移

    sudo scp /home/tarena/django/mysite1 # 复制本地目录下文件夹
    root@88.77.66.55:/home/root/xxx # 复制到指定ip目录
    请输入root密码: # 输入root密码
    
  3. uWSGI代替python3 manage.py runserver方法启动服务器

  4. 配置nginx反向代理服务器

  5. 用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需要做如下配置

  1. 修改setting.py将DEBUG=True改为DEBUG=False
  2. 修改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. 说明

  1. 无论是启动还是关闭,都需要执行ps aux|grep 'uwsgi'确认是否符合预期
  2. 启动成功后,进程在后台执行,所有日志均输出在配置文件所在目录的uwsgi.log
  3. Django中代码有任何修改,都需要重新启动uwsgi

2.8. 测试

在浏览器端输入http://127.0.0.1:8000进行测试

注意:

  • 此时端口8000被uWSGI进程监听,而非runserver

如果当前有预期返回,则uWSGI启动成功

2.9. 常见问题

  1. 启动失败:端口被占用

    原因:有其他进程占用uWSGI启动的端口

    解决方案:可执行sudo lsof -i:端口号查询出具体进程,杀掉进程后,重新启动uWSGI即可

  2. 停止失败: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. 常见问题

  1. 访问127.0.0.1:80地址,502响应

    502响应,代表Nginx反向代理配置成功,但是对应的uWSGI未启动

  2. 访问127.0.0.1:80/url,404响应

    • 路由的确不在Django配置中
    • Nginx配置错误,未禁止掉try_files

五、Nginx静态文件配置

  1. 创建新路径,主要存放Django所有静态文件。

    如:/home/tarena/项目名_static/

  2. 在Django setting.py中添加新配置

    STATIC_ROOT = '/home/tarena/项目名_static/static'# 注意 此配置路径为存放所有正式环境中需要的静态文件
    

  3. 进入项目,执行

    $ python3 manage.py collectstatic
    

    执行该命令后,Django将项目中所有的静态文件复制到STATIC_ROOT中,包括Django内建的静态文件

  4. Nginx配置中添加新配置

    # file : /etc/nginx/sites-enabled/default
    # 新添加location /static 路由配置,重定向到指定的 第一步创建的路径即可
    server{...location /static {# root 第一步创建文件夹的绝对路径,如:root /home/tarena/项目名_static;}
    }
    

  5. 重启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...

说明:

  1. 若报错邮件中牵扯到user、pw、cc等局部变量的值,则会将其替换成*****,而name变量还显示其真实值
  2. 多个装饰器时,需要将其放在最顶部
  3. 若不传参数,则过滤所有局部变量的值

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部署:项目部署相关推荐

  1. Django(part52)--项目部署

    学习笔记,仅供参考 文章目录 项目部署 项目部署的几个步骤 安装同版本的数据库(略) django项目迁移 安装python 安装相同版本的包 将当前项目源代码复制到运程主机上(scp 命令) ssh ...

  2. 如何将本地django项目部署到服务器,Django本地项目部署到云服务器

    开发环境 开发语言: Python 后台框架:Django web 服务器:nginx wsgi 服务器:uwsgi 云服务器系统:Ubuntu 查看本地项目 Django 和 Python 版本: ...

  3. django+boostrap项目部署在IIS上出现找不到woff2文件404错误

    django+bootstrap项目正式部署到IIS服务器上后总是出现woff2文件找不到,查找相应文件也是存在的,但是一直报错,很无奈. 后来再查了度娘之后才发现这是IIS服务器的一个bug,它本身 ...

  4. python项目部署nginx_【python】Django web项目部署(Nginx+uwsgi)

    一.安装uwsgi 通过pip安装uwsgi. 测试uwsgi,创建test.py文件: 通过uwsgi运行该文件. 常用选项: http: 协议类型和端口号 processes : 开启的进程数量 ...

  5. 【Django】Django web项目部署(Nginx+uwsgi)

    一.安装uwsgi 通过pip安装uwsgi. pip install uwsgi 测试uwsgi,创建test.py文件: def application(env, start_response): ...

  6. Django(Ngnix)项目部署 负载均衡

    踩过不少坑,所以一定要看清楚自己的配置,地址这些都不能有错 简单的说就是本机当Ngnix,安装自己设置的规则分配客户端的请求给不同后端的服务器,解决大量并发访问服务问题 首先: 在本机与后端服务器都要 ...

  7. 1.django restframework 项目部署到ubuntu18.04上(同步数据库)

    1.mysql5.7安装 sudo -i #切换为root用户 #安装mysql5.7 apt-get install mysql-server y apt-get install mysql-cli ...

  8. k8s管理java项目_Kubernetes集群部署项目-部署Java项目(推送镜像

    Kubernetes(简称k8s)是谷歌开源的一套容器化集群管理系统,当下已被众多大厂及中小企业采用,容器化技术是目前的大势所趋. 本套教程k8s版本升级为最新版1.18.0,内容由浅入深,且更加深化 ...

  9. python项目部署

    第 1 章 部署基础知识 1.1 部署基础 学习目标: 了解 传统项目生命周期的阶段特点 了解 新型项目生命周期的特点 了解 部署方案的一般流程 1.1.1 项目生命周期 世间万物皆有其生命,软件项目 ...

  10. JBoss5.1.0部署项目

    我本地JBoss安装目录是 JBoss_Home为C:\Java\JBoss\jboss-5.1.0.GA. 1.部署项目 部署项目时,把war包.ear包打包好了放到目录 {JBoss_Home}\ ...

最新文章

  1. 码农技术炒股之路——任务管理器
  2. 一分钟在Linux环境下创建一台SFTP服务器(含账户创建)
  3. linux 桌面管理器 xfce 用户自动登录
  4. 7.破解的最简单例子
  5. DIV CSS display (block none inline)属性的用法教程
  6. python生成gif【简明教程】
  7. 计算机英语语言学考研真题,考研类试卷英语专业语言学历年真题试卷汇编14
  8. C#断点续传原理与实现
  9. java word加粗_java word文档进行填充使用 ${xxx} 的形式
  10. php自定义函数表格,自定义函数table()
  11. Android异步批量下载图片并缓存
  12. 微信服务号开发IOS设备js-sdk认证失败问题总结
  13. pyqt:使用qrc文件配置图片资源,生成py文件
  14. 笔记本检测工具(全)
  15. kvaser怎么用?Kvaser 汽车CAN通讯协议总线分析仪新手入门常见问题解决方案教程
  16. layui扩展模块的使用注意事项
  17. 将文本保存为TXT文档
  18. 【SSM直击大厂】第十三章:MyBatis 详解
  19. VMware tool 和window共享文件夹,被坑了许久!!!
  20. Nginx-正向代理HTTPS

热门文章

  1. 1.PHP7内核剖析 --- PHP 基础架构
  2. 如何遍历JTree的每一个节点
  3. [2019杭电多校第五场][hdu6630]permutation 2
  4. 记一次oracle安装错误:INFO: //usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'...
  5. UDF函数 解码url
  6. asp.net中使用水晶报表 ---pull
  7. 每天CookBook之JavaScript-073
  8. NOIP 2014 无线网络发射器选址
  9. HDU 5353 Average 贪心
  10. 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类...