【问题标题】:Publish Python Flask Application on Linux Server在 Linux 服务器上发布 Python Flask 应用程序
【发布时间】:2021-05-21 04:34:51
【问题描述】:

我已经开发了一个 python 烧瓶应用程序,我正在尝试将它作为 WebService 发布到 Linux 服务器上。它没有任何接口,它只是返回字符串或类似的东西。我已经在 Windows 上开发了它,我的代码如下所示:

if __name__ == '__main__':
    app.run(port=80, debug=True)

然后我通过 SSH 连接到 linux 服务器。

我将代码安装到 -> /var/www/myapp/code 然后我创建了一个 myapp.conf 配置文件到 -> /etc/nginx/sites-enabled:

server {
        listen 127.0.0.1:80;
        server_name x.x.x.x;

        root /var/www/myapp/code/main.py;

        passenger_enabled on;
}

然后我在 /var/www/myapp/code/ 中运行“python main.py”然后我得到:

return getattr(self._sock,name)(args)
socket.error: [Errno 98] 地址已在使用中

当我改变时听 127.0.0.1:80;到 80 它可以工作,但我无法发送任何请求。我正在尝试通过邮递员发送 http://x.x.x.x:80/myurl

如何正确发布?我想在 Linux 服务器上提供它并从我的 windows post man 应用程序发送请求。

谢谢。

【问题讨论】:

    标签: python linux web-services nginx flask


    【解决方案1】:

    使用:

    server {
            listen 0.0.0.0:80;
            server_name x.x.x.x;
    
            root /var/www/myapp/code/main.py;
    
            passenger_enabled on;
    }
    

    更换你的ip

    【讨论】:

    • 谢谢,但没有用...当我在 main.py 中设置 app.run(port=80, debug=True) 并设置监听 0.0.0.0:80 我是获取“地址已在使用中”。当我的应用程序在 127.0.0.1:5000 上运行时,我设置了 0.0.0.0:5000 我得到了同样的错误。我配置不好。
    【解决方案2】:

    您正在尝试为您的烧瓶应用程序和 nginx 使用相同的端口

    为烧瓶应用使用不同的端口

     if __name__ == '__main__':
            app.run(port=8080, debug=True)
    

    另外,nginx 不能直接与 python 应用程序通信,而是您必须将请求代理到烧瓶服务器

    server {
            listen 80 default_server;
            server_name _;
            passenger_enabled on;
            location / {
               proxy_pass  http://127.0.0.1:8080;
            }
    }
    

    【讨论】:

    • 感谢您的建议,但是当我添加 proxy_pass 行时,我的 nginx 服务会引发错误。
    • @fordev 你看到了什么错误?可能是因为proxy_pass 行中缺少分号。
    • 谢谢我忽略了它。但我仍然无法向它发送请求。我猜我的部署配置是错误的。
    【解决方案3】:

    添加@Conans-Answer

    请求您参考文档:- https://flask.palletsprojects.com/en/1.1.x/deploying/wsgi-standalone/

    server {
    listen 80;
    
    server_name _;
    
    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;
    
    location / {
        proxy_pass         http://127.0.0.1:8000/;
        proxy_redirect     off;
    
        proxy_set_header   Host                 $host;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto    $scheme;
    }}
    

    【讨论】:

    • 您好,是的,我已经下载了 gunicorn 和 virtualenv。我为我的应用程序创建了一个环境。然后我像你一样更改我的配置文件,但我也添加了 server_name x.x.x.x 这是我想要发布它的地方。然后我将 gunicorn 运行为“gunicorn myapp:app”,它可以工作。但是当我发送请求x.x.x.x 时,它不会返回它发送的值

      Http Error:404 Page does Not Exists !

      错误
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多