• centos下Django+uwsgi+nginx


    本篇章主要讲解uwsgi和nginx的作用,并利用两者对django项目进行部署

    一、概述

      在开发过程中,我们一般是在该项目的虚拟环境中启用django自带的web服务:python manage.py runserver 0.0.0.0:8000

    自带的web服务仅仅是单线程运行,无法处理较高的访问数据

    项目需要部署最好还是利用uwsgi搭建,它具有高性能,低内存,多app管理,多线程等功能,搭配nginx实现部署

     二、uwsgi和nginx的作用和区别

      参考博客:https://blog.csdn.net/dqchouyang/article/details/81639788

      1.nginx是对外的服务器,客户请求url通过nginx处理(反向代理)

        2. uwsgi对内的服务器,主要处理静态文件和动态请求

        3.uwsgi处理动态请求能力高,但对于静态请求(如static文件,css,js文件等)处理能力差

      

     三、uwsgi配置

      3.1、安装uwsgi服务

        在确保该项目可以跑动:python manage.py runserver 0.0.0.0:8000

        uwsgi是python的一个模块

    pip install uwsgi

       3.2 、相关配置

     3.2.1、通过命令行启动

    假设项目自带虚拟环境,需要到虚拟环境下启动:
    uwsgi --http 172.21.0.2:8000 --file teacher/wsgi.py --static-map=/static=static

    --http 这个就和runserver一样指定IP 端口
    --file 这个文件就里有一个反射,如果你在调用他的时候没有指定Web Server就使用默认的
    -- static 做一个映射,指定静态文件

    访问:wget
    192.168.31.123:8080
    
    

     3.2.2、通过配置文件实现

    目录结构如下

    本项目名为:LibrarySystem
    结构如下:
    ----web-item
         ---LibrarySystem
              --LibrarySystem
                    -settings.py
                    -wsgi.py
              --manage.py    
              --static
              --venv        
         ---script
             --uwsgi.ini

    在某个目录下创建配置文件 xxx.ini(最好在项目的同目录下创建,便于管理)

    注意点:在socket和http两者中,在单独配置uwsgi只需要配置http,需要uwsgi+nginx使用需要配置socket

    [uwsgi]
    # 项目目录 
    chdir=web-item/LibrarySystem/
    #指定虚拟环境目录                       #假设在不在虚拟环境下启动uwsgi,需要配置虚拟环境目录
    home=web-item/LibrarySystem/venv
    # 指定项目的application
    module=LibrarySystem.wsgi:application
    # 指定sock的文件路径
    #socket=127.0.0.1:8001            #sock或http只能指定其中一个,其中在和nginx配合使用需要指定socket
    #需要指定的地址是内网地址eth0
    http=172.21.0.2:8000
    # 进程个数
    workers=5
    pidfile=web-item/script/uwsgi.pid
    #指定wsgi文件
    wsgi-file=LibrarySystem/wsgi.py
    # 指定静态文件
    static-map=/static=web-item/LibrarySystem/static
    # 启动uwsgi的用户名和用户组
    uid=root
    gid=root
    # 启用主进程
    master=true
    # 自动移除unix Socket和pid文件当服务停止的时候
    vacuum=true
    # 序列化接受的内容,如果可能的话
    thunder-lock=true
    # 启用主进程
    master=true
    # 自动移除unix Socket和pid文件当服务停止的时候
    vacuum=true
    # 序列化接受的内容,如果可能的话
    thunder-lock=true
    # 启用线程
    enable-threads=true
    # 设置自中断时间
    harakiri=30
    # 设置缓冲
    post-buffering=4096
    # 设置日志目录
    daemonize=web-item/script/uwsgi.log

     3.3.3、启动uwsgi

    在uwsgi.ini目录下执行命令:

      /usr/local/python3/bin/uwsgi --ini uwsgi.ini

     3.3.4、Django项目中静态文件的处理 

      将Django的静态文件集中起来,Django为此有专门的工具

      现在Django的Settings文件中加上StATIC_ROOT,把静态文件都集中到这个路径下

    STATIC_ROOT = os.path.join(BASE_DIR, "static/")  

      执行命令

    python3 ./manage.py collectstatic

    3.3.5 访问django项目

    wget 172.21.0.2:8000

    成功则实现uwsgi的部署,失败则查看是否配置出错或是否在虚拟环境下执行

    3.3.6 管理uwsgi

    执行:
        uwsgi --ini uwsgi.ini
    停止(需要添加相关配置):
      
    uwsgi --reload uwsgi/uwsgi.pid    
    查看状态(需要添加相关配置):
      uwsgi --connect-and-read uwsgi.status
    停止方法二:
      查看uwsgi的pid
        ps aux | grep uwsgi
      停止相关pid
        kill -9 pid

    四、nginx配置

      1.安装nginx

    yum install uginx

         2.准备工作

      2.1 确保存在uwsgi_params

    确保nginx.conf的同目录下有uwsgi_params文件(/etc/nginx/conf/uwsgi_params),没有的话根据链接获取

        2.2 nginx的默认配置文件目录(nginx.conf)的路径

    nginx -t
    
    默认显示内容:
        nginx: the configuration file /etc/nginx/conf/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/conf/nginx.conf test is successful

    里面说明了nginx默认配置文件的路径是:/etc/nginx/conf/nginx.conf;

        3. 在项目下新建目录nginx_cof(看你需求是否需要集中管理)

       3.1 修改nginx配置

      把/etc/nginx/nginx.cof复制到该目录下并把相关内容作如下修改

    server {
        listen 80;
        server_name localhost;
        charset     utf-8;
        access_log      目录/nginx_cof/nginx_access.log;    #
        error_log       目录/nginx_cof/nginx_error.log;
        client_max_body_size 75M;
    
    
        location /static {
            alias 你的项目路径/static;
        }
    
        location / {
            include     /etc/nginx/conf/uwsgi_params;
            uwsgi_pass  127.0.0.1:8001;          #必须确保和uwsgi中的socket一致
        }
    }

        3.2  加载nginx文件

    nginx -c /wwwroot/destiny/destiny.conf

    通过 nginx -t查看是否加载成功

        

        

  • 相关阅读:
    uniapp 添加操作
    uniapp 页面跳转传值和接收
    网易移动端适配
    vue中使用better-scroll封装scroll组件
    时间格式化
    自定义rem适配
    在antd中封装ajax
    封装axios
    vue-cli使用proxy代理
    自定义工具函数
  • 原文地址:https://www.cnblogs.com/tang-s/p/10623616.html
Copyright © 2020-2023  润新知