• Django 使用 Nginx + uWSGI 启动


    一、前言

    购买了腾讯云服务器练习 Django 项目时,

    # 最开始用的启动 Django 项目命令

    python3 manage.py runserver 0.0.0.0:80

    后面发现我一旦把 xshell 窗口关闭,Django 项目就宕机了,无法访问。

    之后学了一个新的启动命令,使用后台常驻模式,

    # 改进后的命令

    nohup python3 manage.py runserver 0.0.0.0:80 > /dev/null 2> /dev/null &

    这时候关了 xshell 窗口,Django 项目也能访问了。

    开心了一小阵子,
    随后,发现性能差得离奇,就两个并发用户访问,都会挂掉的那种,吐血。
    查阅资料发现,使用 python3 manage.py runserver 只能用于单人调试,不能用于生产环境,可怜兮兮的我居然一直以为这是正确的启动方式。

    二、Django + uWSGI + Nginx 搭建

    (1)uWSGI

    概念性的东西,请看大神们的博客,写得很清晰明了

    传送门:

    https://blog.csdn.net/CHENYAoo/article/details/83055108
    https://www.cnblogs.com/new-rain/p/10089941.html

    下面讲一讲搭建
    首先,非常遗憾的说,Windows 是无法安装使用 uWSGI 的,网上很多教程说安装 MinGW Installer 的,我试了也不行,只能运行在 Linux 上面
    进入正题

    # 安装模块

    pip3 install uwsgi

    然后在项目根目录(跟 manage.py 同一层级的)新建文件 uwsgi.ini

    写入内容,备注表明了3个地方是需要根据你自己的情况来修改的

    [uwsgi]
    # (1)第一处修改的地方
    # 这个地方有个坑,就是假如你是买的云主机,那么你的内网ip不是127.0.0.1,而是要去云服务器控制台看的
    # socket = 你的服务器内网的ip地址:8889
    http = 你的服务器内网的ip地址:8889
    # (2)第二处修改的地方
    # 项目根目录
    chdir = 项目根目录的绝对路径
    # (3)第三处修改的地方
    wsgi-file = 项目名称/wsgi.py
    
    master = True
    processes = 4
    threads = 2
    pidfile = uwsgi.pid
    daemonize = uwsgi.log

    接下来,测试一下,不再使用 python3 manage.py runserver 启动,而是改成

    uwsgi --ini uwsgi.ini

    用 ps aux | grep uwsgi 有没有启动进程,或者访问 你的服务器内网的ip地址:8889 能不能访问到 Django的页面
    测试完了,停掉 uwsgi,使用命令

    uwsgi --stop uwsgi.pid

    (2)Nginx

    安装 Nginx 的,网上一堆教程,这里就不写了
    第一步,为了让 Nginx 接管,需要修改上面 uwsgi.ini 文件,就是把 http 换成 socket

    socket = 你的服务器内网的ip地址:8889
    # http = 你的服务器内网的ip地址:8889

    第二步,需要改 Nginx 的配置文件,我的配置文件在 /usr/local/nginx/conf,这个路径根据个人情况而定,

    vim nginx.conf

    在 http{} 里面的 server{} 里面添加内容

    location / {
      include uwsgi_params;
      uwsgi_pass 你的服务器内网的ip地址:8889;
    }

    保存,重启 Nginx,启动 uwsgi,访问 80 端口,如果看到你的项目,说明就正确了

    (3)静态资源的问题
    这时候,你会发现网站的图片啊、样式啊,都是无法显示的,是因为静态文件的原因
    第一个要改的,项目的 settings.py
    加一句

    STATIC_ROOT = os.path.join(BASE_DIR, 'static_all')

    然后执行命令

    python3 manage.py collectstatic

    第二个要改的,Nginx 的配置文件

    vim nginx.conf

    在 http{} 里面的 server{} 里面添加内容

    location /static {
      alias 项目根目录的绝对路径/static_all/;
    }

    之后,重启 Nginx 和 uwsgi ,就完成了

  • 相关阅读:
    Vue 使用百度地图 实现搜索 定位
    VUE npm run dev 启动时,报了一大堆错误 Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 7.x
    git 更换push 提交地址
    vue 拖拽框架 draggable
    VUE axios请求 封装 get post Http
    关于git 远程仓库账户密码错误的问题
    输入交互(一)
    8.实战交付一套dubbo微服务到k8s集群(1)之Zookeeper部署
    7.kubernetes集群版本升级
    6.kubernetes的GUI资源管理插件-dashboard
  • 原文地址:https://www.cnblogs.com/yebaofang/p/12171260.html
Copyright © 2020-2023  润新知