382 lines
9.1 KiB
Markdown
382 lines
9.1 KiB
Markdown
|
|
# 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)
|