美文网首页
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