【发布时间】:2017-12-26 03:57:28
【问题描述】:
我想使用 Flask 和 Flask SocketIO 进行实时数据可视化。我已经用这个Digital Oceans Tutorial 设置了 Flask 应用程序。一切正常。我想创建一个 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 应用程序:
(venv) $ gunicorn --worker-class eventlet -w 1 --bind 127.0.0.1:5000 wsgi:app
而且它有效。
不幸的是,systemd 单元文件中的更改不起作用。我试过了:
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:连接被拒绝)”
更改用户和组也不起作用。
我不知道如何解决这个问题。谁能帮帮我?
【问题讨论】:
标签: ubuntu nginx flask socket.io gunicorn