#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
Что я пробовал
Я попробовал следующее, но это не решило проблему.
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