mirror of
https://github.com/johndoe6345789/snippet-pastebin.git
synced 2026-04-24 13:34:55 +00:00
384 lines
8.9 KiB
Markdown
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)!
|