使用uwsgi 和 nginx 部署 Flask
之前使用了 gunicorn 来部署 Flask 应用,但是感觉 nginx 会不会更快一些, 于是就有了尝试使用 uwsgi 配合 nginx 来部署 Flask 的想法.
但是看了一些文章之后感觉速度应该是一样的, 后端都是 Python, 但是有人说 Nginx 更安全. 静态页面的支持也更好, 所以也配置玩一下顺便测试一下静态的并发量.
首先安装uWSGI, 使用pip来安装
1 | pip install uwsgi |
在 Flask 应用的目录下测试 uwsgi 是否工作
1 | uwsgi --socket 0.0.0.0:8000 --protocol=http -w run:app |
这时候打开 127.0.0.1:8000 就可以看到 网站的首页了.
接着我们配置真正配合 nginx 使用的 uwsgi 配置.
在 Flask 应用目录下新建一个文件 config.ini 作为uwsgi 的配置文件
1 | [uwsgi] |
这里 run.py 是 Flask 应用的主文件, socket 是接收 nginx 转发过来的接口.
使用这个配置文件启动 uwsgi
1 | uwsgi config.ini |
接着配置 nginx 的配置文件
nginx 默认的是 /etc/nginx/nginc.conf, 里面会载入 sites-enabled 里的所有文件.
所以我们在 sites-enabled 文件夹里新建个名为 stock.conf 的文件,填入以下字段
1 | server { |
这里的意思是监听 80 端口的信息, 使用 uwsgi 传递给 127.0.0.1:3031 这个地址, 3031是随便取得, 取啥都可以, 没有被系统占用就行.
配置完成后可以先检查一下配置文件是否正确
1 | sudo nginx -t |
如果正确无误就可以启动 ngxin 了
1 | sudo service nginx start |
接着打开你的网址应该就可以看到网站的首页了.
接着我用 webbench -c 500 -t 60 测试本地的服务器并发数, 一回车 CPU 就吃满了
但是效果非常好, 比之前高了很多,
1 | Benchmarking: GET http://127.0.0.1/ |
大约相比本地使用 Flask 自带的 http server 使用 Redis 缓存效果高五倍
接着测试打在阿里云 1G1C 服务器上的效果
1 | Benchmarking: GET http://106.15.205.43/index |
效果并没有好多少…不过看了113179 bytes/sec.大约也跑满了1m的带宽了…难道真的是我的服务器带宽限制了???
在付了两块钱临时升级3个小时到10M带宽后再进行测试一下.
先测速一下
1 | Retrieving speedtest.net configuration... |
不错, 阿里云好像是带宽限制的是上传的, 下载能飙到 300 M. 测试前打开top查看cpu占用
1 | top - 23:04:20 up 3 days, 4:32, 2 users, load average: 1.81, 0.44, 0.14 |
小鸡 CPU 跑到 70多…
1 | Benchmarking: GET http://106.15.205.43/index |
好了, 数据确实多了10倍…看来确实是带宽限制了. 小鸡 CPU 也不怎么受得了.