Rustelo/config/README.md

335 lines
9.9 KiB
Markdown
Raw Normal View History

2025-07-07 23:13:01 +01:00
# Rustelo Configuration System
A modular, environment-aware configuration system that separates concerns by features and environments.
## Overview
The Rustelo configuration system provides a flexible way to manage application configurations across different environments (development, production, example) while maintaining feature-specific settings in separate modules.
## Directory Structure
```
config/
├── base/ # Base configurations for each environment
│ ├── dev.toml # Development base settings
│ ├── prod.toml # Production base settings
│ └── example.toml # Example/template base settings
├── features/ # Feature-specific configurations
│ ├── auth/ # Authentication feature
│ │ ├── dev.toml # Auth settings for development
│ │ ├── prod.toml # Auth settings for production
│ │ └── example.toml # Auth example settings
│ ├── email/ # Email feature
│ │ ├── dev.toml # Email settings for development
│ │ ├── prod.toml # Email settings for production
│ │ └── example.toml # Email example settings
│ ├── tls/ # TLS/SSL feature
│ │ ├── dev.toml # TLS settings for development
│ │ ├── prod.toml # TLS settings for production
│ │ └── example.toml # TLS example settings
│ ├── content/ # Content management feature
│ │ ├── dev.toml # Content settings for development
│ │ ├── prod.toml # Content settings for production
│ │ └── example.toml # Content example settings
│ └── metrics/ # Metrics and monitoring feature
│ ├── dev.toml # Metrics settings for development
│ ├── prod.toml # Metrics settings for production
│ └── example.toml # Metrics example settings
├── scripts/ # Configuration management scripts
│ ├── build-config.sh # Shell script to build configurations
│ └── manage-config.sh # Configuration management utility
├── backups/ # Backup configurations (auto-created)
└── README.md # This file
```
## Quick Start
### 1. Build Configuration
Build a complete configuration for development:
```bash
./config/scripts/build-config.sh dev
```
Build configuration for production:
```bash
./config/scripts/build-config.sh prod config.prod.toml
```
### 2. Using the Management Script
The management script provides comprehensive configuration operations:
```bash
# Build configurations
./config/scripts/manage-config.sh build dev
./config/scripts/manage-config.sh build prod config.prod.toml
# Validate configurations
./config/scripts/manage-config.sh validate dev
./config/scripts/manage-config.sh validate prod
# List available features and environments
./config/scripts/manage-config.sh list-features
./config/scripts/manage-config.sh list-environments
# Compare configurations between environments
./config/scripts/manage-config.sh diff dev prod
# Create backups
./config/scripts/manage-config.sh backup prod
# Show configuration status
./config/scripts/manage-config.sh status
```
### 3. Using Python Builder (Advanced)
For more advanced TOML handling and validation:
```bash
# Build configuration
./config/scripts/build-config.sh dev
./config/scripts/build-config.sh prod config.prod.toml
# Validate only (no output file)
CONFIG_VALIDATE_ONLY=1 ./config/scripts/build-config.sh dev
```
## Configuration Structure
### Base Configurations
Base configurations (`config/base/`) contain core settings that apply to all features:
- **Server settings**: Protocol, host, port, workers
- **Database settings**: Connection strings, pool sizes
- **Session management**: Cookie settings, timeouts
- **CORS settings**: Allowed origins, methods, headers
- **Security settings**: CSRF, rate limiting, encryption
- **Logging settings**: Levels, formats, outputs
### Feature Configurations
Feature configurations (`config/features/`) contain settings specific to individual features:
- **Authentication**: JWT, OAuth, password policies, session management
- **Email**: SMTP, templates, queues, validation
- **TLS**: Certificates, protocols, security settings
- **Content**: Management, processing, validation, caching
- **Metrics**: Collection, export, alerting, performance tracking
### Environment-Specific Settings
Each environment has different optimization focuses:
#### Development (`dev.toml`)
- Relaxed security settings
- Verbose logging
- Hot reloading enabled
- Mock services
- Extended timeouts
- Debug features enabled
#### Production (`prod.toml`)
- Strict security settings
- Optimized performance
- Minimal logging
- Real services
- Short timeouts
- Debug features disabled
#### Example (`example.toml`)
- Complete feature documentation
- All available options shown
- Best practice configurations
- Commented examples
## How Configuration Building Works
1. **Load Base Configuration**: The base configuration for the target environment is loaded first
2. **Load Feature Configurations**: All available feature configurations for the environment are loaded
3. **Merge Configurations**: Features are merged into the base configuration using deep merging
4. **Add Build Information**: Metadata about the build process is added
5. **Validate Configuration**: The final configuration is validated for correctness
6. **Write Output**: The complete configuration is written to the output file
## Environment Variables
Configuration files support environment variable substitution using `${VARIABLE_NAME}` syntax:
```toml
[database]
url = "${DATABASE_URL}"
[auth.jwt]
secret = "${JWT_SECRET}"
[email.smtp]
password = "${SMTP_PASSWORD}"
```
## Creating New Features
### Using the Template Command
```bash
./config/scripts/manage-config.sh template my_feature
```
This creates a new feature directory with template files for all environments.
### Manual Creation
1. Create a new directory under `config/features/`
2. Create environment-specific TOML files (`dev.toml`, `prod.toml`, `example.toml`)
3. Define feature-specific settings in each file
Example feature structure:
```toml
# config/features/my_feature/dev.toml
[features]
my_feature = true
[my_feature]
enabled = true
debug_mode = true
# ... other settings
```
## Configuration Validation
The system includes built-in validation for:
- **TOML Syntax**: Ensures valid TOML structure
- **Required Sections**: Validates presence of essential configuration sections
- **Value Types**: Checks that configuration values are of expected types
- **Value Ranges**: Validates that numeric values are within acceptable ranges
- **Dependencies**: Ensures required dependencies are available when features are enabled
## Best Practices
### 1. Environment-Specific Optimization
- **Development**: Prioritize developer experience and debugging
- **Production**: Prioritize security, performance, and reliability
- **Example**: Show all available options with documentation
### 2. Feature Independence
- Keep feature configurations independent of each other
- Use feature flags to enable/disable functionality
- Provide sensible defaults for all settings
### 3. Security
- Never commit sensitive values to version control
- Use environment variables for secrets
- Implement proper validation for security-critical settings
### 4. Documentation
- Document all configuration options
- Provide examples for complex settings
- Include units and ranges for numeric values
## Backup and Recovery
### Automatic Backups
The build scripts automatically create backups of existing configurations before generating new ones:
```
config/backups/config_prod_20231201_143022.toml
```
### Manual Backups
```bash
# Create backup
./config/scripts/manage-config.sh backup prod
# Restore from backup
./config/scripts/manage-config.sh restore config/backups/config_prod_20231201_143022.toml
```
## Troubleshooting
### Common Issues
1. **Invalid TOML Syntax**
- Check for missing quotes, brackets, or commas
- Validate individual files before building
2. **Missing Environment Variables**
- Ensure all required environment variables are set
- Check variable names for typos
3. **Feature Conflicts**
- Review feature configurations for conflicting settings
- Use the diff command to compare configurations
### Debug Mode
Enable debug output for detailed information:
```bash
CONFIG_DEBUG=1 ./config/scripts/build-config.sh dev
```
Or with the management script:
```bash
./config/scripts/manage-config.sh --debug build dev
```
## Advanced Usage
### Custom Configuration Directories
```bash
CONFIG_DIR=/path/to/custom/config ./config/scripts/build-config.sh dev
```
### Validation Only
```bash
# Validate without building
./config/scripts/manage-config.sh validate dev
# Shell script validation
CONFIG_VALIDATE_ONLY=1 ./config/scripts/build-config.sh prod
```
### Dry Run Mode
```bash
# See what would be done without executing
./config/scripts/manage-config.sh --dry-run build prod
```
## Integration with Rustelo
The generated configuration files are designed to work seamlessly with Rustelo's configuration system:
1. **Feature Flags**: Control which features are compiled and enabled
2. **Environment Detection**: Automatic environment detection and configuration loading
3. **Hot Reloading**: Support for configuration hot reloading in development
4. **Validation**: Built-in configuration validation at runtime
## Contributing
When adding new features or modifying existing ones:
1. Update all three environment files (`dev.toml`, `prod.toml`, `example.toml`)
2. Add appropriate validation rules
3. Update documentation
4. Test configuration building and validation
5. Add examples to the example configuration
## License
This configuration system is part of the Rustelo project and follows the same license terms.