Files
snippet-pastebin/CORS-CONFIG-SUMMARY.md

384 lines
8.9 KiB
Markdown

# 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)!