feat: add Sentry, Cloudflare R2, and CloudFlare CDN integrations
Production quick wins for improved observability and scalability: Sentry Error Tracking: - Add sentry-sdk[fastapi] dependency - Initialize Sentry in main.py with FastAPI/SQLAlchemy integrations - Add Celery integration for background task error tracking - Feature-flagged via SENTRY_DSN (disabled when empty) Cloudflare R2 Storage: - Add boto3 dependency for S3-compatible API - Create storage_service.py with StorageBackend abstraction - LocalStorageBackend for development (default) - R2StorageBackend for production cloud storage - Feature-flagged via STORAGE_BACKEND setting CloudFlare CDN/Proxy: - Create middleware/cloudflare.py for CF header handling - Extract real client IP from CF-Connecting-IP - Support CF-IPCountry for geo features - Feature-flagged via CLOUDFLARE_ENABLED setting Documentation: - Add docs/deployment/cloudflare.md setup guide - Update infrastructure.md with dev vs prod requirements - Add enterprise upgrade checklist for scaling beyond 1000 users - Update installation.md with new environment variables All features are optional and disabled by default for development. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -393,11 +393,70 @@ free -h
|
||||
|
||||
### Set Up Sentry (Error Tracking)
|
||||
|
||||
Sentry provides real-time error tracking and performance monitoring.
|
||||
|
||||
1. **Create a Sentry account** at [sentry.io](https://sentry.io) (free tier available)
|
||||
2. **Create a new project** (Python/FastAPI)
|
||||
3. **Add to `.env`**:
|
||||
```env
|
||||
SENTRY_DSN=https://your-key@sentry.io/project-id
|
||||
SENTRY_ENVIRONMENT=production
|
||||
SENTRY_TRACES_SAMPLE_RATE=0.1
|
||||
```
|
||||
4. **Restart services**:
|
||||
```bash
|
||||
sudo systemctl restart wizamart wizamart-celery
|
||||
```
|
||||
|
||||
Sentry will now capture:
|
||||
- Unhandled exceptions
|
||||
- API errors with request context
|
||||
- Celery task failures
|
||||
- Performance traces (10% sample rate)
|
||||
|
||||
---
|
||||
|
||||
## Cloudflare R2 Storage
|
||||
|
||||
For production, use Cloudflare R2 instead of local storage for scalability and CDN integration.
|
||||
|
||||
### Setup
|
||||
|
||||
1. **Create R2 bucket** in CloudFlare dashboard
|
||||
2. **Create API token** with Object Read/Write permissions
|
||||
3. **Add to `.env`**:
|
||||
```env
|
||||
STORAGE_BACKEND=r2
|
||||
R2_ACCOUNT_ID=your_account_id
|
||||
R2_ACCESS_KEY_ID=your_access_key
|
||||
R2_SECRET_ACCESS_KEY=your_secret_key
|
||||
R2_BUCKET_NAME=wizamart-media
|
||||
R2_PUBLIC_URL=https://media.yourdomain.com
|
||||
```
|
||||
|
||||
See [CloudFlare Setup Guide](cloudflare.md) for detailed instructions.
|
||||
|
||||
---
|
||||
|
||||
## CloudFlare CDN & Proxy
|
||||
|
||||
For production, proxy your domain through CloudFlare for:
|
||||
- Global CDN caching
|
||||
- DDoS protection
|
||||
- Free SSL certificates
|
||||
- WAF (Web Application Firewall)
|
||||
|
||||
### Enable CloudFlare Headers
|
||||
|
||||
Add to `.env`:
|
||||
```env
|
||||
SENTRY_DSN=https://your-sentry-dsn
|
||||
CLOUDFLARE_ENABLED=true
|
||||
```
|
||||
|
||||
This enables proper handling of `CF-Connecting-IP` for real client IPs.
|
||||
|
||||
See [CloudFlare Setup Guide](cloudflare.md) for complete configuration.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Reference in New Issue
Block a user