• day66:Linux:nginx+uwsgi+django跑python项目


    目录

    0.uwsgi简述

    1.使用uwsgi+django运行demo

    2.nginx+uwsgi+django跑pythonav项目

    0.uwsgi简述

    1.什么是wsgi

    WSGI,全称Web Server Gateway Interface,是作为python语言定义的web服务器和web应用程序之间的一种简单通用的接口。

    WSGI的官方定义,the Python Web Server Gateway Interface。从名字就可以看出来,这是一个Gateway网关。name网关的作用就是在协议之间进行切换

    也就是说,WSGI就像是一座桥梁,一边连着web服务器,另一边连着web应用程序

    2.什么是uWSGI

    uWSGI实现了WSGI、HTTP等数据交换协议、简单来说,我们将项目通过uwsgi方式运行,就可以直接对外提供服务,而无需依托于nginx。

    3.uWSGI为什么需要nginx?

    通常情况下Python中的django框架或Flask框架可以通过uwsgi方式对外提供服务。为什么还需要nginx呢?

    1.安全:后端服务直接以http对外提供访问,往往会暴露后端的真实服务,如果使用nginx可以很好的隐藏后端的服务,并且nginx能够实现安全限制、Rewrite、HTTPS等功能。(这些都是uwsgi无法实现的)

    2.效率nginx可以直接处理静态资源,然后将动态内容通过uwsgi协议转发给后端django,实现动静分离,提供更好的请求与响应。

    1.使用uwsgi+django运行demo

    step1.安装python3环境

    yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel 
    sqlite-devel gcc gcc-c++  openssl-devel zlib zlib-devel python3 python3-devel -y

    step2.安装django框架和uwsgi

    pip3 install -i https://mirrors.aliyun.com/pypi/simple/ --upgrade pip
    pip3 install -i https://mirrors.aliyun.com/pypi/simple/ django==2.1.8
    pip3 install -i https://mirrors.aliyun.com/pypi/simple/ uwsgi

    step3.配置django工程

    [root@oldboy-pythonedu demosite]# cd /opt/
    [root@oldboy-pythonedu opt]# django-admin.py startproject demosite
    [root@oldboy-pythonedu opt]# cd demosite/
    [root@oldboy-pythonedu demosite]# python3 manage.py runserver 0.0.0.0:9999        # 启动测试

    step4.配置uwsgi

    [root@oldboy-pythonedu opt]# cat /opt/demosite/uwsgi.ini 
    [uwsgi]
    #uwsgi监听的端口
    socket = 127.0.0.1:9999
    #uwsgi启动进程数
    workers = 2
    #最大接收的请求数
    max-requests = 1000
    #buffer缓冲区大小
    buffer-size = 30000
    #进程pid存放路径
    pidfile = /run/uwsgi.pid
    #uwsgi日志存储路径
    daemonize = /var/log/uwsgi.log
    
    
    [root@oldboy-pythonedu demosite]# uwsgi --ini /opt/demosite/uwsgi.ini
    [root@oldboy-pythonedu demosite]# netstat -lntp | grep 9999
    tcp        0      0 127.0.0.1:9999          0.0.0.0:*               LISTEN      9827/uwsgi

    step5.配置nginx

    [root@oldboy-pythonedu opt]# cat /etc/nginx/conf.d/uwsgi.oldboyedu.com.conf 
    server {
        listen 80;
        server_name uwsgi.oldboyedu.com;
        client_max_body_size 100M;
        index index.html;           #默认返回页面
    
        location / {
            uwsgi_pass 127.0.0.1:9999;
            uwsgi_param UWSGI_CHDIR /opt/demosite;  #工程所在的路径
            uwsgi_param UWSGI_SCRIPT demosite.wsgi; #demosite/wsgi接口文件
            include uwsgi_params;
        }
    }

    2.nginx+uwsgi+django跑pythonav项目

    step1.下载项目包文件

    cd /code/
    wget http://cdn.xuliangwei.com/pythonav.zip
    unzip pythonav.zip
    pip3 install -i https://pypi.doubanio.com/simple/ -r /code/pythonav/requirements.txt

    step2.在10.0.0.202创建一个名字为pythonav的数据库

    create database pythonav;

    step3.更改pythonav项目的配置文件(配置数据库)

    vim pythonav/pythonav/settings.py
    # ################### MySQL ###################
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'pythonav',
            'USER': 'all',
            'PASSWORD': 'Oldxu.com123',
            'HOST': '10.0.0.202',
            'PORT': '3306',
        }
    }

    step4.更改pythonav项目的配置文件:ALLOW_HOST

    ALLOW_HOST=['*']

    step5.数据库迁移+创建超级用户+收集静态资源

    python3 manage.py makemigrations
    python3 manage.py migrate
    python3 manage.py createsuperuser
    python3 manage.py collectstatic

    step6.修改pythonav项目中的uwsgi的配置文件

    vim pythonav_uwsgi.ini
    [uwsgi]
    #uwsgi监听的端口
    socket = 127.0.0.1:8811
    chdir = /code/pythonav/
    wsgi-file = pythonav/wsgi.py
    #uwsgi启动进程数
    processes = 4
    threads = 10
    #最大接收的请求数
    max-requests = 1000
    #buffer缓冲区大小
    buffer-size = 30000
    #进程pid存放路径
    pidfile = /run/uwsgi-pythonav.pid
    #uwsgi日志存储路径
    daemonize = /var/log/uwsgi-pythonav.log

    step7.修改nginx配置文件

    [root@oldboy-pythonedu pythonav]# cat /etc/nginx/conf.d/pythonav.oldboyedu.com.conf 
    server {
        listen 80;
        server_name pythonav.oldboyedu.com;
        client_max_body_size 100M;
    
        location /static {
            alias /code/pythonav/static;
        }
        
        location / {
            uwsgi_pass 127.0.0.1:8811;
            include uwsgi_params;
        }
    }

    Tip:一个停止指令

    kill $(ps -ef |grep bbs_uwsgi | grep -v grep  | awk '{print $2}' | xargs )

    总结

    当用Linux+nginx+uwsgi+django跑项目时,只需完成这五个步骤即可。

      1.安装模块

      2.配置数据库连接

      3.初始化数据库

      4.配置uwsgi

      5.配置nginx

  • 相关阅读:
    基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体基础
    用SignalR和Layui搭建自己的web聊天网站
    MySQL查看、修改字符集及Collation
    ASP.NET MVC中有四种过滤器类型
    一个简单的大转盘抽奖程序(附.NetCore Demo源码)
    网站统计中的访问信息收集的前端实现
    微信小程序实现按首字母检索城市列表
    微信小程序异步处理
    微信小程序下拉框
    node.js上传文件
  • 原文地址:https://www.cnblogs.com/libolun/p/13809151.html
Copyright © 2020-2023  润新知