Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. Configuration for using streamlit with apache (as a reverse proxy) to serve a streamlit project. [[https://docs.streamlit.io/get-started/installation/command-line]] ====== Streamlit Configuration ====== <code bash> mkdir streamlit_app cd streamlit_app python --version python -m venv venv source venv/bin/activate pip install -U pip pip install streamlit </code> <code bash> mkdir .streamlit vi .streamlit/config.toml </code> <file ini config.toml> [server] port = 8502 headless = true baseUrlPath= "/streamlit-app" [browser] serverAddress = "streamlit.roman-halliday.com" serverPort = 8502 </file> <code bash> streamlit hello </code> ===== tmux ===== To keep application running after session disconnected <code bash> sudo apt-get update && sudo apt-get update -y sudo apt-get install tmux </code> <code bash> # create tmux session tmux -s streamlit # ctrl b + d to exit the tmux. # attach to existing tmux session tmux attach </code> <code bash> session_name="your_session_name" # Replace with the actual name of your tmux session if tmux has-session -t "$session_name" 2>/dev/null; then echo "Tmux session '$session_name' exists. Attaching..." tmux attach-session -t "$session_name" else echo "Tmux session '$session_name' does not exist. Creating and attaching..." tmux new-session -s "$session_name" fi </code> ====== Apache Configuration ====== <code bash> cd /etc/apache2/sites-available/ sudo vi streamlit_VirtualHost.conf sudo vi streamlit_VirtualHost-le-ssl.conf sudo a2ensite streamlit_VirtualHost.conf sudo certbot --apache sudo systemctl reload apache2 </code> <file apache streamlit_VirtualHost.conf> <VirtualHost *:80> ServerName streamlit.roman-halliday.com ServerAlias reporting.roman-halliday.com ServerAdmin david@roman-halliday.com ####################################################################### # No documents being served, only streamlit. # Don't configure for this VirtualHost ####################################################################### #DocumentRoot /var/www/streamlit ####################################################################### # Logging (use standard log files) ####################################################################### ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ####################################################################### # Rewrite configuration ####################################################################### RewriteEngine on ####################################################################### # Reverse Proxy # HTTP (port 80) only exists to push to HTTPS # So ignore ofiginal configuration for serving streamlit ####################################################################### #RewriteCond %{HTTP:Upgrade} websocket #RewriteRule /streamlit-app(.*) ws://streamlit.roman-halliday.com:8502/streamlit-app$1 [P,L] #RewriteCond %{HTTP:Upgrade} !websocket #RewriteRule /streamlit-app(.*) http://streamlit.roman-halliday.com:8502/streamlit-app$1 [P,L] ####################################################################### # Push all requests for http to https and forward to /streamlit-app # (originaly auto configured by letsencrypt, RewriteRule modified) ####################################################################### RewriteCond %{SERVER_NAME} =streamlit.roman-halliday.com [OR] RewriteCond %{SERVER_NAME} =reporting.roman-halliday.com RewriteRule ^ https://%{SERVER_NAME}/streamlit-app [END,NE,R=permanent] </VirtualHost> </file> <file apache streamlit_VirtualHost-le-ssl.conf> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName streamlit.roman-halliday.com ServerAlias reporting.roman-halliday.com ServerAdmin david@roman-halliday.com ####################################################################### # No documents being served, only streamlit. # Don't configure for this VirtualHost ####################################################################### #DocumentRoot /var/www/streamlit ####################################################################### # Logging (use standard log files) ####################################################################### ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ####################################################################### # Rewrite configuration ####################################################################### RewriteEngine on ####################################################################### # Reverse Proxy ####################################################################### RewriteCond %{HTTP:Upgrade} websocket RewriteRule /streamlit-app(.*) ws://streamlit.roman-halliday.com:8502/streamlit-app$1 [P,L] RewriteCond %{HTTP:Upgrade} !websocket RewriteRule /streamlit-app(.*) http://streamlit.roman-halliday.com:8502/streamlit-app$1 [P,L] ####################################################################### # Redirect if app path not given # So: https://streamlit.roman-halliday.com # Becomes: https://streamlit.roman-halliday.com/streamlit-app ####################################################################### RewriteCond %{REQUEST_URI} !streamlit-app RewriteRule ^/?$ /streamlit-app [L,R=302] ####################################################################### # Certificate - letsencrypt (auto configured by letsencrypt) ####################################################################### Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/reporting.roman-halliday.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/reporting.roman-halliday.com/privkey.pem </VirtualHost> </IfModule> </file> ====== Notes ====== * https://blog.devgenius.io/automate-tmux-86774b12f348 * https://discuss.streamlit.io/t/running-streamlit-on-aws-ec2-linux-ubuntu-with-nginx-server-issues/68878 * https://medium.com/@jerome.devops/finally-streamlit-on-https-for-beginners-4543d7793005 * https://medium.com/@tharos70/streamlit-and-apache-a-guide-to-reverse-proxy-configuration-78af7a3c4467 ===== bash ===== <code bash> #!/bin/bash script_name="$1" # Get the script name as the first argument lock_file="/tmp/${script_name//[^a-zA-Z0-9_.-]/}_running.lock" # Create a lock file name # Function to execute if the script is not running execute_script_function() { echo "Executing the script's function..." # Add the actual commands you want to execute here sleep 5 # Example: Simulate some work echo "Function execution complete." } # Check if the lock file exists if [ -f "$lock_file" ]; then # Check if the process associated with the lock file is still running pid=$(cat "$lock_file") if ps -p "$pid" > /dev/null 2>&1; then echo "Script '$script_name' is already running (PID: $pid)." exit 1 else # Lock file exists, but the process is gone. Clean up the stale lock file. echo "Warning: Stale lock file found. Removing '$lock_file'." rm -f "$lock_file" fi fi # Create the lock file with the current process ID echo "$$" > "$lock_file" # Execute the script's function execute_script_function # Clean up the lock file when the script finishes rm -f "$lock_file" exit 0 </code> osdse/streamlit_with_apache.txt Last modified: 2025/04/07 15:59by david