Skip to main content

Configuration

Environment Variables

Backend CLM menggunakan environment variables untuk konfigurasi.

Server Configuration

VariableDefaultDescription
PORT8081Server port
ALLOWED_ORIGINShttp://localhost:3000CORS allowed origins
SWAGGER_HOSTlocalhost:8081Swagger UI host

Keycloak Configuration

VariableDefaultDescription
KEYCLOAK_BASE_URLhttp://localhost:8080Keycloak server URL
KEYCLOAK_REALMlog-monitoringKeycloak realm
KEYCLOAK_CLIENT_IDbackend-apiKeycloak client ID
KEYCLOAK_CLIENT_SECRET-Keycloak client secret
KEYCLOAK_ADMIN_USERadminKeycloak admin username
KEYCLOAK_ADMIN_PASSWORD-Keycloak admin password

OpenSearch Configuration

VariableDefaultDescription
OPENSEARCH_BASE_URLhttps://localhost:9200OpenSearch URL
OPENSEARCH_USERNAMEadminOpenSearch username
OPENSEARCH_PASSWORD-OpenSearch password
OPENSEARCH_INDEXESclm-v2-logs-*,wazuh-alerts-*Default indexes
OPENSEARCH_SKIP_TLS_VERIFYtrueSkip TLS verification

Database Configuration

VariableDefaultDescription
DB_HOSTlocalhostPostgreSQL host
DB_PORT5432PostgreSQL port
DB_USERclmPostgreSQL username
DB_PASSWORD-PostgreSQL password
DB_NAMEclm_dbPostgreSQL database

Telegram Configuration

VariableDefaultDescription
TELEGRAM_BOT_USERNAME-Telegram bot username
N8N_BROADCAST_WEBHOOK_URL-n8n webhook URL
N8N_API_KEY-n8n API key

Monitoring Configuration

VariableDefaultDescription
PROMETHEUS_URLhttp://localhost:9090Prometheus URL

Application Configuration

VariableDefaultDescription
DEFAULT_TENANTbjb-syariahDefault tenant slug
DEFAULT_APPLICATIONclm-backendDefault application slug
DATACENTERS_FILE/app/configs/datacenters.jsonDatacenters config file

Config Struct

type Config struct {
Port string
KeycloakBaseURL string
Realm string
ClientID string
ClientSecret string
KeycloakAdminUser string
KeycloakAdminPassword string
AllowedOrigins []string
OpenSearchBaseURL string
OpenSearchUsername string
OpenSearchPassword string
OpenSearchIndexes []string
OpenSearchSkipTLSVerify bool
DBHost string
DBPort string
DBUser string
DBPassword string
DBName string
TelegramBotUsername string
N8NBroadcastWebhookURL string
N8NAPIKey string
PrometheusURL string
DefaultTenant string
DefaultApplication string
SwaggerHost string
DatacentersFile string
}

Loading Configuration

func Load() Config {
godotenv.Load()

cfg := Config{
Port: getEnv("PORT", "8081"),
KeycloakBaseURL: getEnv("KEYCLOAK_BASE_URL", "http://localhost:8080"),
Realm: getEnv("KEYCLOAK_REALM", "log-monitoring"),
ClientID: getEnv("KEYCLOAK_CLIENT_ID", "backend-api"),
ClientSecret: os.Getenv("KEYCLOAK_CLIENT_SECRET"),
AllowedOrigins: strings.Split(getEnv("ALLOWED_ORIGINS", "http://localhost:3000"), ","),
OpenSearchBaseURL: getEnv("OPENSEARCH_BASE_URL", "https://localhost:9200"),
OpenSearchUsername: getEnv("OPENSEARCH_USERNAME", "admin"),
OpenSearchPassword: os.Getenv("OPENSEARCH_PASSWORD"),
OpenSearchIndexes: strings.Split(getEnv("OPENSEARCH_INDEXES", "clm-v2-logs-*"), ","),
OpenSearchSkipTLSVerify: getEnv("OPENSEARCH_SKIP_TLS_VERIFY", "true") == "true",
DBHost: getEnv("DB_HOST", "localhost"),
DBPort: getEnv("DB_PORT", "5432"),
DBUser: getEnv("DB_USER", "clm"),
DBPassword: os.Getenv("DB_PASSWORD"),
DBName: getEnv("DB_NAME", "clm_db"),
TelegramBotUsername: os.Getenv("TELEGRAM_BOT_USERNAME"),
N8NBroadcastWebhookURL: os.Getenv("N8N_BROADCAST_WEBHOOK_URL"),
N8NAPIKey: os.Getenv("N8N_API_KEY"),
PrometheusURL: getEnv("PROMETHEUS_URL", "http://localhost:9090"),
DefaultTenant: getEnv("DEFAULT_TENANT", "bjb-syariah"),
DefaultApplication: getEnv("DEFAULT_APPLICATION", "clm-backend"),
SwaggerHost: getEnv("SWAGGER_HOST", "localhost:8081"),
DatacentersFile: getEnv("DATACENTERS_FILE", "/app/configs/datacenters.json"),
}

return cfg
}

func getEnv(key, fallback string) string {
if v := os.Getenv(key); v != "" {
return v
}
return fallback
}

Datacenters Configuration

datacenters.json

{
"datacenters": [
{
"name": "DC-Bandung",
"type": "primary",
"location": "Bandung, Jawa Barat",
"host_count": 30,
"services": ["core-banking", "middleware", "channel"]
},
{
"name": "DC-Jakarta",
"type": "secondary",
"location": "Jakarta",
"host_count": 30,
"services": ["internet-banking", "mobile-banking"]
},
{
"name": "DRC-Surabaya",
"type": "drc",
"location": "Surabaya, Jawa Timur",
"host_count": 20,
"services": ["disaster-recovery"]
}
]
}

Docker Compose Configuration

Environment File

# .env
CONFIGS_DIR=./configs

# Backend
PORT=8081
KEYCLOAK_BASE_URL=http://10.8.0.48:8080
KEYCLOAK_REALM=log-monitoring
KEYCLOAK_CLIENT_ID=backend-api
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:8085

# OpenSearch
OPENSEARCH_BASE_URL=https://10.8.0.48:9200
OPENSEARCH_USERNAME=admin
OPENSEARCH_PASSWORD=MyStrong@OpenSearch2026!
OPENSEARCH_INDEXES=clm-v2-logs-*,wazuh-alerts-*

# Database
DB_HOST=10.8.0.48
DB_PORT=5444
DB_USER=clm
DB_PASSWORD=ClmBjbs2024!
DB_NAME=clm_db

# Telegram
TELEGRAM_BOT_USERNAME=bjbs_poc_clm_alert_bot
N8N_BROADCAST_WEBHOOK_URL=https://n8n.example.com/webhook/broadcast

Production Considerations

Security

  1. Secrets Management - Use Vault or AWS Secrets Manager
  2. TLS - Enable TLS for all connections
  3. Network Policies - Restrict network access
  4. Audit Logging - Enable comprehensive audit logging

Performance

  1. Connection Pooling - Configure PostgreSQL connection pool
  2. Caching - Implement Redis caching
  3. Rate Limiting - Configure appropriate rate limits
  4. Monitoring - Set up comprehensive monitoring

High Availability

  1. Database - PostgreSQL replication
  2. OpenSearch - Multi-node cluster
  3. Load Balancing - Multiple backend instances
  4. Failover - Automatic failover configuration

Next Steps