Configuration

Horus

Horus is the administration service of Anjana Data Platform. It is a Spring Boot application that integrates three Spring Cloud components into a single service:

  • Spring Cloud Config Server: serves the centralized configuration for all Anjana microservices.

  • Eureka Server: acts as a service registry (service discovery) so microservices can locate each other.

  • Spring Boot Admin: provides monitoring and administration of the registered microservices.

Horus is, therefore, the central piece that the rest of Anjana's services depend on to start up correctly: without Horus available, a microservice cannot obtain its configuration or register to be discovered by the others.

For details on how to configure each configuration repository (Filesystem, Git, HashiCorp Vault, database, or AWS Secret Manager) see Advanced configuration of services and components. For detailed Vaults and Secret Manager configuration, see Vaults.

Internal architecture

Spring Cloud Config Server

This is the component that centralizes the configuration of all Anjana microservices. Each microservice (Kerno, Minerva, Hermes, Viator, Portuno, Tot, Drittesta, Zeus) obtains its configuration at startup by making a request to Horus, instead of reading it from a local file.

Horus supports several types of repository as the source of that configuration, and can combine several at once via the spring.cloud.config.server.<repository>.order property (lower value = higher priority):

  • Filesystem: Horus's native profile, reads from a local folder on the server where Horus is deployed.

  • Git: remote Git repository, configurable by branch.

  • HashiCorp Vault: external secrets repository, see Vaults.

  • Database: app_configuration table in the Portuno schema.

  • AWS Secret Manager: Horus loads its own configuration from Secrets Manager, see Advanced configuration of services and components.

⚠️ Important: Horus is the only service that cannot use another Horus to obtain its own configuration (it cannot configure itself via spring.config.import=configserver:...). To configure Horus you must choose directly one of the repositories above (Filesystem, Git, Vault, database, or AWS Secret Manager).

Every microservice that consumes configuration from Horus needs the following argument in its service descriptor:

Bash
--spring.config.import=optional:configserver:http://<Horus host>:9999/config

Eureka Server

Horus also acts as a service discovery server (Eureka). The Anjana microservices that register with Horus are: Kerno, Minerva, Hermes, Viator, Portuno, Tot, Drittesta and Zeus.

Each of them must point to Horus's Eureka URL via the property:

YAML
eureka:
  client:
    serviceUrl:
      defaultZone: http://<Horus host>:9999/eureka

Registration in Eureka is what enables load balancing between instances of the same microservice and lets services locate each other without needing to hardcode IPs or hostnames.

Spring Boot Admin

Spring Boot Admin provides a monitoring and administration dashboard for the microservices registered with Horus: health status, JVM metrics, live log levels, and other information exposed by Spring Boot Actuator on each microservice.

The dashboard is available on the same port 9999 as Horus, under the path /admin.

Horus high availability

It is possible to deploy several Horus instances to provide high availability for the configuration and discovery service. This is controlled via the HORUS_REPLICAS environment variable, with a comma-separated list of hosts, which translates to:

YAML
eureka:
  client:
    serviceUrl:
      defaultZone: http://<Horus host1>:9999/eureka,http://<Horus host2>:9999/eureka

Equivalently, each microservice can point to several Horus instances for configuration by adding several comma-separated URLs at startup:

Bash
--spring.config.import=optional:configserver:http://<Horus host1>:9999/config,optional:configserver:http://<Horus host2>:9999/config

📝Note: in the current version there is no auto-purging of down configuration servers: if one of the configured Horus instances becomes unavailable, it is not automatically removed from the list.

Ports and endpoints

Component

Port

Path

Spring Cloud Config Server

9999

/config

Eureka Server

9999

/eureka

Spring Boot Admin

9999

/admin