# QCrypt RNG - Production Deployment Guide This guide provides instructions for deploying QCrypt RNG in a production environment. ## Table of Contents - [Architecture Overview](#architecture-overview) - [Prerequisites](#prerequisites) - [Environment Configuration](#environment-configuration) - [Deployment Options](#deployment-options) - [Security Considerations](#security-considerations) - [Monitoring and Maintenance](#monitoring-and-maintenance) - [Troubleshooting](#troubleshooting) ## Architecture Overview QCrypt RNG consists of the following components: - **API Server**: FastAPI application serving quantum random number generation endpoints - **Dashboard**: Next.js 16 web interface for visualization and management (served via Nginx) - **Database**: PostgreSQL for persistent data storage - **Cache**: Redis for session management and caching - **Quantum Backend**: Either simulated or connected to real quantum computers - **Web Server**: Nginx reverse proxy serving both API and dashboard on a single port ## Prerequisites Before deploying QCrypt RNG in production, ensure you have: - **Kubernetes cluster** (v1.20+) or **Docker Compose** environment - **Domain name** for your deployment - **SSL certificate** for HTTPS - **PostgreSQL database** (managed or self-hosted) - **Redis instance** (managed or self-hosted) - **Quantum computing access** (optional, for real quantum backends) ## Environment Configuration ### Required Environment Variables #### API Server ```bash # Application settings ENVIRONMENT=production DEBUG=false APP_NAME="QCrypt RNG Production" APP_VERSION="2.0.0" # API configuration API_HOST=0.0.0.0 API_PORT=8000 ALLOWED_ORIGINS=https://yourdomain.com,https://dashboard.yourdomain.com # Security configuration SECRET_KEY=your-very-long-secret-key-here-at-least-32-chars ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=30 # Database configuration DATABASE_URL=postgresql://user:password@host:port/database # Cache configuration REDIS_URL=redis://host:port/0 # Quantum backend configuration QUANTUM_BACKEND=ibm_quantum # or qrisp_simulator, iqm_quantum, rigetti IBM_QUANTUM_TOKEN=your_ibm_quantum_token # if using IBM backend # Rate limiting RATE_LIMIT_REQUESTS=1000 RATE_LIMIT_PERIOD=3600 # Tier limits FREE_TIER_MAX_BYTES=256 FREE_TIER_MAX_REQUESTS=100 PRO_TIER_MAX_BYTES=1024 PRO_TIER_MAX_REQUESTS=1000 ENTERPRISE_TIER_MAX_BYTES=10240 ENTERPRISE_TIER_MAX_REQUESTS=10000 # API key configuration REQUIRE_API_KEY=true API_KEY_HEADER=X-API-Key # Comma-separated list of accepted API keys (in-memory allow-list). # For large-scale deployments, replace with a database or Redis lookup. VALID_API_KEYS=key-aaaa1111bbbb2222,key-cccc3333dddd4444 # Request body size limit (bytes). Default 1 MB. MAX_REQUEST_BODY_SIZE_BYTES=1048576 # Stripe billing (optional; leave unset for free-only deployments) # STRIPE_SECRET_KEY=sk_live_... # STRIPE_WEBHOOK_SECRET=whsec_... # STRIPE_PRICE_ID_PRO=price_... # STRIPE_PRICE_ID_ENTERPRISE=price_... # Monitoring LOG_LEVEL=INFO ENABLE_DETAILED_LOGGING=true ENABLE_AUDIT_LOGGING=true AUDIT_LOG_RETENTION_DAYS=365 FIPS_MODE=false ``` #### Billing When Stripe variables are set, the billing router (`/api/v2/stripe/webhook`) processes subscription lifecycle events and updates the API key tier in the rate-limits database automatically. Without Stripe, tiers can be set via the admin endpoint `POST /api/v2/billing/keys/register` or by inserting rows directly into the `rate_limits` SQLite table. #### Dashboard The dashboard is built with Next.js 16 and served via Nginx alongside the FastAPI backend. ```bash # Build the dashboard (run from quantum-oracle-ui/) cd quantum-oracle-ui npm install npm run build # Environment variables for dashboard NEXT_PUBLIC_API_BASE_URL=https://api.yourdomain.com/api/v2 API_BASE_URL=https://api.yourdomain.com # Production server command npm run start ``` **Single Docker Deployment:** The `Dockerfile` builds both the FastAPI backend and Next.js frontend, served via Nginx on port 7860 (for Hugging Face Spaces) or configurable ports. The Nginx configuration (`nginx.spaces.conf`) routes: - `/api/*` → FastAPI backend - `/` → Next.js dashboard ## Deployment Options ### Option 1: Kubernetes Deployment 1. **Prepare your Kubernetes cluster** with sufficient resources 2. **Update the Kubernetes manifests** in the `k8s/` directory with your specific configurations 3. **Set up secrets** for sensitive information: ```bash kubectl create secret generic postgres-secret \ --from-literal=password=your_secure_password \ -n qcrypt-rng ``` 4. **Deploy using the provided script**: ```bash ./deploy.sh ``` ### Option 2: Docker Compose Deployment For development and testing, you can use Docker Compose to run separate services: ```bash docker-compose up -d ``` ### Option 3: Single Docker Image (Recommended for Production) Build and run the unified Docker image that includes Nginx, FastAPI, and Next.js: ```bash # Build the image docker build -t qcrypt-rng . # Run the container docker run -d -p 7860:7860 \ -e ENVIRONMENT=production \ -e SECRET_KEY=your-secure-key \ -e DATABASE_URL=postgresql://... \ qcrypt-rng ``` Access the application at `http://localhost:7860`: - Dashboard: `http://localhost:7860/` - API Docs: `http://localhost:7860/docs` ### Option 4: Manual Deployment 1. **Set up your infrastructure** (database, cache, load balancer) 2. **Configure environment variables** as shown above 3. **Deploy the API server** using your preferred method (PM2, systemd, etc.) 4. **Build and deploy the Next.js dashboard**: ```bash # Build the dashboard cd quantum-oracle-ui npm install npm run build # Start with production environment API_BASE_URL=https://api.yourdomain.com npm run start ``` 5. **Configure Nginx** to proxy requests: - `/api/*` → FastAPI backend (port 8000) - `/` → Next.js dashboard (port 3000) ## Security Considerations ### API Security - Always use HTTPS in production. - **CORS** is restricted to the origins listed in `ALLOWED_ORIGINS`. Never use `*` with credentials in production. - **Security headers** are added automatically to every response: - `X-Content-Type-Options: nosniff` - `X-Frame-Options: DENY` - `Referrer-Policy: strict-origin-when-cross-origin` - `Permissions-Policy: geolocation=(), camera=(), microphone=()` - In production (`ENVIRONMENT=production`): `Strict-Transport-Security` and `Content-Security-Policy` are also set. - **Request body size limit** is enforced (default 1 MB, configurable via `MAX_REQUEST_BODY_SIZE_BYTES`). Requests exceeding the limit receive HTTP 413. - **SECRET_KEY** must be set to a real value (>= 32 characters) in production. The application will refuse to start if the default placeholder is detected when `ENVIRONMENT=production`. ### API Key Management - Set `REQUIRE_API_KEY=true` in production. - Supply accepted keys via `VALID_API_KEYS` (comma-separated). Keys are validated using constant-time comparison. The raw key is never logged; only a SHA-256 prefix hash appears in audit logs. - For large-scale deployments, replace the in-memory allow-list with a database or Redis lookup in `api_key_middleware`. - Enable rate limiting to prevent abuse. - Regularly rotate secrets and API keys. ### Audit Logging - Security events (invalid/missing API keys, rate-limit violations) are written to `logs/security_.log` via the dedicated security logger. - Audit logs are retained for 365 days by default (`AUDIT_LOG_RETENTION_DAYS`). - Sensitive values (API keys, randomness) are never included in logs. ### Data Protection - Encrypt sensitive data in transit and at rest. - Implement proper backup strategies. - Follow the principle of least privilege. - Regular security audits and penetration testing. ### Quantum Backend Security - Secure access to quantum computers. - Implement proper authentication and authorization. - Monitor quantum backend access logs. - Regular updates and patches. ## Monitoring and Maintenance ### Key Metrics to Monitor - API response times - Error rates - Quantum generation performance - Database performance - Cache hit ratios - Resource utilization ### Logging - Enable detailed logging in production - Implement log aggregation and analysis - Set up alerts for critical issues - Regular log rotation and archival ### Maintenance Tasks - Regular security updates - Database maintenance and optimization - Quantum backend calibration - Performance tuning ## Troubleshooting ### Common Issues #### API Server Not Starting - Check environment variables - Verify database connectivity - Review logs for specific error messages #### Slow Quantum Generation - Check quantum backend configuration - Verify sufficient qubit allocation - Review performance metrics #### Dashboard Not Connecting to API - Verify API_BASE_URL configuration - Check network connectivity between services - Review CORS settings ### Getting Help - Check the logs in the `logs/` directory - Review the API documentation at `/docs` - Contact support at [support@qcrypt.example.com](mailto:support@qcrypt.example.com) - Open an issue in our [GitHub repository](https://github.com/quantumGlobalGroup/qcrypt-rng) ## Upgrading To upgrade to a new version: 1. **Backup your data** (database, configuration files) 2. **Review release notes** for breaking changes 3. **Test in staging environment** first 4. **Deploy to production** following your standard procedures 5. **Monitor closely** after deployment --- For additional support or questions, please reach out to our team.