# 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](./DEPLOYMENT.md)** - Complete CapRover/Cloudflare deployment walkthrough - Step-by-step instructions - DNS configuration - SSL setup - Testing procedures - Troubleshooting 2. **[CORS-GUIDE.md](./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](./DEPLOYMENT-CHECKLIST.md)** - Quick reference checklist - All deployment steps - Testing verification - Security checks - Quick commands 4. **[ENV-CONFIG.md](./ENV-CONFIG.md)** - Environment variable examples - Different deployment scenarios - Common mistakes - Troubleshooting ### Updated Documentation 1. **[BACKEND-CONFIG.md](./BACKEND-CONFIG.md)** - Added CORS environment variable - Updated with deployment links 2. **[backend/README.md](./backend/README.md)** - Added CORS configuration - Production deployment section - Environment variables table 3. **[README.md](./README.md)** - Added deployment documentation links - Organized documentation section ### Configuration Files 1. **[.env.example](./.env.example)** - Frontend variables - Backend variables - Comments and examples 2. **[docker-compose.yml](./docker-compose.yml)** - Updated with new environment variables - Proper volume paths 3. **[docker-compose.production.yml](./docker-compose.production.yml)** - Production configuration example - Network configuration 4. **[nginx.conf](./nginx.conf)** - Enhanced proxy configuration - Security headers - Cache control ### Testing Tools 1. **[test-cors.sh](./test-cors.sh)** - Automated CORS testing script - 5 comprehensive tests - Clear pass/fail indicators - Usage instructions ## 🚀 Quick Start Guide ### Local Development ```bash # 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 ```bash # Starts both frontend and backend docker-compose up -d # Access at http://localhost:3000 ``` ### CapRover Deployment ```bash # 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 ### Separate Domains (Recommended) ``` Frontend: https://frontend.example.com Backend: https://backend.example.com ``` **Frontend:** ```bash VITE_FLASK_BACKEND_URL=https://backend.example.com ``` **Backend:** ```bash 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:** ```bash VITE_FLASK_BACKEND_URL=/api ``` **Backend:** ```bash 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:** ```bash CORS_ALLOWED_ORIGINS=https://app.example.com,https://staging.example.com DATABASE_PATH=/app/data/snippets.db ``` ## ✅ Testing CORS ### Quick Test ```bash 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 ```bash 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](./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 - [Backend Configuration](./BACKEND-CONFIG.md) - Configure storage backends - [Environment Configuration](./ENV-CONFIG.md) - Environment variable examples - [Backend API](./backend/README.md) - API documentation ### For DevOps - [Deployment Guide](./DEPLOYMENT.md) - Complete deployment walkthrough - [CORS Guide](./CORS-GUIDE.md) - CORS configuration and testing - [Deployment Checklist](./DEPLOYMENT-CHECKLIST.md) - Quick reference ### For Everyone - [Quick Start](./QUICKSTART.md) - Get started quickly - [Application Guide](./README-APP.md) - Using the application - [Main README](./README.md) - Overview and links ## 🎯 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](#documentation-index) 2. Review [Troubleshooting](#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](./DEPLOYMENT-CHECKLIST.md)!