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](https://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:
```txt
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:
```toml
[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](https://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:
```bash
# 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:
```json
{
"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
```bash
# 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
- **Documentation**: [docs.streamlit.io](https://docs.streamlit.io)
- **Community**: [discuss.streamlit.io](https://discuss.streamlit.io)
- **GitHub**: [github.com/streamlit/streamlit](https://github.com/streamlit/streamlit)
### AWS Support
- **Documentation**: [docs.aws.amazon.com](https://docs.aws.amazon.com)
- **Support Center**: [aws.amazon.com/support](https://aws.amazon.com/support)
---
**Next Steps**: After deployment, test the complete workflow and monitor for any issues.