【问题标题】:Flask App with Flask SocketIO: How to create a systemd unit file?带有 Flask SocketIO 的 Flask App:如何创建 systemd 单元文件?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-21
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2012-11-13
      相关资源
      最近更新 更多