在实际使用django框架开发后端时,一般使用django自带web服务器,该服务器通过命令“python manage.py runserver”启动。但是在实际项目发布时,一般使用nginx+uwsgi来作为项目的服务器,其中nginx主要解析处理静态请求,uwsgi主要处理发现django服务的动态请求。
那么为什么要使用uwsgi来代替django自带的服务呢?大概的考虑因素无非就是性能、安全,反正整体就是更优于django自带的服务,具体的可百度参考。
在开始之前要先完成一下两个环境:
Docker基础+Docker安装mysql
Docker部署-通过nginx管理web前端页面
项目是依赖于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 安装结果如下图
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文件
Docker安装时,会自动创建一个名为docker0的liunx bridge。如果创建容器时未指定--network,那么会默认都挂在dicker0下。
1.通过命令 ip addr查看当前linux环境下的网络:
docker0 创建时会自动创建3种网络模式:host、bridge、none,默认容器是挂在bridge
2. 查看现有已创建容器的ip:
docker network inspect bridge
3.修改nginx容器的配置文件-实现容器间通信
在前面,nginx容器已实现
1.将配置的文件复制在到宿主机的conf文件夹下
2.运行容器时通过-v映射了宿主机的配置文件和容器内的配置文件
所以直接修改宿主机该文件夹下的nginx配置文件即可。
3.1 修改nginx配置文件
命令:vi conf/conf.d/default.conf
修改内容:添加location 定义访问django服务的动态请求的访问ip
4.重启nginx
修改完nginx配置文件后,需要重新启动nginx
本文重点:
1.确保nginx配置文件的端口与uwsgi配置文件的端口保持一致
2.确保nginx配置文件内python容器的ip正确