Major improvements: - Created startup orchestration system with health monitoring and graceful shutdown - Fixed user registration and login with simplified authentication flow - Rebuilt authentication forms from scratch with direct API integration - Implemented comprehensive debugging and error handling - Added Redis fallback functionality for disabled environments - Fixed CORS configuration for cross-origin frontend requests - Simplified password validation to 6+ characters (removed complexity requirements) - Added toast notifications at app level for better UX feedback - Created comprehensive startup/shutdown scripts with OODA methodology - Fixed database validation and connection issues - Implemented TokenService memory fallback when Redis is disabled Technical details: - New SimpleLoginForm.tsx and SimpleRegisterForm.tsx components - Enhanced CORS middleware with additional allowed origins - Simplified auth validators and removed strict password requirements - Added extensive logging and diagnostic capabilities - Fixed authentication middleware token validation - Implemented graceful Redis error handling throughout the stack - Created modular startup system with configurable health checks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
568 lines
No EOL
14 KiB
Markdown
568 lines
No EOL
14 KiB
Markdown
# Shattered Void MMO - Startup System Guide
|
||
|
||
This guide covers the comprehensive startup system for the Shattered Void MMO, providing multiple ways to launch and manage the game services.
|
||
|
||
## Quick Start
|
||
|
||
The easiest way to start the game:
|
||
|
||
```bash
|
||
# Simple startup with all default settings
|
||
./start.sh
|
||
|
||
# Or using npm
|
||
npm run game
|
||
```
|
||
|
||
## Startup Options
|
||
|
||
### Shell Script (Recommended)
|
||
|
||
The `start.sh` script provides the most user-friendly interface:
|
||
|
||
```bash
|
||
# Development mode (default)
|
||
./start.sh
|
||
|
||
# Production mode
|
||
./start.sh --env production
|
||
|
||
# Debug mode with verbose logging
|
||
./start.sh --debug --verbose
|
||
|
||
# Backend only (no frontend)
|
||
./start.sh --no-frontend
|
||
|
||
# Custom port
|
||
./start.sh --port 8080
|
||
|
||
# Skip database checks (useful for testing)
|
||
./start.sh --no-database --skip-preflight
|
||
```
|
||
|
||
### NPM Scripts
|
||
|
||
```bash
|
||
# Comprehensive startup with full system validation
|
||
npm run start:game
|
||
|
||
# Environment-specific startup
|
||
npm run start:dev # Development mode
|
||
npm run start:prod # Production mode
|
||
npm run start:staging # Staging mode
|
||
|
||
# Quick startup (shell script)
|
||
npm run start:quick
|
||
|
||
# Debug mode
|
||
npm run start:debug
|
||
|
||
# Backend only
|
||
npm run start:backend-only
|
||
```
|
||
|
||
### Direct Node.js
|
||
|
||
```bash
|
||
# Direct startup (bypasses some safety checks)
|
||
node start-game.js
|
||
|
||
# With environment
|
||
NODE_ENV=production node start-game.js
|
||
```
|
||
|
||
## Configuration
|
||
|
||
### Environment Variables
|
||
|
||
The startup system respects these environment variables:
|
||
|
||
```bash
|
||
# Core settings
|
||
NODE_ENV=development|production|staging|testing
|
||
PORT=3000 # Backend port
|
||
FRONTEND_PORT=5173 # Frontend port
|
||
HOST=0.0.0.0 # Host binding
|
||
|
||
# Service toggles
|
||
ENABLE_FRONTEND=true|false # Enable/disable frontend
|
||
DISABLE_DATABASE=true|false # Skip database
|
||
DISABLE_REDIS=true|false # Skip Redis
|
||
ENABLE_HEALTH_MONITORING=true|false # Health checks
|
||
|
||
# Startup behavior
|
||
SKIP_PREFLIGHT=true|false # Skip system checks
|
||
VERBOSE_STARTUP=true|false # Detailed logging
|
||
AUTO_MIGRATE=true|false # Auto-run migrations
|
||
AUTO_SEED=true|false # Auto-run seeds
|
||
|
||
# Visual settings
|
||
DISABLE_BANNER=true|false # Hide startup banner
|
||
DISABLE_COLORS=true|false # Disable colored output
|
||
```
|
||
|
||
### Configuration File
|
||
|
||
Advanced configuration is available in `config/startup.config.js`:
|
||
|
||
```javascript
|
||
// Example: Custom timeout settings
|
||
const config = {
|
||
backend: {
|
||
startupTimeout: 30000, // 30 seconds
|
||
healthEndpoint: '/health'
|
||
},
|
||
database: {
|
||
migrationTimeout: 60000, // 60 seconds
|
||
autoMigrate: true
|
||
},
|
||
healthMonitoring: {
|
||
interval: 30000, // 30 seconds
|
||
alertThresholds: {
|
||
responseTime: 5000, // 5 seconds
|
||
memoryUsage: 80 // 80%
|
||
}
|
||
}
|
||
};
|
||
```
|
||
|
||
## System Components
|
||
|
||
### 1. Pre-flight Checks (`scripts/startup-checks.js`)
|
||
|
||
Validates system requirements before startup:
|
||
|
||
- ✅ Node.js version (18+)
|
||
- ✅ NPM availability
|
||
- ✅ Environment configuration
|
||
- ✅ Directory structure
|
||
- ✅ Package dependencies
|
||
- ✅ Port availability
|
||
- ✅ Database configuration
|
||
- ✅ Redis configuration (optional)
|
||
- ✅ Log directories
|
||
- ✅ Frontend dependencies (optional)
|
||
- ✅ System memory (1GB+ recommended)
|
||
- ✅ Disk space (<90% usage)
|
||
- ✅ File permissions
|
||
|
||
Test individually:
|
||
```bash
|
||
npm run system:check
|
||
```
|
||
|
||
### 2. Database Validation (`scripts/database-validator.js`)
|
||
|
||
Comprehensive database health checks:
|
||
|
||
- 🔗 Connectivity testing
|
||
- 📦 Migration status and auto-execution
|
||
- 🏗️ Schema structure validation
|
||
- 🌱 Seed data verification
|
||
- 🔍 Data integrity checks
|
||
- 📊 Performance metrics
|
||
|
||
Test individually:
|
||
```bash
|
||
npm run db:validate
|
||
```
|
||
|
||
### 3. Health Monitoring (`scripts/health-monitor.js`)
|
||
|
||
Real-time service monitoring:
|
||
|
||
- 🏥 Service health checks
|
||
- 📈 Performance metrics
|
||
- 🚨 Alert system
|
||
- 📊 Uptime tracking
|
||
- 💾 System resource monitoring
|
||
|
||
Test individually:
|
||
```bash
|
||
npm run health:check
|
||
```
|
||
|
||
### 4. Main Orchestrator (`start-game.js`)
|
||
|
||
Central startup coordination:
|
||
|
||
- 🎭 Phase-based startup
|
||
- ⏱️ Timeout management
|
||
- 🔄 Retry logic
|
||
- 📝 Comprehensive logging
|
||
- 🛑 Graceful shutdown
|
||
- 📊 Performance metrics
|
||
- 🔧 Node.js version compatibility detection
|
||
- 📦 Automatic frontend fallback for older Node.js versions
|
||
|
||
## Node.js Version Compatibility
|
||
|
||
The system automatically detects Node.js version compatibility and handles Vite development server limitations:
|
||
|
||
### Vite Development Server Requirements
|
||
|
||
- **Node.js 20+**: Full Vite development server support
|
||
- **Node.js 18-19**: Automatic fallback to built frontend static server
|
||
- **Node.js <18**: Not supported
|
||
|
||
### Automatic Fallback Behavior
|
||
|
||
When Node.js version is incompatible with Vite 7.x (requires `crypto.hash()` from Node.js 20+):
|
||
|
||
1. **Detection**: System detects Node.js version during startup
|
||
2. **Warning**: Clear warning about version compatibility
|
||
3. **Fallback**: Automatically serves built frontend from `/frontend/dist/`
|
||
4. **Status**: Frontend shows as "static" mode in startup summary
|
||
|
||
```bash
|
||
# Example startup output with Node.js 18.x
|
||
Node.js version: v18.19.1
|
||
Node.js v18.19.1 is not compatible with Vite 7.x (requires Node.js 20+)
|
||
crypto.hash() function is not available in this Node.js version
|
||
Attempting to serve built frontend as fallback...
|
||
Built frontend fallback started in 5ms
|
||
|
||
║ ✅ Frontend:5173 (static) ║
|
||
```
|
||
|
||
### Configuration Options
|
||
|
||
Control fallback behavior with environment variables:
|
||
|
||
```bash
|
||
# Disable frontend fallback (fail if Vite incompatible)
|
||
FRONTEND_FALLBACK=false ./start.sh
|
||
|
||
# Force use built frontend even with compatible Node.js
|
||
# (automatically happens if Vite dev server fails for any reason)
|
||
```
|
||
|
||
### Building Frontend for Fallback
|
||
|
||
Ensure built frontend is available:
|
||
|
||
```bash
|
||
# Build frontend for production/fallback use
|
||
cd frontend
|
||
npm run build
|
||
|
||
# Verify build exists
|
||
ls -la dist/
|
||
```
|
||
|
||
## Startup Phases
|
||
|
||
The startup system follows these phases:
|
||
|
||
1. **🔍 Pre-flight Checks** - System validation
|
||
2. **🗄️ Database Validation** - DB connectivity and migrations
|
||
3. **🖥️ Backend Server Startup** - Express server launch
|
||
4. **🌐 Frontend Server Startup** - React dev server (if enabled)
|
||
5. **🏥 Health Monitoring** - Service monitoring activation
|
||
|
||
Each phase includes:
|
||
- ⏱️ Timing metrics
|
||
- 🔄 Retry logic
|
||
- ❌ Error handling
|
||
- 📊 Progress reporting
|
||
|
||
## Service Management
|
||
|
||
### Starting Services
|
||
|
||
```bash
|
||
# Full stack (backend + frontend + monitoring)
|
||
./start.sh
|
||
|
||
# Backend only
|
||
./start.sh --no-frontend
|
||
|
||
# Skip health monitoring
|
||
./start.sh --no-health
|
||
|
||
# Database-free mode (for testing)
|
||
./start.sh --no-database
|
||
```
|
||
|
||
### Stopping Services
|
||
|
||
```bash
|
||
# Graceful shutdown
|
||
Ctrl+C
|
||
|
||
# Force stop (if needed)
|
||
pkill -f start-game.js
|
||
```
|
||
|
||
### Service Status
|
||
|
||
The startup system provides real-time status:
|
||
|
||
```
|
||
╔═══════════════════════════════════════════════════════════════╗
|
||
║ STARTUP SUMMARY ║
|
||
╠═══════════════════════════════════════════════════════════════╣
|
||
║ Total Duration: 2847ms ║
|
||
║ ║
|
||
║ Services Status: ║
|
||
║ ✅ Preflight ║
|
||
║ ✅ Database ║
|
||
║ ✅ Backend:3000 ║
|
||
║ ✅ Frontend:5173 ║
|
||
║ ✅ HealthMonitor ║
|
||
╚═══════════════════════════════════════════════════════════════╝
|
||
```
|
||
|
||
## Troubleshooting
|
||
|
||
### Common Issues
|
||
|
||
1. **Port already in use**
|
||
```bash
|
||
# Use different port
|
||
./start.sh --port 8080
|
||
|
||
# Or kill existing process
|
||
lsof -ti:3000 | xargs kill
|
||
```
|
||
|
||
2. **Database connection failed**
|
||
```bash
|
||
# Check PostgreSQL status
|
||
sudo systemctl status postgresql
|
||
|
||
# Start PostgreSQL
|
||
sudo systemctl start postgresql
|
||
|
||
# Create database
|
||
createdb shattered_void_dev
|
||
```
|
||
|
||
3. **Missing dependencies**
|
||
```bash
|
||
# Install dependencies
|
||
npm install
|
||
|
||
# Install frontend dependencies
|
||
cd frontend && npm install
|
||
```
|
||
|
||
4. **Migration issues**
|
||
```bash
|
||
# Reset database
|
||
npm run db:reset
|
||
|
||
# Manual migration
|
||
npm run db:migrate
|
||
```
|
||
|
||
5. **Vite development server fails (Node.js compatibility)**
|
||
```bash
|
||
# Check Node.js version
|
||
node --version
|
||
|
||
# If Node.js < 20, system will automatically fallback
|
||
# To upgrade Node.js:
|
||
# Using nvm:
|
||
nvm install 20
|
||
nvm use 20
|
||
|
||
# Using package manager:
|
||
# Ubuntu/Debian: sudo apt update && sudo apt install nodejs
|
||
# MacOS: brew install node@20
|
||
|
||
# Verify fallback works by ensuring frontend is built:
|
||
cd frontend && npm run build
|
||
```
|
||
|
||
6. **Frontend fallback not working**
|
||
```bash
|
||
# Ensure frontend is built
|
||
cd frontend
|
||
npm install
|
||
npm run build
|
||
|
||
# Verify build directory exists
|
||
ls -la dist/
|
||
|
||
# Check if Express is available (should be in package.json)
|
||
npm list express
|
||
```
|
||
|
||
### Debug Mode
|
||
|
||
Enable comprehensive debugging:
|
||
|
||
```bash
|
||
# Maximum verbosity
|
||
./start.sh --debug --verbose
|
||
|
||
# Or with environment variables
|
||
DEBUG=* VERBOSE_STARTUP=true ./start.sh
|
||
```
|
||
|
||
### Logs
|
||
|
||
Access different log streams:
|
||
|
||
```bash
|
||
# Combined logs
|
||
npm run logs
|
||
|
||
# Error logs only
|
||
npm run logs:error
|
||
|
||
# Startup logs
|
||
npm run logs:startup
|
||
|
||
# Audit logs
|
||
npm run logs:audit
|
||
```
|
||
|
||
### Health Check Endpoints
|
||
|
||
Once running, access health information:
|
||
|
||
```bash
|
||
# Backend health
|
||
curl http://localhost:3000/health
|
||
|
||
# Health monitoring data (if debug endpoints enabled)
|
||
curl http://localhost:3000/debug/health
|
||
```
|
||
|
||
## Production Deployment
|
||
|
||
### Production Mode
|
||
|
||
```bash
|
||
# Production startup
|
||
./start.sh --env production
|
||
|
||
# Or with npm
|
||
npm run start:prod
|
||
```
|
||
|
||
Production mode changes:
|
||
- 🚫 Frontend disabled (serves pre-built assets)
|
||
- ⚡ Faster health check intervals
|
||
- 🔒 Enhanced security checks
|
||
- 📊 Performance monitoring enabled
|
||
- 🚨 Stricter error handling
|
||
|
||
### Environment Variables for Production
|
||
|
||
```bash
|
||
NODE_ENV=production
|
||
DISABLE_FRONTEND=true # Use nginx/CDN for frontend
|
||
ENABLE_HEALTH_MONITORING=true
|
||
LOG_LEVEL=warn
|
||
CRASH_REPORTING=true
|
||
PERFORMANCE_REPORTING=true
|
||
```
|
||
|
||
### Docker Integration
|
||
|
||
The startup system works with Docker:
|
||
|
||
```bash
|
||
# Build Docker image
|
||
npm run docker:build
|
||
|
||
# Run with Docker Compose
|
||
npm run docker:run
|
||
```
|
||
|
||
## Development Tips
|
||
|
||
### Quick Development Cycle
|
||
|
||
```bash
|
||
# Fast startup without full checks
|
||
SKIP_PREFLIGHT=true ./start.sh --no-frontend
|
||
|
||
# Backend only with auto-restart
|
||
npm run dev
|
||
```
|
||
|
||
### Testing the Startup System
|
||
|
||
```bash
|
||
# Test all components
|
||
npm run system:check # Pre-flight checks
|
||
npm run db:validate # Database validation
|
||
npm run health:check # Health monitoring
|
||
|
||
# Test specific scenarios
|
||
./start.sh --no-database --skip-preflight # Minimal startup
|
||
./start.sh --debug --log-file startup.log # Full logging
|
||
```
|
||
|
||
### Customizing the Startup
|
||
|
||
Modify `config/startup.config.js` for custom behavior:
|
||
|
||
```javascript
|
||
module.exports = {
|
||
backend: {
|
||
startupTimeout: 45000, // Longer timeout
|
||
port: 8080 // Different default port
|
||
},
|
||
preflightChecks: {
|
||
enabled: false // Skip checks in development
|
||
}
|
||
};
|
||
```
|
||
|
||
## API Reference
|
||
|
||
### Startup Script Options
|
||
|
||
| Option | Environment Variable | Description |
|
||
|--------|---------------------|-------------|
|
||
| `--env ENV` | `NODE_ENV` | Set environment mode |
|
||
| `--port PORT` | `PORT` | Backend server port |
|
||
| `--frontend-port PORT` | `FRONTEND_PORT` | Frontend server port |
|
||
| `--no-frontend` | `ENABLE_FRONTEND=false` | Disable frontend |
|
||
| `--no-health` | `ENABLE_HEALTH_MONITORING=false` | Disable health monitoring |
|
||
| `--no-database` | `DISABLE_DATABASE=true` | Skip database |
|
||
| `--no-redis` | `DISABLE_REDIS=true` | Skip Redis |
|
||
| `--skip-preflight` | `SKIP_PREFLIGHT=true` | Skip system checks |
|
||
| `--verbose` | `VERBOSE_STARTUP=true` | Enable verbose logging |
|
||
| `--debug` | `DEBUG=*` | Enable debug mode |
|
||
| `--no-colors` | `DISABLE_COLORS=true` | Disable colored output |
|
||
|
||
### NPM Scripts Reference
|
||
|
||
| Script | Description |
|
||
|--------|-------------|
|
||
| `npm run game` | Quick startup (shell script) |
|
||
| `npm run start:game` | Full startup with validation |
|
||
| `npm run start:dev` | Development mode |
|
||
| `npm run start:prod` | Production mode |
|
||
| `npm run start:debug` | Debug mode |
|
||
| `npm run start:backend-only` | Backend only |
|
||
| `npm run system:check` | Run system checks |
|
||
| `npm run health:check` | Test health monitoring |
|
||
| `npm run db:validate` | Validate database |
|
||
|
||
## Contributing
|
||
|
||
When modifying the startup system:
|
||
|
||
1. **Test all scenarios** - Test with different combinations of flags
|
||
2. **Update documentation** - Keep this guide current
|
||
3. **Maintain backward compatibility** - Don't break existing workflows
|
||
4. **Add comprehensive logging** - Help with debugging
|
||
5. **Follow error handling patterns** - Use the established error classes
|
||
|
||
The startup system is designed to be:
|
||
- 🛡️ **Robust** - Handles failures gracefully
|
||
- 🔧 **Configurable** - Adapts to different environments
|
||
- 📊 **Observable** - Provides comprehensive monitoring
|
||
- 🚀 **Fast** - Optimized startup performance
|
||
- 🎯 **User-friendly** - Clear interface and error messages
|
||
|
||
---
|
||
|
||
For more information, see the individual component documentation or run `./start.sh --help`. |