在 Docker 容器内运行的 Flask Web 服务器无法通过 Homeassistant 中的 Ingress 反向代理访问

问题描述 投票:0回答:1

如何使用gunicorn和nginx作为反向代理正确配置Flask Web服务器在Homeassistant的Docker容器内运行,以显示和编辑SQLite数据库中的内容?

我目前正在开发一个 Homeassistant 插件,它需要 Flask Web 服务器来显示和编辑 SQLite 数据库中的内容。 Flask Web 服务器在本地计算机上运行时可以正常工作,但我无法将其配置为在 Homeassistant 中的 Docker 容器内运行,使用 Gunicorn 作为 Web 服务器,使用 nginx 作为反向代理。

这是我的 Flask 代码片段:

import sqlite3
from threading import Thread
from datetime import datetime
from flask import Flask, render_template, request
from Bobdatabase import BobDatabase

Server = Flask('Bobserver')

@Server.route('/')
def index():
    print("TestHome", flush=True)
    return render_template('index.html')

@Server.route('/results', methods=['POST'])
def results():
    print("TestResult", flush=True)
    conn = sqlite3.connect('bob.db')
    print(conn, flush=True)
    cursor = conn.execute('SELECT * FROM PURCHASES')
    rows = cursor.fetchall()
    columns = [column[0] for column in cursor.description]
    return render_template('results.html', columns=columns, rows=[dict(zip(columns, row)) for row in rows])

这是我的 Dockerfile 的片段:

# Install required packages
RUN apk add --no-cache python3 py3-pip 
RUN pip3 install --no-cache-dir paho-mqtt
RUN pip3 install --no-cache-dir pytz
RUN pip3 install --no-cache-dir flask
RUN pip3 install --no-cache-dir gunicorn

# Add nginx test and create the run folder for nginx
RUN \
  apk --no-cache add \
    nginx \
  \
  && mkdir -p /run/nginx

COPY Bobsite.py /
ADD templates /templates
COPY ingress.conf /etc/nginx/http.d/Bobserver.conf

COPY run.sh /
RUN chmod a+x /run.sh
CMD [ "/run.sh" ]

这是我的 ingress.conf 文件:

upstream Bobserver {
  server 127.0.0.1:8000;
}

server {
    listen 8099;
    allow <HomeassistantIP>;
    deny all; 
    server_name Bobserver;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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 POST $request_body;
    }    
}

当我在 Homeassistant 中安装插件并尝试访问该网站时,我能够访问 Flask Web 服务器的根页面,但是当我单击按钮转到 /results 页面时,我收到 404 错误。我怀疑反向代理无法正确调用 Flask。谁能帮我弄清楚我做错了什么?谢谢你。

docker flask gunicorn kubernetes-ingress home-assistant
1个回答
0
投票

这个问题你解决了吗? 我遇到了完全相同的问题:没有 ingress 的 ha-addon 运行良好,但有 ingress 则只有主页可以工作。 提前谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.