Потоковое приложение останавливается с надписью «Пожалуйста, подождите …», а затем останавливается

#nginx #amazon-ec2 #streamlit

#nginx #amazon-ec2 #streamlit

Вопрос:

Проблема

Приложение, запущенное при запуске streamlit run main.py http://IP_ADDRESS:8501 , будет отображаться корректно, но http://DOMAIN_NAME останавливается с надписью «Пожалуйста, подождите …» и останавливается.

введите описание изображения здесь

Окружающая среда

  • Доменное имя уже разрешено с помощью Route53
  • Разверните приложение Streamlit на EC2 (Amazon Linux) и запустите Streamlit run main.py на Tmux
  • Используйте Nginx для преобразования доступа к порту 80 в порт8501

Изменены настройки Nginx

/etc/nginx/nginx.conf

 server {
        listen       80; #default
        listen       [::]:80; #default
        server_name MY_DOMAIN_NAME;
        location / {
          proxy_pass http://MY_IP_ADDRESS:8501;
        }
        root         /usr/share/nginx/html; #default
 

Что я пробовал

Я попробовал следующее, но это не решило проблему.

https://docs.streamlit.io/knowledge-base/deploy/remote-start#symptom-2-the-app-says-please-wait-forever

  • streamlit run my_app.py --server.enableCORS=false
  • streamlit run my_app.py --server.enableWebsocketCompression=false

Ответ №1:

Если кто-либо использует Ambassador для входа в kubernetes, вам нужно разрешить websockets. Это объясняется в https://www.getambassador.io/docs/edge-stack/latest/howtos/websockets /

Но, по сути, вам нужно добавить следующее к вашему отображению

 allow_upgrade:
- websocket
 

Комментарии:

1. Можете ли вы показать свой yaml для службы streamlit через Ambassador ingress? Я уже разрешаю websockets и отключаю cors, WebsocketCompression и XsrfProtection, как рекомендовано streamlit, но эта проблема все еще сохраняется.

Ответ №2:

Попробуйте следующий conf:

 server {
    listen 80 default_server;
    server_name MY_DOMAIN_NAME;

    location / {
        proxy_pass http://127.0.0.1:8501/;
            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 run my_app.py --server.port 8501 --server.baseUrlPath / --server.enableCORS false --server.enableXsrfProtection false