详细部署过程:docker部署django项目
项目访问过程
1.用户通过8081端口访问静态页面,8081端口映射nginx的80端口,通过80端口访问nginx服务器上的静态文件
2.用户访问静态页面出发的接口请求(动态请求)通过8080端口访问uwsgi服务,uwsgi服务传递给django获取数据,并返回给nginx服务,nginx服务返回给前端进行渲染
其中,nginx和uwsgi通过8080端口进行通信;注意启动niginx的外部端口(我这边是使用8081)不能与容器之间通信的端口(我这边使用的是8080)一致,否则项目无法正常使用
使用到的容器:
mysql容器
python容器
nginx容器
启动nginx容器:
docker run -itd -p 8081:80 -v /root/conf:/etc/nginx -v /root/software/TestPlatform/testplatform/dist:/usr/share/nginx/html --name mynginx --rm nginx
nginx作为前端代理服务,管理静态文件;
其中8081为外部访问nginx服务器的端口,8080映射nginx的80端口
启动mysql容器:
启动python容器:
docker run -itd -v /root/software/TestPlatform/testplatform/:/opt --rm --name mypython python:3.7
uwsgi服务:
uwsgi代替django自带的服务,管理动态请求(接口请求)
个人配置内容如下:使用http通信,设置http = 0.0.0.0:8080表示uwsgi使用8080端口进行通信
[uwsgi]
chdir = /root/software/TestPlatform/testplatform/
module = testplatform.wsgi:application
http = 0.0.0.0:8080
master=true
pidfile = /root/software/TestPlatform/testplatform/uwsgi8080.pid
daemonize =/root/software/TestPlatform/testplatform/uwsgi_server.log
(重点)nginx和uwsgi通信
也就是前端静态页面与django动态接口请求之间进行通信
临时通信方式:使用容器之间的通信
1.通过命令:docker network inspect bridge查询各个容器的ip
2.由于uwsgi是依托于python的,所以python所在的ip就是uwsgi的ip,结合uwsgi配置的端口8080,所以要访问uwsgi的ip和端口就是:http://172.17.0.2:8080
3.修改niginx的配置文件:
nginx和uwsgi都配置完成后,需要重启:
docker restart nginx容器名称
uwsgi --reload xxx.pid