It you want to try self-hosting on your own instance, https://clace.io/ is an open source project I am building. Clace makes hosting Streamlit apps very easy. After installing Clace and Docker/Podman, creating and managing Streamlit apps is as easy as running a command like
clace apply --approve github.com/claceio/clace/examples/streamlit.star
That command applies the declarative app config clace/examples/streamlit.star at main · claceio/clace · GitHub. The whole config to define container config and routing rules for five streamlit apps is
sl_args = {"container_opts": {"cpus": "2", "memory": "512m"}, "spec": "python-streamlit"}
app("/streamlit/spirals", "github.com/streamlit/streamlit-example", git_branch="master", params={"app_name": "Spirals"}, **sl_args)
app("/streamlit/uber", "github.com/streamlit/demo-uber-nyc-pickups", params={"app_name": "NYC Uber Ridesharing Data"}, **sl_args)
app("/streamlit/echarts", "github.com/andfanilo/streamlit-echarts-demo", git_branch="master",
params={"app_file": "app.py", "app_name": "ECharts Demo"}, **sl_args)
app("/streamlit/snowflake", "github.com/syasini/snowflake_cheatsheet",
params={"app_file": "app.py", "app_name": "Snowflake Cheatsheet"}, **sl_args)
app("maps.:", "github.com/chrieke/prettymapp", # uses default domain, eg maps.localhost:/
params={"app_file": "streamlit-prettymapp/app.py", "app_name": "Prettymapp"}, **sl_args)
Clace manages the request routing (domain or path based), TLS certs, gitops, container management, OAuth authentication if required etc.
See Clace Apps for a demo.