Skip to content

Understanding Configuration in Vidos

Vidos uses a layered configuration system that provides consistent settings across your deployment while enabling customization at multiple levels. This approach helps you manage configurations across services efficiently while maintaining flexibility and control.

A layered configuration system enables you to:

  • Ensure all services start with secure, working settings
  • Share common configurations across multiple services
  • Customize specific instances without affecting others
  • Maintain configurations efficiently at scale

Vidos builds configurations using three distinct layers:

  1. Core Configuration

    • Provided by Vidos
    • Contains all required settings
    • Cannot be modified
    • Ensures service stability
  2. Custom Configuration

    • Reusable configuration sets
    • Applied to multiple service instances
    • Specifies only changed values
    • Overrides core settings
  3. Inline Configuration

    • Instance-specific settings
    • Affects only one service instance
    • Specifies only changed values
    • Overrides previous layers

Here’s how these layers combine using a CORS (Cross-Origin Resource Sharing) configuration example:

  1. Core Configuration

    {
    "cors": {
    "allowHeaders": [],
    "allowMethods": ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
    "credentials": false,
    "enabled": false,
    "exposeHeaders": [],
    "maxAge": 86400,
    "origin": ["*"]
    }
    }
  2. Custom Configuration

    {
    "cors": {
    "enabled": true,
    "origin": ["https://app.example.com", "https://api.example.com"],
    "credentials": true
    }
    }

    After applying custom configuration:

    {
    "cors": {
    "allowHeaders": [], # From core configuration
    "allowMethods": [ # From core configuration
    "GET",
    "POST",
    "PUT",
    "PATCH",
    "DELETE",
    "OPTIONS"
    ],
    "credentials": true, # From custom configuration
    "enabled": true, # From custom configuration
    "exposeHeaders": [], # From core configuration
    "maxAge": 86400, # From core configuration
    "origin": [ # From custom configuration
    "https://app.example.com",
    "https://api.example.com"
    ]
    }
    }
  3. Inline Configuration

    {
    "cors": {
    "allowHeaders": ["Content-Type", "Authorization"],
    "origin": ["https://test.example.com"]
    }
    }

    Final configuration:

    {
    "cors": {
    "allowHeaders": [ # From inline configuration
    "Content-Type",
    "Authorization"
    ],
    "allowMethods": [ # From core configuration
    "GET",
    "POST",
    "PUT",
    "PATCH",
    "DELETE",
    "OPTIONS"
    ],
    "credentials": true, # From custom configuration
    "enabled": true, # From custom configuration
    "exposeHeaders": [], # From core configuration
    "maxAge": 86400, # From core configuration
    "origin": [ # From inline configuration
    "https://test.example.com"
    ]
    }
    }
  1. Layer Application Order

    • Core configuration establishes base settings
    • Custom configuration provides shared overrides
    • Inline configuration sets instance-specific values
  2. Configuration Scope

    • Custom configurations are reusable across instances
    • Inline configurations apply to single instances
    • Each layer can override previous layer values
  3. Partial Configurations

    • Override configurations specify only changed values
    • Unspecified values inherit from previous layers
    • All settings maintain a value through inheritance