Spaces:
Sleeping
Sleeping
title: App is not loading when running remotely | |
slug: /knowledge-base/deploy/remote-start | |
# App is not loading when running remotely | |
Below are a few common errors that occur when users spin up their own solution | |
to host a Streamlit app remotely. | |
To learn about a deceptively simple way to host Streamlit apps that avoids all | |
the issues below, check out [Streamlit Community Cloud](https://streamlit.io/cloud). | |
### Symptom #1: The app never loads | |
When you enter the app's URL in a browser and all you see is a **blank page, a | |
"Page not found" error, a "Connection refused" error**, or anything like that, | |
first check that Streamlit is actually running on the remote server. On a Linux | |
server you can SSH into it and then run: | |
```bash | |
ps -Al | grep streamlit | |
``` | |
If you see Streamlit running, the most likely culprit is the Streamlit port not | |
being exposed. The fix depends on your exact setup. Below are three example | |
fixes: | |
- **Try port 80:** Some hosts expose port 80 by default. To | |
set Streamlit to use that port, start Streamlit with the `--server.port` | |
option: | |
```bash | |
streamlit run my_app.py --server.port=80 | |
``` | |
- **AWS EC2 server**: First, click on your instance in the [AWS Console](https://us-west-2.console.aws.amazon.com/ec2/v2/home). | |
Then scroll down and click on _Security Groups_ β _Inbound_ β _Edit_. Next, add | |
a _Custom TCP_ rule that allows the _Port Range_ `8501` with _Source_ | |
`0.0.0.0/0`. | |
- **Other types of server**: Check the firewall settings. | |
If that still doesn't solve the problem, try running a simple HTTP server | |
instead of Streamlit, and seeing if _that_ works correctly. If it does, then | |
you know the problem lies somewhere in your Streamlit app or configuration (in | |
which case you should ask for help in our | |
[forums](https://discuss.streamlit.io)!) If not, then it's definitely unrelated | |
to Streamlit. | |
How to start a simple HTTP server: | |
```bash | |
python -m http.server [port] | |
``` | |
### Symptom #2: The app says "Please wait..." or shows skeleton elements forever | |
This symptom appears differently starting from version 1.29.0. For earlier | |
versions of Streamlit, a loading app shows a blue box in the center of the page | |
with a "Please wait..." message. Starting from version 1.29.0, a loading app | |
shows skeleton elements. If this loading screen does not go away, the | |
underlying cause is likely one of the following: | |
- Using port 3000 which is reserved for internal development. | |
- Misconfigured [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) | |
protection. | |
- Server is stripping headers from the Websocket connection, thereby breaking | |
compression. | |
To diagnose the issue, first make sure you are not using port 3000. If in doubt, | |
try port 80 as described above. | |
Next, try temporarily disabling CORS protection by running Streamlit with the | |
`--server.enableCORS` flag set to `false`: | |
```bash | |
streamlit run my_app.py --server.enableCORS=false | |
``` | |
If this fixes your issue, **you should re-enable CORS protection** and then set | |
`browser.serverAddress` to the URL of your Streamlit app. | |
If the issue persists, try disabling websocket compression by running Streamlit with the | |
`--server.enableWebsocketCompression` flag set to `false` | |
```bash | |
streamlit run my_app.py --server.enableWebsocketCompression=false | |
``` | |
If this fixes your issue, your server setup is likely stripping the | |
`Sec-WebSocket-Extensions` HTTP header that is used to negotiate Websocket compression. | |
Compression is not required for Streamlit to work, but it's strongly recommended as it | |
improves performance. If you'd like to turn it back on, you'll need to find which part | |
of your infrastructure is stripping the `Sec-WebSocket-Extensions` HTTP header and | |
change that behavior. | |
### Symptom #3: Unable to upload files when running in multiple replicas | |
If the file uploader widget returns an error with status code 403, this is probably | |
due to a misconfiguration in your app's | |
[XSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) protection logic. | |
To diagnose the issue, try temporarily disabling XSRF protection by running Streamlit | |
with the `--server.enableXsrfProtection` flag set to `false`: | |
```bash | |
streamlit run my_app.py --server.enableXsrfProtection=false | |
``` | |
If this fixes your issue, **you should re-enable XSRF protection** and try one | |
or both of the following: | |
- Set `browser.serverAddress` and `browser.serverPort` to the URL and port of | |
your Streamlit app. | |
- Configure your app to use the same secret across every replica by setting the | |
`server.cookieSecret` config option to the same hard-to-guess string everywhere. | |