`
wx1568016009
  • 浏览: 23558 次
文章分类
社区版块
存档分类
最新评论

容器化部署实践之Django应用部署(二)

 
阅读更多

预计阅读3分钟


640?wx_fmt=png

上一篇文章有些同学感觉不够详细理解起来有些困难,我再来简单解释一下。

我们在开发的情况下:

部署到线上的情况:

在整个部署过程中,我们加了一层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.py
    def 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,对你整个过程没有太大影响。

同样的我整个部署过程阐述的过程比较简单,实际情况会多少有些出入,不知道你听懂了么?欢迎大家给我留言,我们一起讨论。

640?wx_fmt=jpeg

相关文章:

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

Docker 容器化部署实践之Dockerfile

Docker容器化部署实践Docker Compose

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

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

640?wx_fmt=jpeg

免费加入,一起进步

分享到:
评论

相关推荐

    仿bilibili动画网站,推荐算法使用UserCF,django+vue3+vite+nginx+docker容器化部署

    在本项目中,Docker被用来打包和部署Django应用、Vue3构建后的前端代码以及Nginx服务器。通过Docker Compose或Kubernetes等工具,我们可以轻松地管理这些容器,实现一键部署和扩展。 综上所述,这个项目展示了如何...

    django+cas环境部署

    ### django+cas环境部署知识点详解 #### 一、系统架构概述 本系统采用了Django作为主要的应用框架,并结合了Nginx、Elasticsearch、CAS(Central Authentication Service)及MySQL等多个组件来构建一个完整的分布式...

    手把手的 django-docker-mysql-nginx-gunicorn 部署教程

    这是教你手把手部署 Docker + Django + Mysql + Ngnix + Gunicorn 的傻瓜式教程,目的是让 Docker 菜鸟也能快速部署容器化的 Django 应用。 特色: 零基础、免费、中文、完整项目代码 基于最新的 Docker 19.03.1、...

    腾讯云部署Django项目的测试代码,很简单的代码。

    在部署Django项目时,我们需要确保所有这些组成部分都已准备就绪。 1. **创建并配置Django项目** - 使用`django-admin startproject`命令创建一个新的Django项目,例如名为"MyDjango"。 - 在项目目录下,创建应用...

    HelloDjango - Django博客教程(第二版)-追梦人物的博客.pdf

    这部分内容涵盖了前后端分离、RESTful API开发、前端工程化、容器化部署等方面的知识。 4. Django全栈开发系列教程:作者计划推出一个全栈开发的教程系列,涉及从基础的Django开发到后端API开发,再到前端的Vue应用...

    基于python3+django+Vue自动化测试平台开发

    Docker容器化技术可以简化部署流程,保证环境一致性。使用Nginx作为反向代理和负载均衡,Gunicorn作为WSGI服务器,能有效提高服务的稳定性和性能。 总结来说,这个项目将涉及Python3作为主要编程语言,Django作为...

    Django博客应用程序部署在AWS应用程序负载平衡器上,具有自动扩展、S3、关系数据库服务.zip

    在这个Django博客应用程序的部署方案中,我们看到了一系列先进的云技术的综合运用,主要涉及到AWS(Amazon Web Services)的一些核心服务。首先,我们要理解Django是一个强大的Python Web框架,用于构建高效、可维护...

    meiduo:Django + Vue 前后端分离商城项目,采用Docker双容器部署nginx + uwsgi

    部署方式:docker容器部署 nginx(vue) + uwsgi(django) 给出体验地址: 121.4.47.229:8080 因为钉钉、QQ、支付宝等回调地址的原因,为了更好的体验,请在本机hosts中添加: 121.4.47.229 image.meiduo.site 121.4.47...

    salt-django-example, Django 部署的salt状态树示例.zip

    salt-django-example, Django 部署的salt状态树示例 salt-django-example将 Django 应用程序部署到生产服务器的salt状态树。堆栈__Ubuntu: 包名称和堆栈的其他部分只与Ubuntu一起使用为wsgi容器提供反向代理,并为 ...

    eb-docker-django-simple:一个在 docker 容器中工作的简单 Django 应用程序,可部署到 AWS Elastic Beanstalk

    eb-docker-django-简单一个在 docker 容器中工作的简单 Django 应用程序,可部署到 AWS Elastic Beanstalk先决条件请参阅此目录中的INSTALL.md 。运行开发环境假设安装了 boot2docker 并且init -ed: 启动虚拟机 ...

    django最佳实践 html

    考虑使用Docker进行容器化部署,以提高环境一致性。 12. **性能优化**: 了解并应用缓存策略,如使用Django缓存框架、数据库查询优化、使用Memcached或Redis。注意数据库索引设计,减少数据库查询次数。 通过遵循...

    Docker实践之python应用容器化

    本文主要介绍python应用(django)跑在docker容器里,编写dockerfile实现镜像构建自动化以及docker神器compose。 二、编写Dockerfile文件 官网下载的python镜像比较精简,web应用相关依赖还是需要自己安装的。编写...

    django1.11 doc html版

    部署Django应用涉及到配置服务器、安装依赖、管理静态文件和媒体文件等步骤。Django提供了多种部署选项,如使用WSGI服务器或Gunicorn。 12. **安全** Django内置了许多安全特性,如CSRF保护、XSS防护、SQL注入...

    Django实战入门项目.rar

    14. **部署**:学习如何将Django项目部署到服务器,如使用Nginx和Gunicorn,或者使用Docker容器化部署。 15. **错误调试与日志记录**:学习如何处理和调试Django中的错误,以及如何配置日志系统以跟踪应用程序的...

    Django开发文档

    - **生产环境**: 如何将 Django 应用部署到生产环境。 - **服务器选择**: 选择适合的服务器类型。 **4.7 升级 Django 至新版本** - **版本差异**: 新旧版本的主要差异。 - **升级步骤**: 升级的具体步骤。 **4.8 ...

Global site tag (gtag.js) - Google Analytics