Spaces:
Sleeping
QCrypt RNG - Production Deployment Guide
This guide provides instructions for deploying QCrypt RNG in a production environment.
Table of Contents
- Architecture Overview
- Prerequisites
- Environment Configuration
- Deployment Options
- Security Considerations
- Monitoring and Maintenance
- 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
# 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.
# 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
- Prepare your Kubernetes cluster with sufficient resources
- Update the Kubernetes manifests in the
k8s/directory with your specific configurations - Set up secrets for sensitive information:
kubectl create secret generic postgres-secret \
--from-literal=password=your_secure_password \
-n qcrypt-rng
- Deploy using the provided script:
./deploy.sh
Option 2: Docker Compose Deployment
For development and testing, you can use Docker Compose to run separate services:
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:
# 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
- Set up your infrastructure (database, cache, load balancer)
- Configure environment variables as shown above
- Deploy the API server using your preferred method (PM2, systemd, etc.)
- Build and deploy the Next.js dashboard:
# 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
- 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: nosniffX-Frame-Options: DENYReferrer-Policy: strict-origin-when-cross-originPermissions-Policy: geolocation=(), camera=(), microphone=()- In production (
ENVIRONMENT=production):Strict-Transport-SecurityandContent-Security-Policyare 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=truein 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_<date>.logvia 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
- Open an issue in our GitHub repository
Upgrading
To upgrade to a new version:
- Backup your data (database, configuration files)
- Review release notes for breaking changes
- Test in staging environment first
- Deploy to production following your standard procedures
- Monitor closely after deployment
For additional support or questions, please reach out to our team.