Django之项目部署笔记

/ 0评 / 0

一、部署流程

  1. 项目部署:软件开发完毕后,将开发环境运行的开发版软件安装部署到服务器上运行长期运行。
  2. 部署大致步骤如下:
    1. 在服务器上安装和配置同步版本的环境
    2. django项目迁移
    3. 用uwsgi替换代python3 manage.py reunserver方法启动服务器
    4. 配置nginx反射代理服务器
    5. 用nginx配置静态文件路径,解决静态路径问题

二、uWSGI网关

三、Nginx及反向代理配置

  1. Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,在实践中广泛使用。
  2. C语言编写,执行效率高
  3. nginx作用
    • 负载均衡,多服务器轮流处理请求
    • 反向代理
  4. 原理:客户端请求nginx,再由nginx将请求转发uWSGI运行的django
  5. linux下安装nginx $ sudo apt install nginx
  6. nginx配置:修改nginx配置文件/etc/nginx/sites-enabled/default

    # 在server节点下添加新的location项,指向uwsgi的ip与端口。
    server {
    ...
    location / {
        uwsgi_pass 127.0.0.1:8000;  # 重定向到127.0.0.1的8000端口
        include /etc/nginx/uwsgi_params; # 将所有的参数转到uwsgi下
        }
        ...
    }
    
  7. nginx服务控制

    # 服务启动/停止/重启/状态
    $ sudo /etc/init.d/nginx start|stop|restart|status
    # 或
    $ sudo service nginx start|stop|restart|status
    
  8. 修改uWSGI配置

    • 修改项目同名文件夹/uwsgi.ini下的Http通信方式为socket通信

      [uwsgi]
      # 去掉如下
      # http=127.0.0.1:8000
      # 改为
      socket=127.0.0.1:8000
      
    • 重启uWSGI服务

      # 进入到 项目同名文件夹下
      $ sudo uwsgi --stop uwsgi.pid
      $ sudo uwsgi --ini uwsgi.ini
      # nginx默认端口为80,Django中任何修改需要重启uwsgi后修改生效
      

四、nginx配置静态文件路径

  1. 创建新路径-主要存放Django所有静态文件 如:/home/mysite4_static
  2. 在Django settings.py中添加新配置

    STATIC_ROOT = '/home/项目名_static/static  
    #注意 此配置路径为 存放所有正式环境中需要的静态文件
    
  3. 进入项目,执行python3 manage.py collectstatic。执行该命令后,Django将项目所有静态文件复制到ATATIC_ROOT中,包括Django内建静态文件(如后台admin相关样式)

  4. Nginx配置中添加新配置

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

五、404/500自定义界面

  1. 在模板文件夹内添加404html模板,当视图触发Http404异常时将会被显示
  2. 404.html仅在发布版中(setttings.pyDEBUG=False)时生效
  3. 当响应处理函数触发Http404异常时就会跳转到404界面

    from django.http import Http404
    def xxx_view( ):
        raise Http404  # 直接返回404
    

六、邮件告警

  1. 当正式服务器上代码运行有报错时,可将错误追溯信息以至指定的邮箱
  2. settings.py文件配置如下

    #在基础邮件配置之后 添加如下
    ​
    #关闭调试模式
    DEBUG = False  
    ​
    #错误报告接收方
    ADMINS = [('guoxiaonao', 'xxxx@example.com'), ('wanglaoshi', 'xxxx@example.com')]
    ​
    #发送错误报告方,默认为 root@localhost账户,多数邮件服务器会拒绝
    SERVER_EMAIL = 'email配置中的邮箱'
    
  3. 过滤敏感信息

    • 报错邮件中会显示一些错误的追踪,这些错误追踪中会出现如password等敏感信息,Django将配置文件中的敏感信息过滤修改为多个星号。便用户自定义视图函数需要用户手动过滤敏感信息。
    • 视图函数中的局部变量

      from django.views.decorators.debug import sensitive_variables
      ​
      @sensitive_variables('user', 'pw', 'cc')
      def process_info(user):
      pw = user.pass_word
      cc = user.credit_card_number
      name = user.name
      ...
      #注意:
      #1 若报错邮件中牵扯到user,pw,cc等局部变量的值,则会将其替换成   *****, 而 name 变量还显示其真实值
      #2 多个装饰器时,需要将其放在最顶部
      #3 若不传参数,则过滤所有局部变量的值
      
    • 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的值会被替换成  ******
      

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注