• ubuntu配置Python-Django Nginx+uwsgi 安装配置


    安装Nginx

    sudo apt-get install nginx

    ubantu安装完Nginx后,文件结构大致为:
      所有的配置文件都在 /etc/nginx下;
      启动程序文件在 /usr/sbin/nginx下;
      日志文件在 /var/log/nginx/下,分别是access.log和error.log;
      并且在 /etc/init.d下创建了启动脚本nginx。  

    sudo /etc/init.d/nginx start    # 启动
    sudo /etc/init.d/nginx stop     # 停止
    sudo /etc/init.d/nginx restart  # 重启

    使用浏览器访问  localhost  出现界面    (局域网通过地址输入ip地址,如:http://192.168.1.90/ )

    sudo apt-get install python3-dev
    sudo pip3 install uwsgi

    注意:

    如果未安装python3 ,

    使用:sudo apt-get install python3.6

    如果pip3 提示:

    wuchao@ubuntu:~$ pip3 install uwsig

    Command 'pip3' not found, but can be installed with:

    sudo apt install python3-pip
    解决方案使用: sudo apt install python3-pip

    至于为什么要使用uwsgi,可以参见这边博客:快速部署Python应用:Nginx+uWSGI配置详解(1)
    这样大体的流程是:nginx作为服务器最前端,负责接收client的所有请求,统一管理。静态请求由Nginx自己处理。非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。
    通信原理是:
    the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django

    测试uwsgi

    在Django项目下新建test.py文件,

    # test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        #return ["Hello World"] # python2
        return [b"Hello World"] # python3

    然后执行shell命令:

    uwsgi --http-socket :8001 --plugin python --wsgi-file test.py

    注意:如果uwsgi提示无命令 ,使用pip3 uninstall uwsgi 卸载 ,再使用 pip3 install uwsgi 重新安装

    加上--plugin python3是告诉uWSGI在使用python插件,不然很有可能会出现类似这样的错误:

    uwsgi: unrecognized option '--wsgi-file'
    getopt_long() error

    执行成功在浏览器中打开:http://localhost:8001显示Hello World说明uwsgi正常运行。



    测试Django

    首先得保证Django项目没有问题

    sudo apt install python-django #安装django
    django-admin startproject blog #创建blog项目
    cd blog #进入项目
    python3 manage.py runserver 0.0.0.0:8001 #运行django项目

    浏览器访问:localhost:8001

    然后链接Django和uwsgi,实现简单的web服务器,到Django项目目录下执行shell:

    uwsgi --httlocalhost:8001 --plugin python3 --module blog.wsgi

    blog为你的项目名。访问http://localhost:8001,项目正常。注意这时项目的静态文件是不会被加载的,需要用nginx做静态文件代理。

    配置uwsgi

    uwsgi支持通过配置文件的方式启动,可以接受更多的参数,高度可定制。我们在Django项目目录下新建uwsgi.ini

    在django项目project目录下(manage.py下)创建配置文件分两种 ini
    # myweb_uwsgi.ini file
    [uwsgi]
    # 指定IP端口
    socket = :8081
    # 项目目录
    chdir           = /home/wuchao/blog
    # 指定项目的 wsgi 文件
    module          = blog.wsgi
    # process-related settings
    # 启用主进程
    master          = true
    # maximum number of worker processes
    processes       = 4
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    # pidfile for record run pid
    pidfile        =pid.uwsgi
    # 设置日志目录
    daemonize    = UWSGI.log

    在shell中执行:

    sudo uwsgi --ini uwsgi.ini 

    ps:如果实在不想配置nginx的话,单uwsgi就已经能完成部署了(把socket换成http),你可以把Django中的静态文件放到云平台中如七牛等等,这样你的Web也能被正常访问。

    配置nginx

    nginx默认会读取/etc/nginx/sites-enabled/default文件中的配置,修改其配置如下:追加内容如下

    注意:如果文件为只读 使用chmod修改权限: sudo chmod 777  /etc/nginx/sites-enabled/default

    server {
        # 你的网站将会监听的端口号,如果监听80端口,部署后访问localhost自动跳转到nginx默认的欢迎界面
        listen      8002;
        # 绑定的域名
        server_name 127.0.0.1; # substitute your machine's IP address or FQDN
        charset     utf-8;
    
        # 最大上传速率
        client_max_body_size 75M;   # adjust to taste
    
        # Django media(设置成自己的路径)
        location /media  {
            alias /home/wuchao/blog/media;  # 您的Django项目的媒体文件——根据需要进行修改
        }
        #Django 静态文件路径(设置成自己的路径)
        location /static {
            alias /home/wuchao/blog/static; # 您的Django项目的静态文件——根据需要进行修改
        }
    
        # 最后,将所有非媒体请求发送到Django服务器
        location / {
            include     uwsgi_params; # the uwsgi_params file you installed
            uwsgi_pass 127.0.0.1:8001;
        }
    }

    重启nginx

    sudo /etc/init.d/nginx restart

    注意:重启失败则配置文件修改错误

    修改项目中setting.py 配置文件28行:

    ALLOWED_HOSTS = ['*']

    通过本地ip地址:8002访问。如:localhost:8002  或者ip:8002





     
  • 相关阅读:
    一本通 1259:【例9.3】求最长不下降序列
    一本通 1258:【例9.2】数字金字塔
    洛谷 P1198 [JSOI2008]最大数
    洛谷 P2863 [USACO06JAN]牛的舞会The Cow Prom
    【BZOJ1062】糖果雨(NOI2008)-数形结合+二维树状数组
    【BZOJ4070】雅加达的摩天楼(APIO2015)-分块+最短路
    【BZOJ2326】数学作业(HNOI2011)-递推+矩阵快速幂
    【BZOJ2734】集合选数(HNOI2012)-状压DP
    【BZOJ3213】抛硬币(ZJOI2013)-期望DP+KMP+高精度
    【BZOJ3590】Quare(SNOI2013)-状压DP
  • 原文地址:https://www.cnblogs.com/wu-chao/p/9114432.html
Copyright © 2020-2023  润新知