Complete this checklist before deploying MCP Hub to production.
- Run validation:
./test-deployment.sh(Linux/Mac) ortest-deployment.bat(Windows) - All required files present
- No missing directories
- Scripts are executable
-
.envfile created from template - CRITICAL: All
CHANGE_MEpasswords replaced with strong passwords - Database credentials set (PostgreSQL, MongoDB, Redis)
- API keys added for services you plan to use
- Domain name configured (for production)
- Validation tests pass:
./test-deployment.sh - Integration tests pass:
./test-integration.sh - All services start correctly
- Health endpoints respond
- No errors in logs
- Strong passwords set (minimum 16 characters, mixed case, numbers, symbols)
-
.envfile has secure permissions (chmod 600) -
.envis in.gitignore(verify it won't be committed) - Default ports changed (if needed for security)
- Firewall rules planned
- SSL certificate plan ready (Let's Encrypt or Cloudflare)
- Read CLOUD_DEPLOYMENT.md
- Understand backup/restore process
- Know how to access logs
- Emergency rollback plan documented
- PostgreSQL password: Strong & unique
- MongoDB password: Strong & unique
- Redis password: Strong & unique
- All API keys are valid and working
- No hardcoded secrets in code
- MCP API key set (optional but recommended)
- Only necessary ports exposed (80, 443, 22)
- Database ports NOT exposed to internet
- Firewall configured:
ufw allow ssh ufw allow http ufw allow https ufw enable
- nginx security headers enabled
- Rate limiting configured
- SSL/TLS certificates ready
- CORS properly configured
- Docker containers run as non-root (where possible)
- Cloud provider account ready (Digital Ocean, Cloudflare, AWS, etc.)
- Domain name purchased and DNS accessible
- Payment method set up
- Backup storage configured (S3 or similar)
- Server provisioned (minimum 2 vCPU, 4GB RAM)
- Docker & Docker Compose installed
- Files uploaded to server
-
.envconfigured on server - Domain DNS pointed to server IP
- SSL certificate obtained
- Health check passes:
curl https://yourdomain.com/health - All services responding
- Prometheus accessible (if exposed)
- Logs are clean (no critical errors)
- Backups configured and tested
# 1. Validation tests
./test-deployment.sh # Should pass all checks
# 2. Integration tests
./test-integration.sh # Should pass all tests
# 3. Manual testing
curl http://localhost:3100/health
curl http://localhost:3100/tools# 1. Health check
curl https://yourdomain.com/health
# 2. SSL verification
curl -vI https://yourdomain.com 2>&1 | grep -i "ssl\|certificate"
# 3. MCP endpoint
curl -X POST https://yourdomain.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"notion.placeholder","params":{},"id":1}'
# 4. Load test (optional)
ab -n 100 -c 10 https://yourdomain.com/health- Backup script tested:
./scripts/backup.sh - Restore script tested:
./scripts/restore.sh - S3 bucket created (or alternative)
- Backup retention policy set (default: 7 days)
# Add to crontab
crontab -e
# Daily backup at 2 AM
0 2 * * * cd /opt/mcp-hub && docker-compose run --rm backup- Take a backup
- Restore to test environment
- Verify all data intact
- Prometheus accessible
- Node exporter running
- Key metrics visible:
- Container health
- Memory usage
- CPU usage
- Disk space
- Request rates
- Disk space < 10% alert
- Memory usage > 90% alert
- Service down alert
- SSL certificate expiry < 30 days
- UptimeRobot configured
- Healthchecks.io configured
- PagerDuty/OpsGenie (for critical systems)
- All tests passing
- Backups verified
- Team notified
- Rollback plan ready
- Take final backup
- Upload files to server
- Configure environment
- Start services
- Verify health checks
- Test from external network
- Monitor logs for 15 minutes
- All services stable
- No errors in logs
- Response times acceptable
- External access working
- IDE connection tested
- System stable for 24 hours
- Automated backups running
- Monitoring showing normal metrics
- No unexpected issues
- Check service health
- Review error logs
- Monitor disk space
- Review all logs
- Check resource usage trends
- Verify backups completed
- Test restore (monthly)
- Update Docker images
- Security updates
- SSL certificate check
- Review access logs
- Performance optimization
- Check logs:
docker-compose logs -f - Restart service:
docker-compose restart <service> - If failed, full restart:
docker-compose down && docker-compose up -d
- Stop services:
docker-compose down - Restore from backup:
./scripts/restore.sh - Verify data integrity
- Restart services
- Immediately stop services
- Rotate all passwords and API keys
- Review access logs
- Restore from clean backup
- Apply security patches
- Document incident
Before going to production, ensure:
- All checklist items above completed
- Tests passing (validation + integration)
- Security hardened
- Backups configured and tested
- Monitoring active
- Documentation updated
- Team trained
- Rollback plan ready
Deployment Approved By: _______________
Date: _______________
Notes:
_________________________________________________
_________________________________________________
_________________________________________________
Emergency Contacts:
- Cloud Provider Support: ______________
- Domain Registrar: ______________
- On-Call Engineer: ______________
Documentation:
- README.md - Main documentation
- CLOUD_DEPLOYMENT.md - Deployment guide
- IDE_CONNECTIONS.md - Integration guide
Monitoring:
- Prometheus: https://yourdomain.com:9090
- Logs:
docker-compose logs -f
Your deployment is successful when:
β All services respond to health checks β MCP endpoint accessible from IDE β SSL certificate valid β No critical errors in logs for 1 hour β Response times < 500ms for health check β Backups running automatically β Monitoring shows green status
After completing this checklist, you're ready to deploy! π
Good luck with your deployment!