flask使用websocket部署使用gunicorn

本文记录一下我的flask部署踩坑记。

我的项目是部署在阿里云服务器上面的,项目采用了websocket,以实现服务器端和客户端的双向通信。

我参考的第一篇文章就是这个了:https://www.cnblogs.com/Ray-liang/p/4173923.html

讲解的非常详细,文章里面大神的原话如下:

听说Gunicorn 的配置很简单,但可惜我一直没有配置成功过,我现采用的是 uWSGI。接下来就安装uWSGI吧。

只怪我当时并没有注意QAQ。
我按照上面的文章配置了一遍,基本成功了。
但是我在浏览器里面访问时F12打开Console,发现了websocket传输产生了400错误。
然后就是各种百度、谷歌。但是还是没有配置成功。
因此这里简单说一下flask程序里面使用了websocket 的部署方法(使用gunicorn和nginx)。
它们的大体关系如下:
在这里插入图片描述
首先你要按照gunicorn,在虚拟环境里面直接pip即可。

pip install gunicorn

然后你需要

pip install eventlet

安装完上面的模块,你可以直接在你的项目文件下执行,下面的语句。

gunicorn --worker-class eventlet -w 1 -b 127.0.0.1:8080 app:app

--worker-class eventlet 要使用的工作模式,这样设置即可以websocket通信。
-w 1 用于处理工作进程的数量,为正整数,默认为1
-b 127.0.0.1:8080 Gunicorn绑定服务器套接字,需要按照你的nginx设置。
app:app 第一个app就是你的.py的启动文件了。

更多参数讲解可以看这篇文章:
https://blog.csdn.net/y472360651/article/details/78538188


这里再附上我的nginx的参考配置,将下面这个复制到默认配置的http{}里面(或者弄到default里面):

server {
  listen  80;	#  监听端口
  server_name XXX.XXX.XXX.XXX;  #公网地址TODO,自己替换
  location / {
        proxy_pass http://127.0.0.1:8080; # 这里是指向 gunicorn host 的服务地址,和上面对应
        proxy_set_header Host $host; # 添加这句话貌似会让flask端口忽略 https://segmentfault.com/q/1010000008339331
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
  }
}

这里有个nginx的问题,如果你不用80端口的话,

例如用5000端口,需要更改为
proxy_set_header Host $host:5000;

然后在flask中使用redirect函数时添上:5000端口!


如果想要自动启动,那么需要配置supervisor。
下载好以后,进入/etc/supervisor/conf.d创建.conf配置文件。(不是文件名叫.conf而是指xxx.conf)
这里给出我的配置文件:

[program:my_flask]
# 启动命令入口
command=/root/my_flask/venv/bin/gunicorn --worker-class eventlet -w 1 -b 127.0.0.1:8080 app:app

# 命令程序所在目录
directory=/root/my_flask
#运行命令的用户名
user=root
        
autostart=true
autorestart=true
#日志地址
# stdout_logfile=/root/my_flask/logs/supervisor.log  

配置好以后supervisorctl update会加载新配置的文件

my_flask: stopped
my_flask: updated process group

supervisorctl reload会重启supervisorctl

Restarted supervisord

supervisorctl start all会启动所有命令

supervisorctl status可以查看当前启用命令的状态

my_flask RUNNING pid 18099, uptime 0:00:11

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值