Files
snippet-pastebin/docs/CORS-CONFIG-SUMMARY.md
2026-01-17 21:28:10 +00:00

8.9 KiB

CapRover/Cloudflare CORS Configuration Summary

What's Been Configured

Backend CORS Implementation

The Flask backend (backend/app.py) now includes comprehensive CORS support:

  1. Environment-based CORS configuration:

    • CORS_ALLOWED_ORIGINS environment variable
    • Supports wildcard (*) for development
    • Supports comma-separated list for multiple origins in production
  2. Proper CORS headers:

    • Access-Control-Allow-Origin
    • Access-Control-Allow-Methods
    • Access-Control-Allow-Headers
    • Access-Control-Allow-Credentials
  3. Security features:

    • Specific origins in production
    • Wildcard only in development
    • Credentials support for specific origins

Frontend Configuration

The frontend automatically detects and uses the backend via:

  1. Environment variable: VITE_FLASK_BACKEND_URL
  2. Automatic configuration: When set, forces Flask backend usage
  3. Manual configuration: Settings page (if env var not set)

Docker Configuration

  1. Backend Dockerfile:

    • Environment variables support
    • Persistent volume at /app/data
    • Health check endpoint
  2. Frontend Dockerfile:

    • Build-time argument for backend URL
    • Nginx with proxy support
    • Static file serving
  3. Nginx Configuration:

    • Proper proxy headers
    • Cache control for SPA
    • API proxying

CapRover Support

  1. captain-definition files:

    • Frontend: Root directory
    • Backend: Backend directory
  2. Deployment ready:

    • Separate app deployments
    • Environment variable configuration
    • Persistent storage support

📚 Documentation Created

Primary Guides

  1. DEPLOYMENT.md

    • Complete CapRover/Cloudflare deployment walkthrough
    • Step-by-step instructions
    • DNS configuration
    • SSL setup
    • Testing procedures
    • Troubleshooting
  2. CORS-GUIDE.md

    • CORS concepts and configuration
    • Testing procedures
    • Common errors and solutions
    • Automated testing script
    • Security best practices
    • Debugging tips
  3. DEPLOYMENT-CHECKLIST.md

    • Quick reference checklist
    • All deployment steps
    • Testing verification
    • Security checks
    • Quick commands
  4. ENV-CONFIG.md

    • Environment variable examples
    • Different deployment scenarios
    • Common mistakes
    • Troubleshooting

Updated Documentation

  1. BACKEND-CONFIG.md

    • Added CORS environment variable
    • Updated with deployment links
  2. backend/README.md

    • Added CORS configuration
    • Production deployment section
    • Environment variables table
  3. README.md

    • Added deployment documentation links
    • Organized documentation section

Configuration Files

  1. .env.example

    • Frontend variables
    • Backend variables
    • Comments and examples
  2. docker-compose.yml

    • Updated with new environment variables
    • Proper volume paths
  3. docker-compose.production.yml

    • Production configuration example
    • Network configuration
  4. nginx.conf

    • Enhanced proxy configuration
    • Security headers
    • Cache control

Testing Tools

  1. test-cors.sh
    • Automated CORS testing script
    • 5 comprehensive tests
    • Clear pass/fail indicators
    • Usage instructions

🚀 Quick Start Guide

Local Development

# Backend
cd backend
pip install -r requirements.txt
CORS_ALLOWED_ORIGINS=http://localhost:3000 python app.py

# Frontend
echo "VITE_FLASK_BACKEND_URL=http://localhost:5000" > .env
npm install
npm run dev

Docker Compose

# Starts both frontend and backend
docker-compose up -d

# Access at http://localhost:3000

CapRover Deployment

# Deploy backend
cd backend
caprover deploy -a codesnippet-backend

# Configure in CapRover dashboard:
# - CORS_ALLOWED_ORIGINS=https://frontend.example.com
# - DATABASE_PATH=/app/data/snippets.db

# Deploy frontend
cd ..
caprover deploy -a codesnippet-frontend

