美文网首页
nginx+django+uwsgi部署阿里云服务器详解

nginx+django+uwsgi部署阿里云服务器详解

作者: 一大碗面丶 | 来源:发表于2018-11-12 14:34 被阅读0次

    阿里云服务器双十一搞活动,趁机低价入手了一只,但是把我的Django框架搭建起来的项目部署上去的时候遇到很多的问题,自己摆弄了一个星期,总算把部署流程搞清楚了,在此做下记录,供后人参考。
    一、概念
    开始部署之前最好先了解下相关概念,所谓知其然知其所以然

    Django: 一个MVC架构的Web框架, 自带wsgi和server功能
    Uwsgi: 一个高性能的cgi中间件,也提供Web服务器功能
    nginx: 一个免费开源并且高性能的HTTP服务器和反向代理
    Django 和 Uwsgi 都提供服务器功能,的确nginx并不是必须,但是要部署到生产环境,需要考虑到某些情况
    1 、安全问题:程序不能直接被浏览器访问到,而是通过nginx,nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在nginx上加上安全性的限制,可以达到保护程序的作用。
    2、负载均衡问题:一个uwsgi很可能不够用,即使开了多个work也是不行,毕竟一台机器的cpu和内存都是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡。
    3、静态文件问题:用django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个静态文件的处理都直接由nginx完成,静态文件的访问完全不去经过uwsgi以及其后面的东西。
    另外,Django虽然自带服务器功能,但性能不佳,仅仅用于测试开发阶段;uWsgi的服务器性功能没研究过,但它主要是一个Web服务器网关接口,服务器性能不是它的强项
    二、安装uwsgi

    pip install uwsgi
    

    安装完成后,下面来测试是否安装成功。上面说了uwsgi也能提供web服务功能,所以咱们创建一个test.py文件,然后启动uwsgi,在游览器中验证uwsgi是否运行成功,相关代码如下:

    pip install uwsgi //安装
    ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi //添加软链,以便在任何目录使用uwsgi
    # 新建test.py
    def application(env, start_response):
       start_response('200 OK', [('Content-Type','text/html')])
       return [b"Hello World"] # python3
       #return ["Hello World"] # python2
    
    # 启动
    uwsgi --http :8000 --wsgi-file test.py //8000端口随意设定
    

    然后我们可以在远程服务器的游览器里打开127.0.0.1:8000,或者自己本地的游览器中打开xx.xx.xx.xx:8000(公网IP:8000),显示hello world,证明安装成功。
    三、uwsgi配置
    在目录/home/www下创建jcdemo项目,然后创建一个jcapp

    cd /home/www
    django-admin startproject jcdemo
    cd jcdemo
    python manage.py startapp jcapp
    

    在项目根目录下创建uwsgi配置文件

    cd /home/www/jcdemo
    mkdir script //创建存放pid、log文件的路径
    vim jcdemo_uwsgi.ini //创建jcdemo_uwsgi.ini文件,把一下内容复制进去
    
    [uwsgi]
    socket = 127.0.0.1:9001  #内部端口,自定义
    chdir           = /home/www/jcdemo  #项目根目录
    module          = jcdemo.wsgi  #wsgi文件路径,wsgi文件是随创建项目的时候生成在
    master          = true
    processes       = 4
    vacuum          = true
    pidfile        =/home/www/jcdemo/script/uwsgi.pid  #生成pid文件
    daemonize    = /home/www/jcdemo/script/UWSGI.log  #生成日志文件    
    

    :wq保存
    三、nginx安装和配置nginx.conf

    cd /opt //源码安装的时候我一般把源码下载到这个路径
    wget http://nginx.org/download/nginx-1.13.7.tar.gz //下载
    tar -zxvf nginx-1.13.7.tar.gz //解压
    cd nginx-1.13.7
    ./configure
    make && make install  //nginx一般默认安装好的路径为/usr/local/nginx,
    ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx //添加软链,以便在任何目录使用nginx
    

    在/user/local/nginx/conf/中打开nginx.conf,做以下修改

    server {
        listen 8080; #暴露给外部访问的端口 
        server_name localhost; 
        charset utf-8; 
        location / { 
            include uwsgi_params; 
            uwsgi_pass 127.0.0.1:9001; #这个端口要和jcdemo_uwsgi.ini里socket保持一致,外部访问8080就转发到内部9001
         }    
         location /static/ { 
                alias /home/www/jcdemo/static/; #项目静态路径设置 
        }
    }
    

    (以上内容请保证在默认内容的大括号内,:wq保存)
    四、启动项目
    进入到项目目录下,依次执行以下三个命令:

    uwsgi --ini jcdemo_uwsgi.ini  //加载uwsgi配置
    pkill -9 nginx //强制停止nginx服务
    nginx  //启动nginx服务
    

    补充:

    1 启动:
     2 uwsgi --ini 配置文件路径 如:--ini uwsgi.ini
     3 uwsgi --ini uwsqi.ini # ini启动(路径注意)
      uwsgi -x uwsqi.xml  # xml 启动
     4 停止 
     5 uwsgi --stop uwsqi.pid #(路径注意)
     6 ​
     7 # 查看日志
     8 tail -f uwsgi.log
     9 ​
    10 # uwsgi.log 和  uwsqi.pid 都是uwsgi启动后自动生成的有时候不知道原因没有生成 uwsqi.pid  想要停止项目可以先找到进程再杀掉
    11 ​
    12 # 检查 进程
    13 ps --aux |grep uwsgi
    

    好了,现在就可以在本地游览器访问你的django项目了
    在游览器中打开47.100.196.111:8080/admin(47.100.196.111为你的服务器公网地址)

    点关注,不迷路,谢谢!

    相关文章

      网友评论

          本文标题:nginx+django+uwsgi部署阿里云服务器详解

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