使用Docker容器化部署实践之Django应用部署(一)

网友投稿 375 2022-10-22

使用Docker容器化部署实践之Django应用部署(一)

预计阅读8分钟

周末,在一个技术群里面有同学在问Django开发部署,所以今天给大家分享一下基于Docker下Python Django框架的部署。

首先我们要知道Django常见的两种部署方式:

Django + Nginx + uWSGIDjango+ Nginx + Gunicorn

限于篇幅情况,今天我们主要聊第一种 uWSGI 配合 Nginx的部署方式。

首先我们要知道我们发布上线的步骤,这里面我们以Docker容器化为例子:

1.通过自动化脚本,把代码同步到线上服务器(通过fabric或者ansible等)

这上面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/ 目录的原因。

这里我们配置文件命名为 ​​api.yourdomain.com.conf ​​​​配置文件如下​​

# api.yourdomain.com.confserver { listen 80; charset utf-8; server_name api.yourdomain.com; # DNS解析到当前nginx服务器 location / { proxy_pass # 代理的端口 proxy_pass_header Server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; } access_log /test/log/nginx.access.log; error_log /test/log/nginx.error.log;}

uWSGI

配置好了nginx,接下来就是uWSGI配置了。uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、和 Gunicorn 他们都是实现了WSGI server协议的服务器。

通过uWSGI我们可以获得更好的服务性能,详细日志,多应用管理等多种定制功能。下面我们简单来看下配置文件。

# /yourdir/uwsgi.ini [uwsgi]chdir = /yourdir/ # 执行目录module = yourproject.wsgi # wsgi文件master = trueprocesses = 1 # 一般越多进程处理能力越强,由于这里是测试设为1vacuum = true = 0.0.0.0:9527# virtualenv = /home/test/project/python/yourproject/venv这里我们用了docker就不用考虑virtualenv情况env = DJANGO_SETTINGS_MODULE=yourproject.settingsharakiri = 30 # 当进程被卡住的时间超过特定的秒数后就销毁这个进程no-orphans # 在没有主进程的情况下自动结束工作进程。

为了方便展示以及解读,这里面我删除精简了一些配置,具体线上配置更为复杂一些,具体情况请具体进行配置。

另外这里面我们需要知道uWSGI 是一个语言无关的服务器,这里面我们可以部署Django,也可以部署Flask,Web2py等等。你这儿可以把他等同 Python manage.py runserver 这条命令,区别在一个在测试环境和线上环境。

Supervisor

supervisor我在Linux系列文章第一篇​​Linux系列开坑记(一)-常用的3个命令​​,就分享过了,这里直接列一个配置文件出来。

[supervisord]nodaemon=truelogfile=/data/log/supervisord.logpidfile=/var/run/supervisord.pid[program:your_app_name]process_name=app%(process_num)scommand=uwsgi -i /yourdir/uwsgi.ini --touch-reload=/yourdir/uwsgi.inidirectory=/yourdir ;执行命令时切换工作目录user=sitin ; 使用sitin来启动进程stopsignal=HUPautostart = trueautorestart=true  ;自动重启redirect_stderr = true  ;重定向日志stdout_logfile = /data/log/stdout-%(program_name)s.loglogfile_maxbytes=300MBlogfile_backups=5numprocs=3  ;启动3个 9527,9528,9529numprocs_start=9527 ; 从9527开始

这里面supervisor控制服务uWSGI进行服务启动,我们可以进行start,restart,stop等操作。

Docker-compose

Docker-compose是进行容器编排,方便我们进行容器管理。我们配置好了上面的文件,再来看下docker-compose的配置文件,这里同样我在之前docker文章进行分享过了,参考 ​​Docker容器化部署实践Docker Compose​​

version: "3" # 注意版本号services: # 一个应用的容器,可以包括多个相同镜像容器实例 dev: image: hub.yourdomain.com/test:1.0 # 镜像地址 command: supervisord -c /yourdir/supervisord.conf # 容器执行命令 container_name: test  # 容器名 restart: always volumes: - ./docker:/data # 挂载地址 ports: - "9527:9527" #端口 environment: - PYTHONPATH=/data - XXX_API_SETTINGS=XXX.config.dev - DJANGO_SETTINGS_MODULE=yourproject.settings network_mode: bridge extra_hosts: # 配置额外的host名称 - "test.yourdomain.com:127.0.0.1" external_links: # 链接到外部容器 - redis:redis - mysql:mysql

看到这儿想必有同学已经有些晕了,我们再来理一下这里的逻辑。

我们通过docker-compose配置文件,进行控制supervisor启动Supervisor控制uWSGI端口服务启动uWSGI把整个Django应用拉动起来(这里类似python manage.py runserver)而我们浏览器请求到达Nginx之后被反向代理到uWSGI端口服务上面,从而访问到我们Django应用。至此就是整个应用的部署配置(除了没有自动化发布脚本以外)

最后

通过上面的配置文件,我们介绍了整个Django应用发布过程的涉及到的主要步骤,实际情况会稍微复杂点儿。更多详细优化参数大家可以去进行了解。今天我们uWSGI的部署就先到这儿,下一期我们再进行分享Gunicorn部署方式。

容器化部署实践,我打算从基础操作到实战应用以一个系列进行分享,今天是第四篇docker部署Django应用,后期我将持续分享更多相关内容,从容器化入门使用到部署实践编排技术,欢迎大家持续进行关注。

相关文章:

​​Docker 容器化部署实践--入门​​

​​Docker容器化部署实践Docker Compose​​

​​Docker 容器化部署实践之Dockerfile​​

​​Linux系列开坑记(一)-常用的3个命令​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis if test 不为空字符串且不为null的问题
下一篇:Docker 容器化部署实践之Dockerfile
相关文章

 发表评论

暂时没有评论,来抢沙发吧~