Flask项目nginx+uwsgi部署服务器

nginx+uwsgi部署服务器

uWsgi简介:
说Uwsgi之前,先说一下Wsgi。

什么是Wsgi?

WSGI: 是一种Web服务器网关接口,它是一个Web服务器(如Nginx) 与应用服务器(如uWSGI服务器)通信的一种规范。

uWSGI是一个Web服务器,它实现了WSGI协议,uwsgi,http等协议,Nginx中HttpUwsgiModul的作用是与uWSGI服务器进行交换

那么那些框架自带了Wsgi Server呢?

很多框架都自带了WSGI Server, 比如: Flask、 Webpy、 Dajngo、 CherryPy等等。当然性能都不好,自带的Web Server更多的是本地测试用途,发布时则使用生产环境的WSGI Server或者是联合Nginx做Uwsgi。

简单的来讲Wsgi就是,标准,

比如: 一个德国人跟一个法国人聊天,他们要想聊天可以通过一个标准的国际语言: 英语来进行交互。

要注意 WSGI/uWSGI/uwsgi 这三个概念的区分。

WSGI是一种通讯协议

uwsgi同WSGI一样是一种通信协议

而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

为什么uWSGI还需要nginx,应为Nginx具备了优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样就实现了,动静分离。 也可以更好的达到客户端的效果。

实际部署过程

安装nginx,wsgi


在服务器下载uwsgi和nginx(已下载可忽略)可以使用pip下载uwsgi:pip install uwsgi
下载nginx:apt-get install nginx
如果nginx下载失败,可以先更新apt源:apt-get update
更新后再次下载nginx

将项目文件夹传输到服务器(比如根目录下的home文件夹下)

scp -r 本机下项目的路径 root@***.***.***.***:/home/  例:scp -r /home/guagua/test.py root@11.22.33.44:/home/file

传输完成后在项目主目录下配置uwsgi

创建uwsgi.ini
vim uwsgi.ini   (vi uwsgi.ini)
#以下为添加操作
[uwsgi]
socket=0.0.0.0:5000 # 可配置成别的端口
chdir=项目的路径
wsgi-file=启动文件的路径
callable=app
processes=4
threads=10
master=true
#virstualenv = python虚拟环境路径  (如果没有配置虚拟环境,则不用)
daemonize=/data/log/项目名/uwsgi.log #指定uwsgi日志存储位置,没有这个文件夹的话先进行创建
buffer-size=32768
listen=l024

配置nginx(nginx的配置文件默认为/etc/nginx/nginx.conf)

在http{}里面添加内容:
server {
listen        80; #监听端口,也就是我们在浏览器要访问的端口
server_name   1.112.133.222; # 外网访问服务器的地址
large_client_header_buffers 4 16k;     # 读取大型客户端请求头的缓冲区的最大数量和大小
client_max_body_size 300m;     #设置nginx能处理的最大请求主体大小。
client_body_buffer_size 128k;  #请求主体的缓冲区大小。
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers   4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
location / {
uwsgi_pass    127.0.0.1:5000; # uwsgi端口号 要和uwsgi端口保持一致△
include       uwsgi_params;
uwsgi_send_timeout 600;        # 指定向uWSGI传送请求的超时时间,完成握手>后向uWSGI传送请求的超时时间。
uwsgi_connect_timeout 600;   # 指定连接到后端uWSGI的超时时间。
uwsgi_read_timeout 600;        # 指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间。
}
}
可能会遇到的问题,找不到一些文件或路径,哪个找不到直接创建就行
----⬇️配置https方式:
server {
  #监听443端口
    listen 443 ssl;
    #你的域名
    server_name www.域名.com;
    #ssl证书的pem文件路径
    ssl_certificate  /etc/nginx/cert/ssl文件.pem;
    #ssl证书的key文件路径
    ssl_certificate_key /etc/nginx/cert/ssl文件.key;
    location / {
     proxy_pass  http://127.0.0.1:5001;
     uwsgi_pass  127.0.0.1:5001;
     include     uwsgi_params;
    }
}
server {
    listen 80;
    server_name www.域名.com;
    #将请求转成https
    rewrite ^(.*)$ https://$host$1 permanent;
}
详细操作方案:http://t.zoukankan.com/lixianguo-p-12517314.html

启动 nginx

service nginx start
service nginx status # 查看nginx状态,是否启动
service nginx restart # 重启nginx
ps -ef |grep nginx # 查看已启动nginx的进程号
kill -9 nginx主进程号
如果启动失败,查看nginx的日志找到报错原因,日志在/var/log/nginx/error.log
tail -f error.log    #查看nginx日志

启动uwsgi进入项目下(uwsgi.ini所在的文件夹下)

uwsgi -d --ini uwsgi.ini # 启动   
启动成功:[uWSGI] getting INI configuration from uwsgi.ini
ps -ef |grep uwsgi            查看当前当前开启的uwsgi进程
关闭方法与nginx类似
启动失败可查看uwsgi日志,日志位置在配置文件中我们自己配置的路径 tail -f uwsgi

都启动成功,访问

curl +ip  运行

如果遇到问题,先查看nginx是否启动成功,如果没成功,查看日志 cd /var/log/nginx/error.log
当nginx成功以后再去排uwsgi的错误,看看是不是Flask项目的python环境没对应上,或者是缺少某些模块 查看uwsgi日志 找到日志文件的目录 tail -f uwsgi.log

提升uwsgi配置:

如果没有设置uwsgi的--listen,如果sysctl -a | grep net.core.somaxconn发现net.core.somaxconn=128。

那你使用uwsgi启动的服务,单机最大支持并发数为100*(启动的uwsgi进程数)。

如果启动进程为4个,则最大并发只能支持400,这样会在uwsgi的log日志中出现错误uWSGI listen queue of socket 4 full。

同时,nginx对应也会出现错误***** upstream time out。

 

修补措施:

1.修改系统参数

 

vim /etc/sysctl.conf
在文件最后添加一行记录net.core.somaxconn = 1024

 执行sysctl -p重新load参数设置,这样会立即生效,并且以后重新启动机器也会生效。

2.设置uwsgi启动的--listen 1024.

这样 你的机器并发数就可以得到一个很大的提升。```



常用命令
```python
ps -aux|grep python3          查看当前python进程
kill -9  进程号                     关闭当前进程号


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值