# Configure in CapRover dashboard:
# - VITE_FLASK_BACKEND_URL=https://backend.example.com

🔧 Configuration Examples

Frontend: https://frontend.example.com
Backend:  https://backend.example.com

Frontend:

VITE_FLASK_BACKEND_URL=https://backend.example.com

Backend:

CORS_ALLOWED_ORIGINS=https://frontend.example.com
DATABASE_PATH=/app/data/snippets.db

Single Domain (Proxied)

Frontend: https://app.example.com
Backend:  https://app.example.com/api (proxied)

Frontend:

VITE_FLASK_BACKEND_URL=/api

Backend:

CORS_ALLOWED_ORIGINS=*
DATABASE_PATH=/app/data/snippets.db

Multiple Frontends

Frontend 1: https://app.example.com
Frontend 2: https://staging.example.com
Backend:    https://api.example.com

Backend:

CORS_ALLOWED_ORIGINS=https://app.example.com,https://staging.example.com
DATABASE_PATH=/app/data/snippets.db

Testing CORS

Quick Test

curl -H "Origin: https://frontend.example.com" \
     -H "Access-Control-Request-Method: GET" \
     -X OPTIONS \
     https://backend.example.com/api/snippets

Should return:

Access-Control-Allow-Origin: https://frontend.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS

Automated Test

chmod +x test-cors.sh
./test-cors.sh https://backend.example.com https://frontend.example.com

🔒 Security Checklist

  • HTTPS enabled for both frontend and backend
  • CORS_ALLOWED_ORIGINS set to specific domains (not *)
  • Cloudflare proxy enabled (orange cloud)
  • SSL/TLS mode set to "Full (strict)"
  • Flask debug mode disabled
  • Database backed up regularly
  • Rate limiting configured
  • Monitoring enabled

📋 Environment Variables

Frontend

Variable Required Example
VITE_FLASK_BACKEND_URL Yes (for Flask) https://backend.example.com

Backend

Variable Required Example
CORS_ALLOWED_ORIGINS Yes https://frontend.example.com
DATABASE_PATH No /app/data/snippets.db (default)

🐛 Troubleshooting

CORS Errors

Problem: Browser shows CORS policy error

Solution:

  1. Check CORS_ALLOWED_ORIGINS includes frontend URL
  2. Verify both use HTTPS (not mixed)
  3. Restart backend after env changes
  4. See CORS-GUIDE.md

Connection Failed

Problem: Frontend can't connect to backend

Solution:

  1. Test backend: curl https://backend.example.com/health
  2. Check VITE_FLASK_BACKEND_URL is correct
  3. Verify backend is running
  4. Check firewall/network settings

SSL Issues

Problem: SSL certificate not valid

Solution:

  1. Wait 5-10 minutes for Let's Encrypt
  2. Verify DNS records are correct
  3. Check Cloudflare SSL mode: "Full (strict)"
  4. Disable and re-enable HTTPS in CapRover

📖 Documentation Index

For Developers

For DevOps

For Everyone

🎯 Key Benefits

  1. Flexible Deployment:

    • Single domain or separate domains
    • CapRover, Docker, or standalone
    • Local development or cloud production
  2. Secure by Default:

    • CORS properly configured
    • HTTPS enforced
    • Specific origins in production
  3. Easy to Configure:

    • Environment variables
    • Clear documentation
    • Testing tools included
  4. Production Ready:

    • Cloudflare CDN support
    • CapRover deployment ready
    • Monitoring and logging
  5. Well Documented:

    • Step-by-step guides
    • Configuration examples
    • Troubleshooting help

🤝 Support

For issues or questions:

  1. Check the relevant guide in Documentation Index
  2. Review Troubleshooting section
  3. Run the test script: ./test-cors.sh
  4. Check application logs

📝 Next Steps

After deployment:

  1. Test all functionality
  2. Configure backups
  3. Set up monitoring
  4. Review security settings
  5. Configure rate limiting
  6. Test disaster recovery
  7. Document your specific configuration
  8. Share with your team

Ready to deploy? Start with the Deployment Checklist!