- 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>
10 KiB
Configuration Files
Rustelo uses a modular configuration system that separates concerns by features and environments. This system allows for flexible configuration management across different deployment scenarios while maintaining clear separation between base settings and feature-specific configurations.
Overview
The configuration system consists of:
- Base Configurations: Core settings that apply to all features
- Feature Configurations: Settings specific to individual features
- Environment-Specific Settings: Optimized configurations for different environments
- Configuration Management Scripts: Tools for building, validating, and managing configurations
Configuration Structure
config/
├── base/ # Base configurations
│ ├── dev.toml # Development base settings
│ ├── prod.toml # Production base settings
│ └── example.toml # Example/template base settings
├── features/ # Feature-specific configurations
│ ├── auth/ # Authentication feature
│ ├── email/ # Email feature
│ ├── tls/ # TLS/SSL feature
│ ├── content/ # Content management feature
│ └── metrics/ # Metrics and monitoring feature
├── scripts/ # Configuration management scripts
├── examples/ # Example configurations
└── README.md # Configuration documentation
Base Configuration Files
Base configurations contain core settings that apply to all features:
base/dev.toml - Development Environment
# Server Configuration
[server]
protocol = "http"
host = "127.0.0.1"
port = 3030
environment = "development"
log_level = "debug"
# Database Configuration
[database]
url = "sqlite//:dev_database.db"
max_connections = 5
enable_logging = true
# Session Management
[session]
secret = "dev-session-secret"
cookie_secure = false
max_age = 7200
# Security Settings (relaxed for development)
[security]
enable_csrf = false
rate_limit_requests = 1000
bcrypt_cost = 10
base/prod.toml - Production Environment
# Server Configuration
[server]
protocol = "https"
host = "0.0.0.0"
port = 443
environment = "production"
log_level = "info"
# Database Configuration
[database]
url = "${DATABASE_URL}"
max_connections = 20
ssl_mode = "require"
# Session Management
[session]
secret = "${SESSION_SECRET}"
cookie_secure = true
max_age = 1800
# Security Settings (strict for production)
[security]
enable_csrf = true
rate_limit_requests = 100
bcrypt_cost = 12
Feature Configuration Files
Feature configurations contain settings specific to individual features:
Authentication Feature (features/auth/)
features/auth/dev.toml
[features]
auth = true
[auth.jwt]
secret = "dev-jwt-secret"
expiration = 86400
algorithm = "HS256"
[auth.password]
min_length = 6
require_uppercase = false
require_numbers = true
[auth.security]
max_login_attempts = 10
lockout_duration = 300
features/auth/prod.toml
[features]
auth = true
[auth.jwt]
secret = "${JWT_SECRET}"
expiration = 1800
algorithm = "HS256"
[auth.password]
min_length = 12
require_uppercase = true
require_numbers = true
require_special_chars = true
[auth.security]
max_login_attempts = 5
lockout_duration = 900
Email Feature (features/email/)
features/email/dev.toml
[features]
email = true
[email]
provider = "console"
from_email = "dev@localhost"
templates_dir = "templates/email"
[email.smtp]
host = "localhost"
port = 1025
use_tls = false
features/email/prod.toml
[features]
email = true
[email]
provider = "smtp"
from_email = "${FROM_EMAIL}"
templates_dir = "templates/email"
[email.smtp]
host = "${SMTP_HOST}"
port = 587
username = "${SMTP_USERNAME}"
password = "${SMTP_PASSWORD}"
use_tls = true
Environment Variables
Configuration files support environment variable substitution using ${VARIABLE_NAME} syntax:
Required Environment Variables
Development
DATABASE_URL(optional, defaults to SQLite)SESSION_SECRET(optional, uses dev default)
Production
DATABASE_URL(required)SESSION_SECRET(required)JWT_SECRET(required)SMTP_HOST(required if email enabled)SMTP_USERNAME(required if email enabled)SMTP_PASSWORD(required if email enabled)FROM_EMAIL(required if email enabled)FRONTEND_URL(required for CORS)DOMAIN(required for cookies)
Environment Variable Examples
# Development
export DATABASE_URL="postgresql://user:password@localhost/rustelo_dev"
export SESSION_SECRET="your-session-secret-here"
# Production
export DATABASE_URL="postgresql://user:password@prod-db/rustelo"
export SESSION_SECRET="your-production-session-secret"
export JWT_SECRET="your-jwt-secret"
export SMTP_HOST="smtp.gmail.com"
export SMTP_USERNAME="your-app@gmail.com"
export SMTP_PASSWORD="your-app-password"
export FROM_EMAIL="noreply@yourapp.com"
export FRONTEND_URL="https://yourapp.com"
export DOMAIN="yourapp.com"
Configuration Building
Using Build Scripts
The configuration system includes scripts for building complete configuration files:
Shell Script
# Build development configuration
./config/scripts/build-config.sh dev
# Build production configuration
./config/scripts/build-config.sh prod config.prod.toml
# Build with validation only
CONFIG_VALIDATE_ONLY=1 ./config/scripts/build-config.sh dev
Python Script
# Build development configuration
./config/scripts/build-config.sh dev
# Build production configuration
./config/scripts/build-config.sh prod config.prod.toml
# Validate only
CONFIG_VALIDATE_ONLY=1 ./config/scripts/build-config.sh dev
Management Script
The management script provides comprehensive configuration operations:
# 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
# List features and environments
./config/scripts/manage-config.sh list-features
./config/scripts/manage-config.sh list-environments
# Compare configurations
./config/scripts/manage-config.sh diff dev prod
# Create backups
./config/scripts/manage-config.sh backup prod
Configuration Validation
The system includes built-in validation for:
Syntax Validation
- TOML Syntax: Ensures valid TOML structure
- Type Checking: Validates that values are of expected types
- Required Fields: Checks for presence of essential configuration sections
Semantic Validation
- Port Ranges: Validates that ports are within valid ranges (1-65535)
- Protocol Values: Ensures protocols are valid (http, https)
- Connection Limits: Validates database connection pool settings
- Feature Dependencies: Checks that required features are enabled
Security Validation
- Secret Length: Validates that secrets meet minimum length requirements
- Password Policies: Ensures password policies are configured securely
- TLS Settings: Validates SSL/TLS configuration for production
Configuration Examples
Complete Development Configuration
# Base settings
[server]
protocol = "http"
host = "127.0.0.1"
port = 3030
environment = "development"
[database]
url = "sqlite//:dev_database.db"
max_connections = 5
# Feature: Authentication
[features]
auth = true
[auth.jwt]
secret = "dev-jwt-secret"
expiration = 86400
# Feature: Email
[features]
email = true
[email]
provider = "console"
from_email = "dev@localhost"
# Build Information
[build_info]
environment = "dev"
build_time = "2024-01-01T12:00:00Z"
features = ["auth", "email"]
Complete Production Configuration
# Base settings
[server]
protocol = "https"
host = "0.0.0.0"
port = 443
environment = "production"
[database]
url = "${DATABASE_URL}"
max_connections = 20
ssl_mode = "require"
# Feature: Authentication
[features]
auth = true
[auth.jwt]
secret = "${JWT_SECRET}"
expiration = 1800
[auth.password]
min_length = 12
require_uppercase = true
require_numbers = true
require_special_chars = true
# Feature: Email
[features]
email = true
[email]
provider = "smtp"
from_email = "${FROM_EMAIL}"
[email.smtp]
host = "${SMTP_HOST}"
port = 587
username = "${SMTP_USERNAME}"
password = "${SMTP_PASSWORD}"
use_tls = true
# Build Information
[build_info]
environment = "prod"
build_time = "2024-01-01T12:00:00Z"
features = ["auth", "email"]
Best Practices
1. Environment-Specific Optimization
- Development: Prioritize developer experience and debugging
- Production: Prioritize security, performance, and reliability
- Staging: Mirror production settings with relaxed security for testing
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 all secrets
- Implement proper validation for security-critical settings
- Use strong defaults for production environments
4. Documentation
- Document all configuration options in example files
- Provide clear descriptions for complex settings
- Include units and ranges for numeric values
- Maintain migration guides for configuration changes
Troubleshooting
Common Issues
-
Invalid TOML Syntax
# Validate syntax ./config/scripts/manage-config.sh validate dev -
Missing Environment Variables
# Check required variables env | grep -E "(DATABASE_URL|SESSION_SECRET|JWT_SECRET)" -
Feature Conflicts
# Compare configurations ./config/scripts/manage-config.sh diff dev prod
Debug Mode
Enable debug output for detailed information:
CONFIG_DEBUG=1 ./config/scripts/build-config.sh dev
Validation Only
Validate configurations without building:
./config/scripts/manage-config.sh validate dev
CONFIG_VALIDATE_ONLY=1 ./config/scripts/build-config.sh prod
Migration Guide
When upgrading configurations:
- Backup existing configurations
- Update base configurations for new settings
- Update feature configurations as needed
- Test in development before deploying to production
- Validate configurations using the build scripts
- Update environment variables if required
For detailed migration instructions, see the Configuration Migration Guide.