首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker中的Nginx、fastapi和streamlit反向代理不适用于streamlit

docker中的Nginx、fastapi和streamlit反向代理不适用于streamlit
EN

Stack Overflow用户
提问于 2021-11-15 19:27:35
回答 1查看 325关注 0票数 2

我想使用docker来包装nginx,fastapi和2个streamlit应用程序。所有3个应用程序(fastapi,2streamlight应用程序)都不能相互交互。Nginx应该可以作为这3个应用的反向代理。对于fastapi来说,它是有效的。我可以向http://ip:80/twxservices发送rest-api请求。"twxservices“作为端点添加到app.py文件中,而不是添加到nginxconfig中。

无法通过此http://ip:80/stream1http://ip:80/stream2访问streamlit应用程序我收到错误: 404: not found

提前感谢您的帮助。在下面找到文件结构和配置文件。这是文件结构和反向代理的工作方式:

docker-compose文件:

代码语言:javascript
复制
services:
  web:
    build:
      context: ./nginxfolder
      dockerfile: Dockerfile
    container_name: web
   
    ports:
      - 80:80
    networks:
      - my-network
    depends_on:
      - app

  app:
    build:
      context: ./twxservicesfolder
      dockerfile: Dockerfile
    container_name: app
 
    networks:
      - my-network
      
  spectrum:
    build:
      context: ./spectrumfolder
      dockerfile: Dockerfile
    container_name: spectrum

    networks:
      - my-network
      
  dgraph:
    build:
      context: ./dgraphfolder
      dockerfile: Dockerfile
    container_name: dgraph

    networks:
      - my-network
       
networks:
  my-network:
    driver: bridge

nginx配置(default.conf):

代码语言:javascript
复制
upstream fastapi-backend {
    server app:8000;
}



    server {
        listen 80;
     

        location /  {
            proxy_pass http://fastapi-backend;
            
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            
       
            proxy_redirect off;
            proxy_buffering off;
            client_body_buffer_size 100M;
            client_max_body_size 100M;
        }
        
        location /stream1 {
            proxy_pass http://spectrum:8501/stream1;
        }
        location ^~ /stream1/static {
            proxy_pass http://spectrum:8501/stream1/static/;
        }
        location ^~ /stream1/healthz {
            proxy_pass http://spectrum:8501/stream1/healthz;
        }
        location ^~ /stream1/vendor {
            proxy_pass http://spectrum:8501/stream1/vendor;
        }
        location /stream1/spectrum {
            proxy_pass http://spectrum:8501/stream1/spectrum;
            proxy_http_version 1.1;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_read_timeout 86400;
        }
        
        location /stream2 {
            proxy_pass http://dgraph:8503/stream2;
        }
        location ^~ /stream2/static {
            proxy_pass http://dgraph:8503/stream2/static/;
        }
        location ^~ /stream2/healthz {
            proxy_pass http://dgraph:8503/stream2/healthz;
        }
        location ^~ /stream2/vendor {
            proxy_pass http://dgraph:8503/stream2/vendor;
        }
        location /stream2/dgraph {
            proxy_pass http://dgraph:8503/stream2/dgraph;
            proxy_http_version 1.1;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_read_timeout 86400;
        }

    }

Dockerfile nginx容器:

代码语言:javascript
复制
FROM nginx:latest

RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.d

Dockerfile streamlit应用程序dgraph容器:

代码语言:javascript
复制
FROM python:3.8

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

EXPOSE 8503
COPY app2.py /var/dashboard/app2.py
CMD streamlit run /var/dashboard/app2.py --server.address="0.0.0.0"  --server.port="8503" 

Dockerfile streamlit应用频谱容器:

代码语言:javascript
复制
FROM python:3.8

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

EXPOSE 8501
COPY app1.py /var/dashboard/app1.py
CMD streamlit run /var/dashboard/app1.py --server.address="0.0.0.0" --server.port="8501" 

Dockerfile fastapi app twxservices容器:

代码语言:javascript
复制
FROM python:3.8-slim-buster

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .

ENV PYTHONUNBUFFERED 1

EXPOSE 8000
CMD ["uvicorn","app:app","--proxy-headers","--host","0.0.0.0","--forwarded-allow-ips","*"]
EN

回答 1

Stack Overflow用户

发布于 2021-11-17 11:23:57

我用这些nginx配置让它工作

代码语言:javascript
复制
    location /spectrum {
            proxy_pass http://spectrum1:8501/spectrum;
            proxy_http_version 1.1;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_read_timeout 86400;
        }

streamlit应用程序的Dockerfile配置如下:

代码语言:javascript
复制
FROM python:3.8
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

EXPOSE 8501
COPY app1.py /var/dashboard/app1.py
CMD streamlit run /var/dashboard/app1.py --server.address="0.0.0.0" --server.port="8501" --server.baseUrlPath="spectrum" --server.enableCORS=false --server.enableXsrfProtection=false
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69979818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档