部署环境
1. Nginx容器
2. Django+uwsgi容器
3. mysql容器
4. CentOS 7.0系统
工具软件
Navicat:MySQL客户端软件
下载网址:百度下载
MobaXterm:SSH客户端(免费版)
下载网址:https://mobaxterm.mobatek.net/download.html
原理
1. 客户端请求服务资源
2. nginx直接对外服务,接收客户端发送的http请求,解包、分析
3. 如果是静态文件请求,返回nginx配置的静态文件目录资源
4. 如果是动态的请求,nginx通过配置文件,转发给uWSGI
5. uWSGI将接收到的包进行处理,并转发给wsgi
6. wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi
7. wsgi将返回值进行打包,转发给uWSGI
8. uWSGI接收后转发给nginx
9. nginx最终将返回值返回给客户端(如浏览器)。
*注:不同的组件之间传递信息涉及到数据格式和协议的转换
分别创建所需容器并用link连接
nginx -> django
django -> mysql
project_jwweb文件夹下src为Django项目
创建 nginx 容器 命令
docker run # 创建docker容器
-it # 可交互
--name nginx2 # 命名
-p 8001:80
端口映射,可访问宿主机IP:8001
-v /root/opt/project_jwweb/nginx/conf:/etc/nginx
将宿主的/root/opt/project_jwweb/nginx/conf
映射到容器的/etc/nginx(配置文件目录)
-v /root/opt/project_jwweb/src/static:/etc/nginx/static
-v /root/opt/project_jwweb/src/media:/etc/nginx/media
上面两个映射静态文件目录
--link django2:django2
可使容器互访,第一个是容器的名称,第二个是容器的别称
nginx:1.13 bash # 使用镜像并进入bash
创建 django 容器 命令
docker run -it --name django2 -v /root/opt/project_jwweb/src:/code/src --link mysql2:mysql2 django:2.0 bash
mysql 容器 命令
docker run --name mysql2 -p 3306:3306 -v /root/opt/project_jwweb/data:/var/lib/mysql -d mysql:db2
配置信息
Nginx
修改/etc/nginx/conf.d/default.conf中的server选项
server {
# 监听的端口,与上面端口映射的容器端口一致
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
# 下面两条配置为默认,注释掉即可
# root /usr/share/nginx/html;
# index index.html index.htm;
# 新增以下两行配置
# 找到uwsgi_params文件并填上路径
include /etc/nginx/uwsgi_params;
# 代理访问Django容器中的uwsgi服务
# link的容器名即可
uwsgi_pass django3:8080;
}
# 静态文件配置,将Django项目的静态文件映射到容器内部才能通过以下配置访问的到
# python manage.py collectstatic采集静态文件
location /media {
alias /etc/nginx/media;
}
location /static {
alias /etc/nginx/static;
}
}
Django配置
先要安装uwsgi服务
pip install uwsgi
在manage.py的同级目录下现金uwsgi.ini配置文件
[uwsgi]
# 通过uwsgi访问django需要配置成http
# 通过nginx请求uwsgi来访问django 需要配置成socket
socket = :8001
# Django的根目录(manage.py同级目录)
# 写上容器内项目的绝对路径
chdir = /code/src
# 指定django项目自带的的wsgi配置文件位置
module = web.wsgi
# 允许存在主进程
master = true
# 开启进程数量
processes = 3
# 服务器退出时自动清理环境
vacuum = true
# 存放uwsgi日志路径
daemonize = uwsgi.log
# 虚拟环境路径
virtualenv =
或者在manage.py的同级目录下现金uwsgi.xml配置文件
<uwsgi>
<socket>:8001</socket>
<chdir>/code/src</chdir>
<module>web.wsgi</module>
<processes>4</processes>
<daemonize>uwsgi.log</daemonize>
</uwsgi>
Mysql配置
进入新建一个数据库,在Django中连接这个数据库即可
运行
先运行uwsgi服务
uwsgi --ini uwsgi.ini
或 uwsgi -x uwsgi.xml
在运行Nginx服务
进入nginx容器中查看服务是否启动
service nginx status
如果未启动就执行
service nginx start