Rustelo/docs/config-wizard.md

382 lines
9.1 KiB
Markdown
Raw Normal View History

# Configuration Wizard Documentation
The Rustelo Configuration Wizard is an interactive tool that helps you set up your application by generating a customized `config.toml` file and updating the `Cargo.toml` features based on your specific needs.
## Overview
The wizard provides two implementations:
1. **Simple Wizard** (`simple_config_wizard.rs`) - Pure Rust implementation
2. **Advanced Wizard** (`config_wizard.rs`) - Uses Rhai scripting engine for more flexibility
## Features
### Available Features
| Feature | Description | Dependencies |
|---------|-------------|--------------|
| `auth` | Authentication and authorization system | `crypto` |
| `tls` | TLS/SSL support for secure connections | - |
| `rbac` | Role-based access control | `auth` |
| `crypto` | Cryptographic utilities and encryption | - |
| `content-db` | Content management and database features | - |
| `email` | Email sending capabilities | - |
| `metrics` | Prometheus metrics collection | - |
| `examples` | Include example code and documentation | - |
| `production` | Production-ready configuration | All features |
### Configuration Sections
The wizard will configure the following sections based on your selections:
- **Server Configuration**: Host, port, environment, workers
- **Database Configuration**: Connection URL, pool settings, logging
- **Authentication**: JWT settings, session management, login attempts
- **OAuth Providers**: Google, GitHub, Microsoft integration
- **Email Settings**: SMTP configuration, from addresses
- **Security**: CSRF protection, rate limiting, BCrypt cost
- **SSL/TLS**: HTTPS enforcement, certificate paths
- **Monitoring**: Metrics collection, Prometheus integration
- **Caching**: Cache type, TTL settings
## Usage
### Quick Start
Run the wizard using the provided script:
```bash
./scripts/run_wizard.sh
```
### Manual Execution
#### Simple Wizard
```bash
cd server
cargo run --bin simple_config_wizard
```
#### Advanced Wizard (requires Rhai)
```bash
cd server
cargo run --bin config_wizard
```
### Example Session
```
=== Rustelo Configuration Wizard ===
This wizard will help you configure your Rustelo application.
--- Feature Selection ---
Select the features you want to enable:
Enable auth? (Authentication and authorization system) (y/n): y
Enable tls? (TLS/SSL support for secure connections) (y/n): y
Enable email? (Email sending capabilities) (y/n): y
Enable metrics? (Prometheus metrics collection) (y/n): n
--- Server Configuration ---
Server host [127.0.0.1]:
Server port [3030]: 8080
Environment (dev/prod/test) [dev]: prod
Number of workers [4]: 8
--- Database Configuration ---
Database URL [sqlite:rustelo.db]: postgresql://user:pass@localhost/rustelo
Max database connections [10]: 20
Enable database query logging (y/n): y
--- Authentication Configuration ---
JWT secret (leave empty for auto-generation):
Session timeout (minutes) [60]: 120
Max login attempts [5]: 3
Require email verification (y/n): y
Enable OAuth providers? (y/n): y
Enable Google OAuth? (y/n): y
Google OAuth Client ID: your-google-client-id
Google OAuth Client Secret: your-google-client-secret
Google OAuth Redirect URI [http://localhost:3030/auth/google/callback]: https://yourdomain.com/auth/google/callback
--- Email Configuration ---
SMTP host [localhost]: smtp.gmail.com
SMTP port [587]:
SMTP username: your-email@gmail.com
SMTP password: your-app-password
From email address [noreply@localhost]: noreply@yourdomain.com
From name [Rustelo App]: Your App Name
--- Security Configuration ---
Enable CSRF protection (y/n): y
Rate limit requests per minute [100]: 200
BCrypt cost (4-31) [12]:
--- SSL/TLS Configuration ---
Force HTTPS (y/n): y
SSL certificate path: /path/to/cert.pem
SSL private key path: /path/to/key.pem
Generate configuration files? (y/n): y
```
## Generated Files
### config.toml
The wizard generates a complete `config.toml` file with all the sections you configured:
```toml
# Rustelo Configuration File
# Generated by Configuration Wizard
root_path = "."
[features]
auth = true
tls = true
crypto = true
email = true
[server]
protocol = "http"
host = "127.0.0.1"
port = 8080
environment = "prod"
workers = 8
[database]
url = "postgresql://user:pass@localhost/rustelo"
max_connections = 20
enable_logging = true
[auth.jwt]
secret = "your-generated-secret"
expiration = 7200
[oauth]
enabled = true
[oauth.google]
client_id = "your-google-client-id"
client_secret = "your-google-client-secret"
redirect_uri = "https://yourdomain.com/auth/google/callback"
# ... more sections
```
### Cargo.toml Updates
The wizard automatically updates your `server/Cargo.toml` default features:
```toml
[features]
default = ["auth", "tls", "crypto", "email"]
```
## Advanced Usage
### Using Rhai Scripts
The advanced wizard uses Rhai scripting for more flexibility. You can modify the `scripts/config_wizard.rhai` file to:
- Add custom configuration sections
- Implement complex validation logic
- Create conditional configurations
- Add custom feature dependencies
### Custom Feature Dependencies
The wizard automatically resolves feature dependencies. For example:
- Selecting `rbac` automatically enables `auth`
- Selecting `production` enables all features
- Selecting `auth` automatically enables `crypto`
### Environment-Specific Configurations
You can run the wizard multiple times to generate different configurations:
```bash
# Generate development config
./scripts/run_wizard.sh
mv config.toml config.dev.toml
# Generate production config
./scripts/run_wizard.sh
mv config.toml config.prod.toml
```
## Security Considerations
### Sensitive Data
The wizard will prompt for sensitive information like:
- Database passwords
- OAuth client secrets
- JWT secrets
- SMTP passwords
- SSL certificate paths
**Important**: Never commit these secrets to version control. Use environment variables or secret management systems in production.
### Recommended Setup
1. Generate configuration with placeholder values
2. Replace sensitive values with environment variables:
```toml
[database]
url = "${DATABASE_URL}"
[oauth.google]
client_secret = "${GOOGLE_CLIENT_SECRET}"
```
3. Set environment variables:
```bash
export DATABASE_URL="postgresql://user:pass@localhost/rustelo"
export GOOGLE_CLIENT_SECRET="your-actual-secret"
```
## Troubleshooting
### Common Issues
#### "Cargo.toml not found"
- Ensure you're running the wizard from the project root directory
- Check that the `server/Cargo.toml` file exists
#### "Feature build errors"
- Some features may require additional system dependencies
- Run `cargo check` to verify feature compatibility
- Review the generated `Cargo.toml` for conflicts
#### "Configuration validation failed"
- Check that all required fields are properly filled
- Verify database connection strings
- Ensure OAuth redirect URIs match your domain
### Debug Mode
Run the wizard with debug output:
```bash
RUST_LOG=debug cargo run --bin simple_config_wizard
```
### Backup and Recovery
The wizard automatically creates backups:
- `config.toml.bak` - Backup of previous config
- `server/Cargo.toml.bak` - Backup of previous Cargo.toml
To restore from backup:
```bash
cp config.toml.bak config.toml
cp server/Cargo.toml.bak server/Cargo.toml
```
## Integration with CI/CD
### Automated Configuration
For CI/CD pipelines, you can run the wizard non-interactively:
```bash
# Use environment variables for configuration
export RUSTELO_FEATURES="auth,tls,metrics"
export RUSTELO_ENVIRONMENT="prod"
export RUSTELO_DATABASE_URL="postgresql://..."
# Run automated configuration
./scripts/run_wizard.sh --non-interactive
```
### Docker Integration
Include the wizard in your Docker build:
```dockerfile
FROM rust:1.75
COPY . /app
WORKDIR /app
# Run configuration wizard
RUN ./scripts/run_wizard.sh --non-interactive
# Build application
RUN cargo build --release
```
## Contributing
### Adding New Features
To add a new feature to the wizard:
1. Update the `FeatureInfo` struct in the wizard code
2. Add the feature to the `features` HashMap
3. Add configuration logic for the new feature
4. Update the TOML generation code
5. Add the feature to `server/Cargo.toml`
6. Update this documentation
### Extending Configuration Sections
To add new configuration sections:
1. Create a new struct for the configuration
2. Add the struct to `WizardConfig`
3. Implement the interactive prompts
4. Add TOML serialization logic
5. Update the documentation
## Examples
### Minimal Configuration
For a simple development setup:
```bash
# Select only: auth, examples
# Use defaults for most settings
# SQLite database
# No OAuth, no email
```
### Production Configuration
For a production deployment:
```bash
# Select: auth, tls, crypto, email, metrics
# PostgreSQL database
# OAuth providers enabled
# HTTPS enforced
# Email configured
# Monitoring enabled
```
### API-Only Configuration
For a headless API service:
```bash
# Select: auth, crypto, metrics
# No email, no OAuth
# Focus on security and monitoring
```
## References
- [Rhai Scripting Language](https://rhai.rs/)
- [TOML Configuration Format](https://toml.io/)
- [Cargo Features Documentation](https://doc.rust-lang.org/cargo/reference/features.html)
- [Rustelo Template Documentation](../README.md)