Django项目部署(三)Docker-部署uwsgi服务

Docker-部署uwsgi服务代替django自带的服务器

前言

在实际使用django框架开发后端时,一般使用django自带web服务器,该服务器通过命令“python manage.py runserver”启动。但是在实际项目发布时,一般使用nginx+uwsgi来作为项目的服务器,其中nginx主要解析处理静态请求,uwsgi主要处理发现django服务的动态请求。

那么为什么要使用uwsgi来代替django自带的服务呢?大概的考虑因素无非就是性能、安全,反正整体就是更优于django自带的服务,具体的可百度参考。

在开始之前要先完成一下两个环境:

  • Docker基础+Docker安装mysql

  • Docker部署-通过nginx管理web前端页面

目标

  • 使用uwsgi作为django服务
  • 实现前端服务和后端服务之间的通信(容器间的通信)

python容器 项目是依赖于python3,以及python3的相关库,但是centos自带的是python2,所以需要通过容器安装python3以及先关依赖

python容器

项目是依赖于python3,以及python3的相关库,但是centos自带的是python2,所以需要通过容器安装python3以及先关依赖

运行python3容器

  • 拉取镜像:docker pull python:3.6

  • 运行容器:docker run -itd -v 宿主机上项目根目录:/opt --rm --name python3env python:3.6 #运行容器时通过-v将宿主机上的项目根目录,挂在到容器的opt文件目录

安装相关基础依赖包

  • 进入容器:docker exec -it python3env bash

  • 通过pip命令安装相关依赖包,例如:django/django-guardian/mysqlclient/jira/PyYAML

修改项目的settings.py文件

  • 修改数据库配置

        DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 数据库驱动mysql
            'NAME': 'mysql',                       # mysql容器创建的数据库默认名称
            'USER': 'root',                        # mysql容器创建时默认的账号
            'PASSWORD': '123456789',               # mysql容器创建时设置的密码
            'HOST': 'xxx.xxx.xxx.xxx',              # 局域网ip
    
            'PORT': '3306',                        # mysql容器创建时指定的端口
    
            'TEST': {
                'CHARSET': 'utf8',
                'COLLATION': 'utf8_general_ci',
            }
    
        }
    }
    
  • 增加跨域请求配置

    '''跨域请求'''
    CORS_ALLOW_CREDENTIALS = True
    CORS_ORIGIN_ALLOW_ALL = True
    CORS_ORIGIN_WHITELIST = ()
    
    CORS_ALLOW_METHODS = (
        'DELETE',
        'GET',
        'OPTIONS',
        'PATCH',
        'POST',
        'PUT',
        'VIEW',
    )
    
    CORS_ALLOW_HEADERS = (
        'accept',
        'accept-encoding',
        'authorization',
        'content-type',
        'dnt',
        'origin',
        'user-agent',
        'x-csrftoken',
        'x-requested-with',
    )
    

安装和配置完成后,可先通过django自带服务(服务启动命令:python manage.py runserver ),检测依赖包是否安装完整。

安装并配置uwsgi

  • 安装命令:pip install uwsgi -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

  • 新建配置文件:项目根目录下新建uwsgi.ini配置文件,并编辑如下内容:nginx配置的端口,要与uwsgi端口保持一致

    [uwsgi]
    #chdir配置项目根目录
    chdir=./
    
    module=autotpsite.wsgi:application
    
    #nginx使用proxy_pass配置,则这边使用http通信;
    #表示使用 nginx 接收的 Web请求传递给端口为8081的 uWSGI 服务来处理
    http=0.0.0.0:8081 
    
    #启动一个master主进程来管理其他进程,如果kill这个master进程,相当于关闭所有的uwsgi进程 
    master=true
    
    #设置服务的pid保存文件
    pidfile=./uwsgi8081.pid
    
    #设置服务器日志存储文件
    daemonize=./uwsgi_server.log
    
    #设置仅展示错误日志
    disable-logging=true
    #设置超时时间
    socket-timeout=10
    

启动uwsgi

  • 命令:uwsgi uwsgi.ini

  • 结果:启动成功后会生成pidfile和uwsgi_server.log文件

#python开发工程师#
全部评论

相关推荐

投递腾讯云智研发等公司6个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务