IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用Nginx,Gunicorn,Virtualenv,Supervisor和MySQL搭建Django生产环境

    master发表于 2017-04-27 22:18:53
    love 0

    Django自带的开发者运行模式,是不适合直接运行在生产环境的。
    所以需要一个WSGI server来正式部署和运行Django项目,我的选择是Gunicorn。

    当然作为web入口的web server,我选择了非常流行的Nginx,使其直接服务静态文件的请求,并且转发动态请求给后端Gunicorn服务。

    为了让Gunicorn的保持运行状态,在其停止后可自动拉起,所以选择了supervisor这个进程管理工具。

    为了在服务器上构建独立的python运行环境,所以选择了virtualenv。

    当然,数据库还是选择我的老朋友MySQL,在CentOS 7.2 系统上可以yum直接安装mariadb。至于MySQL和mariadb的细节差别,对我来说无关紧要。

    关于 Django+MySQL+Gunicorn+Supervisor+Virtualenv 这个技术栈的环境搭建配置,主要还是参考:
    http://zqpythonic.qiniucdn.com/data/20130901152951/index.html

    这里只提几点注意事项:
    1. 生产环境,Django需要关闭debug模式

    DEBUG = False
    TEMPLATE_DEBUG = False
    ALLOWED_HOSTS = ['*']

    2. 使用supervisor来管理进程,不要启动daemon模式,所以我设置了gunicorn的“daemon=False”
    3. 上面那个参考文档中的,supervisor使用的.conf结尾的配置文件,但我在CentOS中yum安装的supervisord要求是使用.ini结尾的配置。
    以为它的supervisord.conf中配置有:

    [include]
    files = supervisord.d/*.ini

    4. nginx上让静态资源直接由nginx服务而不需要走gunicorn,我使用了try_files这个指令:

    location / {
                # checks for static file, if not found proxy to app
                try_files $uri @proxy_to_app;
            }

    5. 在CentOS 7.2 上,我使用的一些命令:

    pip install Django gunicorn
    sudo yum install -y epel-release
    sudo yum install -y nginx mariadb supervisor
    
    sudo supervisorctl reload
    sudo supervisorctl avail
    sudo supervisorctl status my_app
    sudo supervisorctl start my_app

    6. virtualenv是个好东西,virtualenv入门推荐这2篇:
    http://kuanghy.github.io/2015/12/04/virtualenv
    http://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html

    Original article: 使用Nginx,Gunicorn,Virtualenv,Supervisor和MySQL搭建Django生产环境

    ©2017 笑遍世界. All Rights Reserved.



沪ICP备19023445号-2号
友情链接