美文网首页Django - 开发站点
Django NBA Web开发 - Step 17 Djang

Django NBA Web开发 - Step 17 Djang

作者: AllenBigBear | 来源:发表于2019-07-22 13:54 被阅读0次

    上一篇里面反常规地记录了只用django的开发服务器来接受外部的访问。
    这篇开始要开始正常的部署服务器了,区别就是要加上nginx和gunicorn了。

    1:官方文档

    官方文档里面已经明确说了,开发服务器不要用于生产环境提供静态文件。


    文档讲解

    2:配置Nginx

    理论上来说,Nginx的配置文件在/etc/nginx/nginx.conf
    你可以在这个文件里面直接修改配置,不过因为这样做容易污染源文件,所以在这个conf文件内部,有一句语句是
    include /etc/nginx/sites-enabled/*
    这个意思就是会加载sites-enabled下面的配置文件
    而sites-enabled是允许哪些配置文件,那源文件配置文件在哪呢?
    在/etc/nginx/sites-available里面
    比如我在这个文件夹下面创建了一个allen.com的配置文件,你要把让他生效,就可以用软链接指向到sites-enabled里面去。
    sudo ln -s /etc/nginx/sites-available/allen.com /etc/nginx/sites-enabled/allen.com

    随后,我们就要编辑这个配置文件的内容了

    server {
        charset utf-8;
        listen 80;
        server_name www.allenbigbear.com;
    
        location /static {
            alias /home/allen/NBAsite/NBAsite/collected_static; 
            #这一行用来定位静态文件夹的位置
        }
    
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://0.0.0.0:8000;
            #最后一行很重要,要写0.0.0.0
        }
    }
    

    随后,在你项目的settings.py里面,需要设置STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

    之后,运行一下 python manage.py collectstatic这个命令,他会把所有有关系的静态文件,包括每个app下的,还有STATICFILES_DIR路径下的,都拷贝到上面STATIC_ROOT里面,放在Nginx集中使用

    3:效果

    运行Gunicorn命令
    gunicorn NBAsite.wsgi:application -b 0.0.0.0:8000

    静态文件加载成功

    4: 进程管理工具Supervisor

    程序可以运行了,那万一进程挂了什么的,怎么办呢?不可能自己24小时监控吧。
    所以我们引入这个进程管理工具,来监控。

    安装:supervisor的安装,不用装在虚拟环境下,直接sudo apt-get 就好了

    配置:来说一下关于supervisor的配置
    实际使用中一共有2个命令,一个是supervisord,这个是启动服务端
    一个是supervisorctl,这个是启动客户端,所以说supervisor实际上是一个C/S形式的应用。
    安装完以后,你可以用echo_supervisord_conf来看一下当前的配置
    总的配置文件,在etc/supervisor/supervisord.conf里面,而在这个配置文件的最下面,你可以看到

    [include]
    files = /etc/supervisor/conf.d/*.conf or *ini
    

    他就相当于自动把conf.d这个文件夹下你自定义创建的配置文件,全部导入了。

    自己项目并启动服务端:在conf.d下面创建自定义的配置 sudo touch allen.conf
    并写入关于自己项目的配置

    [program:NBAsite]
    directory = /home/allen/NBAsite/NBAsite  程序的启动目录
    command = /home/allen/NBAsite/env/bin/gunicorn -b 0.0.0.0:8000   启动命令
    autostart = true     在 supervisord 启动的时候也自动启动
    startsecs = 5        启动 5 秒后没有异常退出,就当作已经正常启动了
    autorestart = true   程序异常退出后自动重启
    startretries = 3     启动失败自动重试次数,默认是 3
    user = leon          用哪个用户启动
    redirect_stderr = true  把 stderr 重定向到 stdout,默认 false
    stdout_logfile_maxbytes = 20MB  stdout 日志文件大小,默认 50MB
    stdout_logfile_backups = 20     stdout 日志文件备份数
    #stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
    stdout_logfile = /home/allen/NBAsite/env/allen.log
    

    然后启动服务端supervisord -c /etc/supervisor/supervisord.conf
    完成之后再启动客户端supervisorctl -c /etc/supervisor/supervisord.conf

    这样,整个部署就完成了。

    参考资料:
    http://liyangliang.me/posts/2015/06/using-supervisor/
    http://supervisord.org/configuration.html

    相关文章

      网友评论

        本文标题:Django NBA Web开发 - Step 17 Djang

        本文链接:https://www.haomeiwen.com/subject/hzhmlctx.html