使用Flask SocketIO的Flask App:如何创建systemd单元文件?

时间:2017-07-20 12:36:30

标签: ubuntu nginx flask socket.io gunicorn

我想使用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:拒绝连接)

更改用户和组也不起作用。

我不知道如何解决这个问题。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

您需要更新systemd单元文件。 在启动服务器的位置,启动服务器时应使用默认路由而不是环回地址。

 ExecStart=/home/user/my_app/venv/bin/gunicorn --worker-class eventlet -w 3 --bind 0.0.0.0:5000 wsgi:app