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文件