FREDML / docs /deployment /streamlit-cloud.md
Edwin Salguero
feat: Complete project cleanup and professional structure
2b395f2

Streamlit Cloud Deployment Guide

This guide explains how to deploy the FRED ML frontend to Streamlit Cloud.

Prerequisites

  1. GitHub Account: Your code must be in a GitHub repository
  2. Streamlit Cloud Account: Sign up at streamlit.io/cloud
  3. AWS Credentials: Configured for S3 and Lambda access

Step 1: Prepare Your Repository

Repository Structure

Ensure your repository has the following structure:

FRED_ML/
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ app.py
β”‚   └── .streamlit/
β”‚       └── config.toml
β”œβ”€β”€ requirements.txt
└── README.md

Update requirements.txt

Make sure your requirements.txt includes Streamlit dependencies:

streamlit==1.28.1
plotly==5.17.0
altair==5.1.2
boto3==1.34.0
pandas==2.1.4
numpy==1.24.3

Step 2: Configure Streamlit App

Main App File

Your frontend/app.py should be the main entry point. Streamlit Cloud will automatically detect and run this file.

Streamlit Configuration

The .streamlit/config.toml file should be configured for production:

[global]
developmentMode = false

[server]
headless = true
port = 8501
enableCORS = false
enableXsrfProtection = false

[browser]
gatherUsageStats = false

Step 3: Deploy to Streamlit Cloud

1. Connect Repository

  1. Go to share.streamlit.io
  2. Sign in with your GitHub account
  3. Click "New app"
  4. Select your repository
  5. Set the main file path to frontend/app.py

2. Configure Environment Variables

In the Streamlit Cloud dashboard, add these environment variables:

# AWS Configuration
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_DEFAULT_REGION=us-west-2

# Application Configuration
S3_BUCKET=fredmlv1
LAMBDA_FUNCTION=fred-ml-processor

3. Advanced Settings

  • Python version: 3.9 or higher
  • Dependencies: Use requirements.txt from root directory
  • Main file path: frontend/app.py

Step 4: Environment Variables Setup

AWS Credentials

Create an IAM user with minimal permissions:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::fredmlv1",
                "arn:aws:s3:::fredmlv1/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "arn:aws:lambda:us-east-1:*:function:fred-ml-processor"
        }
    ]
}

Application Variables

Variable Description Example
S3_BUCKET S3 bucket name fredmlv1
LAMBDA_FUNCTION Lambda function name fred-ml-processor
AWS_ACCESS_KEY_ID AWS access key AKIA...
AWS_SECRET_ACCESS_KEY AWS secret key ...
AWS_DEFAULT_REGION AWS region us-east-1

Step 5: Deploy and Test

1. Deploy

  1. Click "Deploy" in Streamlit Cloud
  2. Wait for the build to complete
  3. Check the deployment logs for any errors

2. Test the Application

  1. Open the provided Streamlit URL
  2. Navigate to the "Analysis" page
  3. Select indicators and run a test analysis
  4. Check the "Reports" page for results

3. Monitor Logs

  • Check Streamlit Cloud logs for frontend issues
  • Monitor AWS CloudWatch logs for Lambda function issues
  • Verify S3 bucket for generated reports

Troubleshooting

Common Issues

1. Import Errors

Problem: Module not found errors Solution: Ensure all dependencies are in requirements.txt

2. AWS Credentials

Problem: Access denied errors Solution: Verify IAM permissions and credentials

3. S3 Access

Problem: Cannot access S3 bucket Solution: Check bucket name and IAM permissions

4. Lambda Invocation

Problem: Lambda function not responding Solution: Verify function name and permissions

Debug Commands

# Test AWS credentials
aws sts get-caller-identity

# Test S3 access
aws s3 ls s3://fredmlv1/

# Test Lambda function
aws lambda invoke --function-name fred-ml-processor --payload '{}' response.json

Production Considerations

Security

  1. Use IAM Roles: Instead of access keys when possible
  2. Rotate Credentials: Regularly update AWS credentials
  3. Monitor Access: Use CloudTrail to monitor API calls

Performance

  1. Caching: Use Streamlit caching for expensive operations
  2. Connection Pooling: Reuse AWS connections
  3. Error Handling: Implement proper error handling

Monitoring

  1. Streamlit Cloud Metrics: Monitor app performance
  2. AWS CloudWatch: Monitor Lambda and S3 usage
  3. Custom Alerts: Set up alerts for failures

Custom Domain (Optional)

If you want to use a custom domain:

  1. Domain Setup: Configure your domain in Streamlit Cloud
  2. SSL Certificate: Streamlit Cloud handles SSL automatically
  3. DNS Configuration: Update your DNS records

Cost Optimization

Streamlit Cloud

  • Free Tier: 1 app, limited usage
  • Team Plan: Multiple apps, more resources
  • Enterprise: Custom pricing

AWS Costs

  • Lambda: Pay per invocation
  • S3: Pay per storage and requests
  • EventBridge: Minimal cost for scheduling

Support

Streamlit Cloud Support

AWS Support


Next Steps: After deployment, test the complete workflow and monitor for any issues.