Production Checklist
Verify security, performance, reliability, monitoring, and rollback item by item before launch
Work through this checklist before launch; open the deployment to users only after every critical item passes.
Security
- Password policy requires at least 8 characters with complexity; admins use two-factor auth.
- JWT secret is unique and strong; session timeout follows policy (site setting
session_timeout_days, default 30 days). - Accounts lock after 5 failed logins, new accounts require email verification; API keys have a rotation plan.
- HTTPS everywhere with valid certificates, TLS 1.2 minimum, HSTS enabled.
- CORS lists exact origins, no wildcards in production; rate limiting covers all endpoints.
- Firewall opens only required ports; database/Redis/vector ports stay private.
- Secrets live in environment variables or a secret manager — no hardcoding, no defaults,
.envnever committed. - Database connections encrypted, sensitive data encrypted at rest, backups encrypted.
- Security headers (CSP,
X-Frame-Options, etc.), input validation, and CSRF protection in place; dependency vulnerabilities scanned and fixed.
Performance and load testing
- Slow database queries optimized, common queries indexed, connection pool sized for concurrency.
- Redis caching in place with maxmemory and eviction policy set; static assets on CDN with Gzip/Brotli.
- Worker processes sized to CPU cores; queue consumer concurrency load-tested.
- Streaming timeouts configured: proxy read timeout at least 300s,
proxy_buffering off, Redismaxclientsand systemnofilesized for peak SSE connections. - Load and stress tests done: p95 under 500ms, concurrent users meet target (minimum 100, target 500), bottlenecks resolved.
- Targets: API p50 < 100ms, p95 < 500ms; chat first token < 2s; vector search < 500ms; CPU average < 60%, memory average < 70%.
Reliability and backup
- At least 3 backend instances behind a load balancer with health checks (
GET /api/v1/health); no single points of failure. - Database replication, Redis Sentinel or cluster mode, and Qdrant cluster (if used) configured with automatic failover drilled.
- Daily automated backups retained 30+ days, stored encrypted off-site; restore procedure documented and actually rehearsed, RTO/RPO defined.
- Retries with exponential backoff, timeouts and circuit breakers on external calls, dead-letter queue for failed tasks.
Monitoring and alerting
- Centralized logging (excluding tokens and passwords) with rotation and retention in place.
- Key metrics visible: RPS, latency, error rate, CPU/memory/disk, database and queue metrics.
- Alerts cover failed health checks, auth anomalies, queue backlog, disk exhaustion, and backup failures; on-call and escalation defined.
- The backend has no Prometheus
/metricsendpoint — use the admin observability endpoints plus infrastructure monitoring instead.
Clouisle uses Tortoise ORM: the backend creates and updates the schema automatically at startup, so there are no Alembic-style migrations to run manually.
Configuration and deployment
- All production environment variables set, no example defaults; environment configs separated and validated at startup.
- LLM keys, email, object storage, CDN, DNS, and certificate auto-renewal configured and tested.
- Images tagged and pushed to a registry, CI tests and security scans green, rollback documented and verified in staging.
- Staging mirrors production; rollback rehearsed in staging.
Launch day and first week
- Launch day: health endpoints, database, Redis, external integrations, certificates, DNS, and traffic distribution all healthy; smoke tests cover signup, login, agent creation, chat, upload, workflow, and search.
- First week: error rate under 1%, response times on target, no memory leaks, backup verification done, capacity plan reviewed.
- Launch sign-off from tech, security, ops, and product owners; rollback plan ready; on-call rota active.
How is this guide?