Configuration
Environment Variables
Backend CLM menggunakan environment variables untuk konfigurasi.
Server Configuration
| Variable | Default | Description |
|---|---|---|
PORT | 8081 | Server port |
ALLOWED_ORIGINS | http://localhost:3000 | CORS allowed origins |
SWAGGER_HOST | localhost:8081 | Swagger UI host |
Keycloak Configuration
| Variable | Default | Description |
|---|---|---|
KEYCLOAK_BASE_URL | http://localhost:8080 | Keycloak server URL |
KEYCLOAK_REALM | log-monitoring | Keycloak realm |
KEYCLOAK_CLIENT_ID | backend-api | Keycloak client ID |
KEYCLOAK_CLIENT_SECRET | - | Keycloak client secret |
KEYCLOAK_ADMIN_USER | admin | Keycloak admin username |
KEYCLOAK_ADMIN_PASSWORD | - | Keycloak admin password |
OpenSearch Configuration
| Variable | Default | Description |
|---|---|---|
OPENSEARCH_BASE_URL | https://localhost:9200 | OpenSearch URL |
OPENSEARCH_USERNAME | admin | OpenSearch username |
OPENSEARCH_PASSWORD | - | OpenSearch password |
OPENSEARCH_INDEXES | clm-v2-logs-*,wazuh-alerts-* | Default indexes |
OPENSEARCH_SKIP_TLS_VERIFY | true | Skip TLS verification |
Database Configuration
| Variable | Default | Description |
|---|---|---|
DB_HOST | localhost | PostgreSQL host |
DB_PORT | 5432 | PostgreSQL port |
DB_USER | clm | PostgreSQL username |
DB_PASSWORD | - | PostgreSQL password |
DB_NAME | clm_db | PostgreSQL database |
Telegram Configuration
| Variable | Default | Description |
|---|---|---|
TELEGRAM_BOT_USERNAME | - | Telegram bot username |
N8N_BROADCAST_WEBHOOK_URL | - | n8n webhook URL |
N8N_API_KEY | - | n8n API key |
Monitoring Configuration
| Variable | Default | Description |
|---|---|---|
PROMETHEUS_URL | http://localhost:9090 | Prometheus URL |
Application Configuration
| Variable | Default | Description |
|---|---|---|
DEFAULT_TENANT | bjb-syariah | Default tenant slug |
DEFAULT_APPLICATION | clm-backend | Default application slug |
DATACENTERS_FILE | /app/configs/datacenters.json | Datacenters 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
- Secrets Management - Use Vault or AWS Secrets Manager
- TLS - Enable TLS for all connections
- Network Policies - Restrict network access
- Audit Logging - Enable comprehensive audit logging
Performance
- Connection Pooling - Configure PostgreSQL connection pool
- Caching - Implement Redis caching
- Rate Limiting - Configure appropriate rate limits
- Monitoring - Set up comprehensive monitoring
High Availability
- Database - PostgreSQL replication
- OpenSearch - Multi-node cluster
- Load Balancing - Multiple backend instances
- Failover - Automatic failover configuration
Next Steps
- API Endpoints - Full API documentation
- Authentication - JWT authentication
- RBAC - Role-Based Access Control