我想使用Flask和Flask SocketIO进行实时数据可视化。我已使用此Digital Oceans Tutorial设置了Flask App。一切正常。我想创建一个systemd单元文件,用于在后台运行带有烧瓶socketio的烧瓶。我曾尝试更改旧的systemd单元文件(数字海洋教程)以使用SocketIO运行Flask,但它不起作用。
系统单元文件 (/etc/systemd/system/my_app.service):
[Unit]
Description=Gunicorn instance to serve my_app
After=network.target
[Service]
User=app_user
Group=www-data
WorkingDirectory=/home/user/my_app
Environment="PATH=/home/user/my_app/venv/bin"
ExecStart=/home/user/my_app/venv/bin/gunicorn --workers 3 --bind unix:my_app.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target
NGINX配置(/ etc / nginx / sites-available / my_app):
server {
listen 80;
server_name my_server;
location / {
include proxy_params;
proxy_pass http://unix:/home/user/my_app/my_app.sock;
}
}
这完美无缺。
我想使用Flask SocketIO进行实时数据可视化。
新的NGINX配置
server {
listen 80;
server_name my_server;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:5000;
}
location /socket.io {
include proxy_params;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://127.0.0.1:5000/socket.io;
}
}
我停止了systemd my_app服务,并输入以下内容测试了Flask App:
(venv) $ gunicorn --worker-class eventlet -w 1 --bind 127.0.0.1:5000 wsgi:app
它有效。
不幸的是,系统单元文件中的更改不起作用。我试过了:
ExecStart=/home/user/my_app/venv/bin/gunicorn --worker-class eventlet -w1 --workers 3 --bind 127.0.0.1:5000 wsgi:app
ExecStart=/home/user/my_app/venv/bin/gunicorn --worker-class eventlet -w1 --workers 3 --bind unix:my_app.sock -m 007 wsgi:app
错误消息(NGINX错误日志): "连接上游"
时失败(111:拒绝连接)更改用户和组也不起作用。
我不知道如何解决这个问题。有人可以帮帮我吗?
答案 0 :(得分:0)
您需要更新systemd单元文件。 在启动服务器的位置,启动服务器时应使用默认路由而不是环回地址。
ExecStart=/home/user/my_app/venv/bin/gunicorn --worker-class eventlet -w 3 --bind 0.0.0.0:5000 wsgi:app