容器化部署实践之Django应用部署(二)
上一篇文章有些同学感觉不够详细理解起来有些困难,我再来简单解释一下。
我们在开发的情况下: 浏览器请求→ python manage.py runserver(比如8000) → 到应用代码(Django,Flask等等)
部署到线上的情况: 域名请求→ DNS解析→ 服务器IP→ Nginx(80端口)→ 代理转发 127.0.0.1:8000(IP不一定是127.0.0.1)→ 到项目应用代码逻辑。
在整个部署过程中,我们加了一层docker来进行隔离部署,不仅解决了开发(dev)测试(test)线上(prod)多个环境不一致的问题,也达到了一次封装,处处运行的目的,我们日常使用virtualenv进行Python包环境隔离都不需要了,这在多人开发模式下面非常方便。
我其实在docker入门篇Docker 容器化部署实践--入门已经讲过了。至于新手的话如果觉得一开始觉得不太容易上手,可以考虑去掉docker这个中间环节,直接把服务跑在Linux机器上面。
解释完上面,接下来进入我们今天的主题: Django + Nginx + Gunicorn 部署
Gunicorn
Gunicorn,是「Green Unicorn」,最初来于Ruby社区的Unicorn,是用于Unix的Python WSGI HTTP服务器,Gunicorn与各种Web框架广泛兼容,简单轻便。
我们之所以使用使用uWSGI或Gunicorn原因就是Flask,Django自带的WSGI服务性能不够好,一般用在测试开发环境用,线上主要使用更为高性能的WSGI服务。
作为介绍我这里引用一个官方例子:
$ pip install gunicorn$ cat myapp.pydef app(environ, start_response):data = b"Hello, World!\n"start_response("200 OK", [("Content-Type", "text/plain"),("Content-Length", str(len(data)))])return iter([data])$ gunicorn -w 4 myapp:app[2014-09-10 10:22:28 +0000] [30869] [INFO] Listening at: http://127.0.0.1:8000 (30869)[2014-09-10 10:22:28 +0000] [30869] [INFO] Using worker: sync[2014-09-10 10:22:28 +0000] [30874] [INFO] Booting worker with pid: 30874[2014-09-10 10:22:28 +0000] [30875] [INFO] Booting worker with pid: 30875[2014-09-10 10:22:28 +0000] [30876] [INFO] Booting worker with pid: 30876[2014-09-10 10:22:28 +0000] [30877] [INFO] Booting worker with pid: 30877
复制代码
装好gunicorn之后,我们可以通过gunicorn -h
进行查看配置,通常情况下为了方便,我们都是把gunicorn放在配置文件中。
这里提一点,gunicorn中有一个--statsd-host
这个使得可以用另外一种方式来跟踪请求,我之前在监控一文说到过statsd,大家可以参看我之前写的博客「使用Statsd+Graphite+Grafana搭建web监控系统」,点击阅读原文。
同uWSGI一样我给一个简单的supervisor例子:
# gunicorn.conf.py
import multiprocessing
import socket
bind = '0.0.0.0:9527'
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = 'gevent' # 搭配gevent运行
daemon = False
proc_name = 'yourproject'
pidfile = '/data/run/gunicorn.pid'
loglevel = 'error'
accesslog = '/data/yourproject/supervisor/gunicorn.access.log'
errorlog = '/data/yourproject/supervisor/gunicorn.error.log'
max_requests = 200000
# StatsD integration
# StatsD host is omitted here, please append `--statsd-host` to gunicorn
# statsd_host = 'localhost:8125'
statsd_prefix = socket.gethostname()
复制代码
上面说下为什么worker数目是CPU核数*2+1,这个没有太多科学依据,主要是根据一个work进行读写操作,另一个work处理请求,具体可以根据自己情况进行配置。更多特殊配置,大家可以进行自行查阅文档。
supervisor & nginx & docker-compose
supervisor同上篇文章使用Docker容器化部署实践之Django应用部署(一)一样,唯一变化的就是我们command从uUWSGI变为了gunicorn,这里我就不多列出来supervisor完整配置了。
[program:gunicorn]
command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py
directory=/path/to/project
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
复制代码
Nginx同上篇文章一样,我这里列一个简单的样例:
server {listen 80;server_name example.org;access_log /var/log/nginx/example.log;location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
复制代码
docker-compose配置同之前文章一样,内容较多,就不列出来了。可以参考上篇文章使用Docker容器化部署实践之Django应用部署(一)的配置。
说到最后
今天我们主要阐述了Django部署使用的第二种方式,实际上这个过程和没有docker几乎差不多的,你可以剥离掉docker,对你整个过程没有太大影响。
同样的我整个部署过程阐述的过程比较简单,实际情况会多少有些出入,不知道你听懂了么?欢迎大家给我留言,我们一起讨论。
Docker容器化部署相关我们下一篇我们聊聊Kubernets这个大杀器。
相关文章:
使用Docker容器化部署实践之Django应用部署(一)
Docker 容器化部署实践之Dockerfile
Docker容器化部署实践Docker Compose
Docker 容器化部署实践--入门
Linux系列开坑记(一)-常用的3个命令
免费加入,一起进步
容器化部署实践之Django应用部署(二)相关推荐
- Coding-Job:从研发到生产的容器化融合实践
大家好,我是来自 CODING 的全栈开发工程师,我有幸在 CODING 参与了 Coding-Job 这个容器化的编排平台的研发.大家对 CODING 可能比较了解, Coding.net 是一个一 ...
- DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结
本文讲的是DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结[编者的话]本文分享了唯品会数据库Docker的异地容灾项目实践经验,项目中针对用户数据库的异地恢复场景的需求进行 ...
- 拉勾网基于UK8S平台的容器化改造实践
写在前面 拉勾网于2019年3月份开始尝试将生产环境的业务从UHost迁移到UK8S,截至2019年9月份,QA环境的大部分业务模块已经完成容器化改造,生产环境中,后台管理服务已全部迁移到UK8S,部 ...
- 拉勾网基于 UK8S 平台的容器化改造实践
写在前面 拉勾网于 2019 年 3 月份开始尝试将生产环境的业务从 UHost 迁移到 UK8S,截至 2019 年 9 月份,QA 环境的大部分业务模块已经完成容器化改造,生产环境中,后台管理服务 ...
- 公开课|百度天工物联网基础平台的微服务容器化落地实践
本文整理自中信出版社<物联网时代> 在采用IoT的世界中,改变既是IoT引发的,也是你的生活中无法回避的事实. 弗洛伦斯·赫德森,是Internet2(Internet2,即I2,是指由美 ...
- 节省服务器成本50%以上!独角兽完美日记电商系统容器化改造实践
完美日记创立于2017年,这家公司上线不到两年即成为天猫彩妆销冠,2019年成为11年来第一个登上天猫双十一彩妆榜首的国货品牌,包揽天猫2019全年彩妆销冠:2020年4月成为首个亮相天猫超级品牌日的 ...
- Qunar 云原生容器化落地实践
作者|邹晟 去哪儿网基础平台技术专家 背景 近几年,云原生和容器技术非常火爆,且日趋成熟,众多企业慢慢开始容器化建设,并在云原生技术方向上不断的探索和实践.基于这个大的趋势, 2020 年底 Quna ...
- 云原生|Qunar 云原生容器化落地实践
背景 近几年,云原生和容器技术非常火爆,且日趋成熟,众多企业慢慢开始容器化建设,并在云原生技术方向上不断的探索和实践.基于这个大的趋势, 2020 年底 Qunar 也向云原生迈出了第一步--容器化. ...
- 去哪儿网业务大规模容器化最佳实践
作者:邹晟,去哪儿网基础架构团队高级 DevOps 工程师,现主要负责 CI/CD 平台开发与维护,云原生技术研究与实现.同时也是 KubeSphere Talented Speaker. 陈靖贤,去 ...
最新文章
- 打造标杆,中科院人工智能战队发布新一代智算平台
- java个人学习笔记:javaBean
- 初步了解Windows Safer API
- .NET技术学习目录整理
- ASA IPSEC ×××配置
- OpenLDAP / ubuntu 18.04 下源码编译及安装说明
- 这个textview有问题吗 为什么一使用就崩溃
- printf函数讲解
- js学习总结----字符串和Math综合应用-验证码(4位)
- 字典树从第i个构造HDU2846
- 1022: [SHOI2008]小约翰的游戏John - BZOJ
- 硬件信息修改工具 支持修改机器码 硬盘 MAC 等信息
- cdlinux中minidwep的使用
- onselect事件在表单元素中的使用
- 信息孤岛的形成与治理
- 数理统计内容整理(一)基本概念
- CSTC-2017-Web-writeup
- 粒子群算法(PSO)优化最小二乘支持向量机回归预测,PSO-LSSVM回归预测,多输入单输出模型。
- Keil MDK 安装pack包
- 色温所对及应的RGB颜色表
热门文章
- Quartz.NET的管理工具
- Linux命令之ssh
- systemd系统服务管理详解
- 14个顶级开发社区 [程序员]
- 小黑小波比.点击头像直接上传的实现
- Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析--csdn 曹胜欢...
- error: device not found - waiting for device -
- jQueryDOM操作
- leetcode 【 Find Peak Element 】python 实现
- android graphic:canvas