Django+Nginx+uwsgi 部署过程

分析项目流程:

1.首先客户端请求服务资源,
2.nginx作为直接对外的服务,接收到客户端发过来的http请求,会解包、分析,
如果是静态文件请求,就根据nginx配置的静态文件目录,返回请求的资源,
如果是动态的请求,nginx就通过配置文件,将请求传递给uwsgi;uwsgi 将接收到的包进行处理,并转发给wsgi,
3.wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
4.wsgi将返回值进行打包,转发给uwsgi
5.uwsgi接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。

本次部署前端地址 www.xxx.com:80
后端地址 api.xxx.com:8000

Nginx安装(ubuntu)

1、安装依赖包
# 安装gcc g++的依赖库
sudo apt-get install build-essential(c语言的编译环境)
sudo apt-get install libtool(脚本库)
# 安装pcre依赖库(正则表达式库)
sudo apt-get install libpcre3 libpcre3-dev
# 安装zlib依赖库
sudo apt-get install zlib1g-dev
2、下载
cd /usr/local/
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2
3、编译安装
sudo ./configure --prefix=/usr/local/nginx
sudo make
sudo make install
4、启动
nginx -t  #测试配置项是否有问题
sudo /usr/local/nginx/sbin/nginx   #启动
sudo /usr/local/nginx/sbin/nginx -s stop    #停止
sudo /usr/local/nginx/sbin/nginx -s reload   #重启

查看是否运行
/usr/local/nginx/sbin/nginx -v
ps aux | grep nginx
nginx默认是80端口,输入地址即可看到nginx欢迎页面:

5、配置软链接
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
nginx  #启动
nginx -s stop
sudo nginx -s reload  #重启

安装uwsgi

进入虚拟环境 pip install uwsgi

静态文件配置

当Django运行在生产模式时,将不再提供静态文件的支持,需要将静态文件交给静态文件服务器。
我们要将收集的静态文件放到front_end目录下的static目录中,所以先创建目录static。

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'front_end/static')

然后执行收集命令

python manage.py collectstatic

配置Nginx作为静态文件服务器

sudo vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.xxx.com;
	
	location / {
		 # 指定网站的根目录
	     root   /home/python/Desktop/myshop/front_end;
	     # 默认访问根目录下的 index.html
	     index  index.html index.htm;
	}      
}
sudo nginx -s reload  #重启

uwsgi配置

在项目目录下创建uwsgi配置文件 uwsgi.ini
[uwsgi]

#与nginx连接时使用
socket=192.168.129.129:8001
#项目目录
chdir=/home/python/Desktop/myshop/jpmall
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=jpmall/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/home/python/.virtualenvs/shop

启动uwsgi服务器

uwsgi --ini uwsgi.ini  # 启动
uwsgi --stop uwsgi.pid  # 停止

修改Nginx配置文件,让Nginx接收到请求后转发给uwsgi服务器

	upstream shop {
	    # 后端服务器,可配置多个实现负载均衡
	    server 192.168.129.129:8001;  
	    server 192.168.129.110:8099;  
	}   
	
	server {
	    listen  8000;
	    server_name api.xxx.com;
	
	    location / { 
	        include uwsgi_params; 
	        uwsgi_pass shop;
	
	        # 解决跨域问题
	        add_header Access-Control-Allow-Origin http://www.meiduo.site;
	        add_header Access-Control-Allow-Headers Origin,X-Requested-With,Content-Type,Accept;
	        add_header Access-Control-Allow-Methods POST,GET;
	    }
	}   
	
	
	server {
	    listen  80; 
	    server_name www.xxx.com;
	
	    location / { 
	        root   /home/python/Desktop/myshop/front_end;
	        index  index.html index.htm;
	    }

重启Nginx,完成整个部署过程


nginx 请求转发,并配置白名单
当请求地址 172.16.85.141:8000/service/cyberwing/query
转发到 10.128.86.64:8000/service/cyberwing/query

server {
    listen 8000;
    server_name localhost;
    proxy_read_timeout 600;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    access_log  /var/log/cyberwing-access.log;

    location /service/ {
        proxy_redirect                  off;
        proxy_set_header                Host $host;
        proxy_set_header                X-real-ip $remote_addr;
        proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
        allow 172.16.85.137;  # 只允许这个地址访问
        deny all;
        proxy_pass  http://10.128.86.64:8000/service/;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值