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

  前言   

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

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

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

Docker基础+Docker安装mysql

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

目标

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

python容器

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

1.运行python3容器

       1.1 拉取镜像:docker pull python:3.6

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

2.安装相关基础依赖包

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

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

     2.3 安装结果如下图

Docker-部署uwsgi服务代替django自带的服务器_第1张图片

2.4修改项目的settings.py文件

    2.4.1  修改数据库配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库驱动mysql
        'NAME': 'mysql',                       # mysql容器创建的数据库默认名称
        'USER': 'root',                        # mysql容器创建时默认的账号
        'PASSWORD': '123456789',               # mysql容器创建时设置的密码
        'HOST': '192.168.63.128',              # 局域网ip

        'PORT': '3306',                        # mysql容器创建时指定的端口
      
        'TEST': {
            'CHARSET': 'utf8',
            'COLLATION': 'utf8_general_ci',
        }

    }
}

    2.4.2  增加跨域请求配置

'''跨域请求'''
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 ),检测依赖包是否安装完整。

3.安装并配置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

4.启动uwsgi

命令:uwsgi uwsgi.ini  

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

 

实现nginx和uwsgi之间的通信

       Docker安装时,会自动创建一个名为docker0的liunx bridge。如果创建容器时未指定--network,那么会默认都挂在dicker0下。

1.通过命令 ip addr查看当前linux环境下的网络:

Docker-部署uwsgi服务代替django自带的服务器_第2张图片

docker0 创建时会自动创建3种网络模式:host、bridge、none,默认容器是挂在bridge

2. 查看现有已创建容器的ip:

docker network inspect bridge

Docker-部署uwsgi服务代替django自带的服务器_第3张图片

3.修改nginx容器的配置文件-实现容器间通信

在前面,nginx容器已实现

1.将配置的文件复制在到宿主机的conf文件夹下

2.运行容器时通过-v映射了宿主机的配置文件和容器内的配置文件

所以直接修改宿主机该文件夹下的nginx配置文件即可。

3.1 修改nginx配置文件

命令:vi conf/conf.d/default.conf

修改内容:添加location 定义访问django服务的动态请求的访问ip

Docker-部署uwsgi服务代替django自带的服务器_第4张图片

4.重启nginx

     修改完nginx配置文件后,需要重新启动nginx

 

本文重点:

1.确保nginx配置文件的端口与uwsgi配置文件的端口保持一致

2.确保nginx配置文件内python容器的ip正确

 

你可能感兴趣的:(Django,Python,小小运维篇)