预计阅读8分钟
周末,在一个技术群里面有同学在问Django开发部署,所以今天给大家分享一下基于Docker下Python Django框架的部署。
首先我们要知道Django常见的两种部署方式:
Django + Nginx + uWSGI
Django+ Nginx + Gunicorn
限于篇幅情况,今天我们主要聊第一种 uWSGI 配合 Nginx的部署方式。
首先我们要知道我们发布上线的步骤,这里面我们以Docker容器化为例子:
1.通过自动化脚本,把代码同步到线上服务器(通过fabric或者ansible等)
2.重启supervisord(进程管理工具,通过uWSGI 控制Django服务启动)
3.通过docker-compose 更新docker镜像(如果有镜像有变更,比如装了包到容器里面)
4.做数据表migrate,比如数据表进行了变更(如果是关系型数据库)
5.通过docker-compose重启docker容器
这上面5个步骤,只要配置好了对应的配置文件(nginx,uWSGI,supervisor等),我们就能通过一个发布脚本进行一键进行代码发布上线。
下面分别简单阐述一下,Nginx,Supervisor,uWSGI,Docker-compose等配置文件及用法。
Nginx
Nginx是一个高性能的HTTP和反向代理服务器。
我们要进行服务部署,首先我们Nginx需要进行配置好对应的配置文件。
把配置文件放在/etc/nginx/sites-enabled/ 目录下面,这儿你也可以放在项目里面通过ln 进行链接过去。
之所以这样配置是因为我们主配置文件/etc/nginx/nginx.conf是include /etc/nginx/sites-enabled/ 目录的原因。
这里我们配置文件命名为
uWSGI
配置好了nginx,接下来就是uWSGI配置了。uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
后面我们会说uWSGI 和 Gunicorn 他们都是实现了WSGI server协议的服务器。
通过uWSGI我们可以获得更好的服务性能,详细日志,多应用管理等多种定制功能。下面我们简单来看下配置文件。
为了方便展示以及解读,这里面我删除精简了一些配置,具体线上配置更为复杂一些,具体情况请具体进行配置。
另外这里面我们需要知道uWSGI 是一个语言无关的服务器,这里面我们可以部署Django,也可以部署Flask,Web2py等等。你这儿可以把他等同 Python manage.py runserver 这条命令,区别在一个在测试环境和线上环境。
Supervisor
supervisor我在Linux系列文章第一篇
Linux系列开坑记(一)-常用的3个命令
,就分享过了,这里直接列一个配置文件出来。
这里面supervisor控制服务uWSGI进行服务启动,我们可以进行start,restart,stop等操作。
Docker-compose
看到这儿想必有同学已经有些晕了,我们再来理一下这里的逻辑。
我们通过docker-compose配置文件,进行控制supervisor启动
Supervisor控制uWSGI端口服务启动
uWSGI把整个Django应用拉动起来(这里类似python manage.py runserver)
而我们浏览器请求到达Nginx之后被反向代理到uWSGI端口服务上面,从而访问到我们Django应用。
至此就是整个应用的部署配置(除了没有自动化发布脚本以外)
最后
通过上面的配置文件,我们介绍了整个Django应用发布过程的涉及到的主要步骤,实际情况会稍微复杂点儿。更多详细优化参数大家可以去进行了解。今天我们uWSGI的部署就先到这儿,下一期我们再进行分享Gunicorn部署方式。
容器化部署实践,我打算从基础操作到实战应用以一个系列进行分享,今天是第四篇docker部署Django应用,后期我将持续分享更多相关内容,从容器化入门使用到部署实践编排技术,欢迎大家持续进行关注。
扫码免费加入
领取专属 10元无门槛券
私享最新 技术干货