- Add complete dark mode system with theme context and toggle - Implement dark mode toggle component in navigation menu - Add client-side routing with SSR-safe signal handling - Fix language selector styling for better dark mode compatibility - Add documentation system with mdBook integration - Improve navigation menu with proper external/internal link handling - Add comprehensive project documentation and configuration - Enhance theme system with localStorage persistence - Fix arena panic issues during server-side rendering - Add proper TypeScript configuration and build optimizations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
428 lines
9.6 KiB
Markdown
428 lines
9.6 KiB
Markdown
# Configuration System Migration Guide
|
|
|
|
This guide explains how to migrate from the old monolithic configuration system to the new modular, environment-aware configuration system.
|
|
|
|
## Overview of Changes
|
|
|
|
The configuration system has been completely restructured to provide:
|
|
|
|
- **Environment-specific configurations** (dev, prod, example)
|
|
- **Feature-based modularity** with separate configuration files
|
|
- **Automatic configuration building** and validation
|
|
- **Backup and management utilities**
|
|
- **Better maintainability** and separation of concerns
|
|
|
|
## Before and After
|
|
|
|
### Old Structure (Before)
|
|
```
|
|
config/
|
|
├── config.toml # Monolithic config file
|
|
├── config.dev.toml # Development overrides
|
|
├── config.prod.toml # Production overrides
|
|
├── config.example.toml # Example configuration
|
|
└── features/
|
|
├── auth.toml # Feature configs (not environment-specific)
|
|
├── email.toml
|
|
├── tls.toml
|
|
└── ...
|
|
```
|
|
|
|
### New Structure (After)
|
|
```
|
|
config/
|
|
├── base/ # Base configurations by environment
|
|
│ ├── dev.toml # Development base settings
|
|
│ ├── prod.toml # Production base settings
|
|
│ └── example.toml # Example base settings
|
|
├── features/ # Feature configurations by environment
|
|
│ ├── auth/
|
|
│ │ ├── dev.toml # Auth settings for dev
|
|
│ │ ├── prod.toml # Auth settings for prod
|
|
│ │ └── example.toml # Auth example settings
|
|
│ ├── email/
|
|
│ │ ├── dev.toml
|
|
│ │ ├── prod.toml
|
|
│ │ └── example.toml
|
|
│ └── ...
|
|
├── scripts/ # Configuration management tools
|
|
│ ├── build-config.sh # Build complete configurations
|
|
│ ├── manage-config.sh # Management utilities
|
|
│ └── test-config.sh # Test suite
|
|
└── README.md # Documentation
|
|
```
|
|
|
|
## Migration Steps
|
|
|
|
### Step 1: Backup Current Configuration
|
|
|
|
First, backup your existing configuration files:
|
|
|
|
```bash
|
|
# Create backup directory
|
|
mkdir -p config/backup_$(date +%Y%m%d)
|
|
|
|
# Backup existing files
|
|
cp config.toml config/backup_$(date +%Y%m%d)/
|
|
cp config.*.toml config/backup_$(date +%Y%m%d)/ 2>/dev/null || true
|
|
cp -r config/features config/backup_$(date +%Y%m%d)/ 2>/dev/null || true
|
|
```
|
|
|
|
### Step 2: Analyze Current Configuration
|
|
|
|
Review your current `config.toml` to understand which features are enabled:
|
|
|
|
```bash
|
|
# Check feature flags
|
|
grep -E "^\[features\]" -A 20 config.toml
|
|
|
|
# Check enabled features
|
|
grep -E "^[a-zA-Z_]+ = true" config.toml | grep -v "#"
|
|
```
|
|
|
|
### Step 3: Create Base Configurations
|
|
|
|
Split your monolithic configuration into environment-specific base files:
|
|
|
|
#### For Development (`config/base/dev.toml`)
|
|
Extract development-specific settings:
|
|
- Debug mode enabled
|
|
- Relaxed security settings
|
|
- Local database connections
|
|
- Verbose logging
|
|
- Development-friendly timeouts
|
|
|
|
#### For Production (`config/base/prod.toml`)
|
|
Extract production-specific settings:
|
|
- Debug mode disabled
|
|
- Strict security settings
|
|
- Production database connections
|
|
- Minimal logging
|
|
- Production-optimized timeouts
|
|
|
|
#### For Example (`config/base/example.toml`)
|
|
Create comprehensive example with:
|
|
- All available options documented
|
|
- Best practice configurations
|
|
- Commented examples
|
|
|
|
### Step 4: Create Feature Configurations
|
|
|
|
For each feature in your system, create environment-specific configurations:
|
|
|
|
#### Example: Authentication Feature
|
|
|
|
**Development** (`config/features/auth/dev.toml`):
|
|
```toml
|
|
[features]
|
|
auth = true
|
|
|
|
[auth.security]
|
|
max_login_attempts = 10
|
|
lockout_duration = 300
|
|
require_email_verification = false
|
|
|
|
[auth.password]
|
|
min_length = 6
|
|
require_uppercase = false
|
|
```
|
|
|
|
**Production** (`config/features/auth/prod.toml`):
|
|
```toml
|
|
[features]
|
|
auth = true
|
|
|
|
[auth.security]
|
|
max_login_attempts = 3
|
|
lockout_duration = 1800
|
|
require_email_verification = true
|
|
|
|
[auth.password]
|
|
min_length = 12
|
|
require_uppercase = true
|
|
```
|
|
|
|
### Step 5: Set Up Build Scripts
|
|
|
|
Make the build scripts executable:
|
|
|
|
```bash
|
|
chmod +x config/scripts/build-config.sh
|
|
chmod +x config/scripts/manage-config.sh
|
|
```
|
|
|
|
### Step 6: Test the New System
|
|
|
|
Build and validate configurations for each environment:
|
|
|
|
```bash
|
|
# Test development configuration
|
|
./config/scripts/build-config.sh dev config.dev.toml
|
|
|
|
# Test production configuration
|
|
./config/scripts/build-config.sh prod config.prod.toml
|
|
|
|
# Validate configurations
|
|
./config/scripts/manage-config.sh validate dev
|
|
./config/scripts/manage-config.sh validate prod
|
|
```
|
|
|
|
### Step 7: Update Build Process
|
|
|
|
Update your build/deployment scripts to use the new configuration system:
|
|
|
|
#### Development
|
|
```bash
|
|
# Build development config
|
|
./config/scripts/build-config.sh dev config.toml
|
|
|
|
# Start application
|
|
cargo run
|
|
```
|
|
|
|
#### Production
|
|
```bash
|
|
# Build production config
|
|
./config/scripts/build-config.sh prod config.toml
|
|
|
|
# Deploy application
|
|
./deploy.sh
|
|
```
|
|
|
|
### Step 8: Clean Up Old Files
|
|
|
|
Once the new system is working, remove old configuration files:
|
|
|
|
```bash
|
|
# Remove old monolithic configs (after backing up)
|
|
rm config.dev.toml config.prod.toml config.example.toml
|
|
|
|
# Remove old feature configs
|
|
rm config/features/*.toml
|
|
|
|
# Keep only the new structure
|
|
```
|
|
|
|
## Feature Migration Examples
|
|
|
|
### Migrating Authentication Feature
|
|
|
|
**Old** (`config/features/auth.toml`):
|
|
```toml
|
|
[features]
|
|
auth = true
|
|
|
|
[oauth]
|
|
enabled = false
|
|
|
|
[auth.jwt]
|
|
secret = "development-secret"
|
|
expiration = 86400
|
|
|
|
[auth.password]
|
|
min_length = 8
|
|
require_uppercase = true
|
|
```
|
|
|
|
**New** - Split into environments:
|
|
|
|
**Development** (`config/features/auth/dev.toml`):
|
|
```toml
|
|
[features]
|
|
auth = true
|
|
|
|
[oauth]
|
|
enabled = false
|
|
|
|
[auth.jwt]
|
|
secret = "dev-jwt-secret"
|
|
expiration = 86400
|
|
|
|
[auth.password]
|
|
min_length = 6
|
|
require_uppercase = false
|
|
```
|
|
|
|
**Production** (`config/features/auth/prod.toml`):
|
|
```toml
|
|
[features]
|
|
auth = true
|
|
|
|
[oauth]
|
|
enabled = true
|
|
|
|
[auth.jwt]
|
|
secret = "${JWT_SECRET}"
|
|
expiration = 3600
|
|
|
|
[auth.password]
|
|
min_length = 12
|
|
require_uppercase = true
|
|
```
|
|
|
|
### Migrating Email Feature
|
|
|
|
**Old** (`config/features/email.toml`):
|
|
```toml
|
|
[features]
|
|
email = true
|
|
|
|
[email]
|
|
enabled = true
|
|
default_provider = "console"
|
|
|
|
[email.smtp]
|
|
host = "smtp.gmail.com"
|
|
port = 587
|
|
```
|
|
|
|
**New** - Split into environments:
|
|
|
|
**Development** (`config/features/email/dev.toml`):
|
|
```toml
|
|
[features]
|
|
email = true
|
|
|
|
[email]
|
|
enabled = true
|
|
default_provider = "console"
|
|
|
|
[email.console]
|
|
enabled = true
|
|
save_to_file = true
|
|
```
|
|
|
|
**Production** (`config/features/email/prod.toml`):
|
|
```toml
|
|
[features]
|
|
email = true
|
|
|
|
[email]
|
|
enabled = true
|
|
default_provider = "sendgrid"
|
|
|
|
[email.sendgrid]
|
|
api_key = "${SENDGRID_API_KEY}"
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
The new system makes extensive use of environment variables for sensitive data:
|
|
|
|
### Development
|
|
```bash
|
|
# Database
|
|
export DATABASE_URL="sqlite://dev_database.db"
|
|
|
|
# Session
|
|
export SESSION_SECRET="dev-session-secret"
|
|
|
|
# JWT
|
|
export JWT_SECRET="dev-jwt-secret"
|
|
```
|
|
|
|
### Production
|
|
```bash
|
|
# Database
|
|
export DATABASE_URL="postgresql://user:pass@localhost/prod_db"
|
|
|
|
# Session
|
|
export SESSION_SECRET="$(openssl rand -base64 32)"
|
|
|
|
# JWT
|
|
export JWT_SECRET="$(openssl rand -base64 32)"
|
|
|
|
# Email
|
|
export SENDGRID_API_KEY="your-sendgrid-api-key"
|
|
|
|
# TLS
|
|
export TLS_CERT_PATH="/path/to/cert.pem"
|
|
export TLS_KEY_PATH="/path/to/key.pem"
|
|
```
|
|
|
|
## Validation and Testing
|
|
|
|
### Automated Testing
|
|
```bash
|
|
# Run the test suite
|
|
./config/scripts/test-config.sh
|
|
|
|
# Test specific environment
|
|
./config/scripts/manage-config.sh validate dev
|
|
```
|
|
|
|
### Manual Validation
|
|
```bash
|
|
# Compare configurations
|
|
./config/scripts/manage-config.sh diff dev prod
|
|
|
|
# Check configuration status
|
|
./config/scripts/manage-config.sh status
|
|
```
|
|
|
|
## Rollback Procedure
|
|
|
|
If you need to rollback to the old system:
|
|
|
|
1. **Restore backup files**:
|
|
```bash
|
|
cp config/backup_*/config.toml .
|
|
cp config/backup_*/config.*.toml .
|
|
```
|
|
|
|
2. **Revert build scripts**: Update your build process to use the old configuration files directly.
|
|
|
|
3. **Update application code**: If you made changes to configuration loading, revert those changes.
|
|
|
|
## Benefits of the New System
|
|
|
|
1. **Environment Separation**: Clear separation between development and production settings
|
|
2. **Feature Modularity**: Each feature can be configured independently
|
|
3. **Maintainability**: Easier to maintain and update specific features
|
|
4. **Validation**: Built-in validation ensures configuration correctness
|
|
5. **Backup**: Automatic backup of existing configurations
|
|
6. **Extensibility**: Easy to add new features and environments
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
#### Missing Environment Variables
|
|
```bash
|
|
# Check for undefined variables
|
|
grep -r "\${" config/features/*/prod.toml
|
|
```
|
|
|
|
#### Invalid TOML Syntax
|
|
```bash
|
|
# Install TOML validator
|
|
cargo install toml-cli
|
|
|
|
# Validate files
|
|
toml get config.toml > /dev/null
|
|
```
|
|
|
|
#### Build Failures
|
|
```bash
|
|
# Enable debug mode
|
|
CONFIG_DEBUG=1 ./config/scripts/build-config.sh dev
|
|
```
|
|
|
|
### Getting Help
|
|
|
|
1. Check the `config/README.md` for detailed documentation
|
|
2. Run `./config/scripts/manage-config.sh help` for command usage
|
|
3. Use `./config/scripts/demo-config.sh` to see the system in action
|
|
4. Review the test suite in `./config/scripts/test-config.sh`
|
|
|
|
## Next Steps
|
|
|
|
After successful migration:
|
|
|
|
1. **Update Documentation**: Update your project documentation to reflect the new configuration system
|
|
2. **Train Team**: Ensure all team members understand the new system
|
|
3. **CI/CD Integration**: Update your CI/CD pipelines to use the new build process
|
|
4. **Monitoring**: Set up monitoring to ensure configurations are built correctly in deployment
|
|
|
|
The new configuration system provides a much more maintainable and scalable approach to managing application settings across different environments.
|