Lewati ke konten utama

Referensi Konfigurasi

Pendahuluan

Dokumen ini memberikan referensi lengkap untuk semua pengaturan konfigurasi yang digunakan oleh backend Ravenxcope. Konfigurasi dikelola melalui sistem konfigurasi standar ASP.NET Core menggunakan file appsettings.json, dengan penimpaan (overrides) variabel lingkungan untuk penyebaran kontainer.


File Konfigurasi

FileTujuanDiabaikan Git
appsettings.jsonTemplat konfigurasi produksiTidak
appsettings.Development.jsonPenimpaan lingkungan pengembanganYa

Pola Placeholder

appsettings.json produksi menggunakan placeholder kurung kurawal ganda untuk nilai yang harus disediakan saat runtime:

"Host": "{{PostgresqlSettings__Host}}"

Validasi konfigurasi saat startup mendeteksi placeholder ini dan menganggapnya sebagai nilai yang hilang, menyebabkan kegagalan startup jika tidak ditimpa oleh variabel lingkungan.


Bagian Konfigurasi

PostgresqlSettings

{
"PostgresqlSettings": {
"Host": "{{PostgresqlSettings__Host}}",
"Port": "{{PostgresqlSettings__Port}}",
"Username": "{{PostgresqlSettings__Username}}",
"Password": "{{PostgresqlSettings__Password}}",
"Database": "{{PostgresqlSettings__Database}}",
"MaxPoolSize": "100"
}
}
KunciTipeDefaultWajibValidasi
HoststringlocalhostYaTidak boleh kosong
Portstring5432YaInteger positif
UsernamestringhduserYaTidak boleh kosong
PasswordstringYaTidak boleh kosong
DatabasestringmeYaTidak boleh kosong
MaxPoolSizestring20Tidak

Format string koneksi:

Host={Host};Port={Port};Username={Username};Password={Password};Database={Database};Maximum Pool Size={MaxPoolSize}

RedisSettings

{
"RedisSettings": {
"Host": "{{RedisSettings__Host}}",
"Port": "{{RedisSettings__Port}}",
"Password": "{{RedisSettings__Password}}",
"DefaultDatabase": "{{RedisSettings__DefaultDatabase}}"
}
}
KunciTipeDefaultWajibValidasi
HoststringlocalhostYaTidak boleh kosong
Portstring6379YaInteger positif
PasswordstringnullTidak
DefaultDatabasestring0Tidak

Format string koneksi:

  • Dengan kata sandi: {Host}:{Port},password={Password},defaultDatabase={DefaultDatabase}
  • Tanpa kata sandi: {Host}:{Port},defaultDatabase={DefaultDatabase}

JwtSettings

{
"JwtSettings": {
"Secret": "{{JwtSettings__Secret}}",
"Issuer": "{{JwtSettings__Issuer}}",
"Audience": "{{JwtSettings__Audience}}",
"ExpiryMinutes": 1440
}
}
KunciTipeDefaultWajibCatatan
SecretstringYaRekomendasi min 32 kar
IssuerstringRavenxcope.BackendTidakKlaim issuer JWT
AudiencestringRavenxcopeUsersTidakKlaim audience JWT
ExpiryMinutesint1440TidakMasa berlaku token (24 jam)

Peringatan Keamanan: Jika Secret lebih pendek dari 32 karakter, peringatan startup akan dikeluarkan. JwtService akan melempar InvalidOperationException jika rahasia kosong atau kurang dari 32 karakter.


InfluxDb

{
"InfluxDb": {
"Url": "{{InfluxDb__Url}}",
"Token": "{{InfluxDb__Token}}",
"Org": "{{InfluxDb__Org}}",
"Bucket": "{{InfluxDb__Bucket}}",
"Precision": "ms",
"TimeoutSeconds": 30
}
}
KunciTipeDefaultWajib
UrlstringYa
TokenstringYa
OrgstringYa
BucketstringYa
PrecisionstringmsTidak
TimeoutSecondsint30Tidak

OpenSearch

{
"OpenSearch": {
"Url": "{{OpenSearch__Url}}",
"Username": "{{OpenSearch__Username}}",
"Password": "{{OpenSearch__Password}}",
"IndexName": "{{OpenSearch__IndexName}}"
}
}
KunciTipeDefaultWajib
Urlstringhttps://localhost:9200Ya
UsernamestringadminYa
PasswordstringYa
IndexNamestringmataelang-sensor-events-streamYa

Kunci Integrasi dan Runtime

{
"AnsibleSettings": { "ServiceUrl": "{{AnsibleSettings__ServiceUrl}}" },
"SensorApiSettings": { "ApiKey": "{{SensorApiSettings__ApiKey}}" },
"SensorSettings": {
"HeartbeatTimeoutMinutes": "{{SensorSettings__HeartbeatTimeoutMinutes}}",
"ProvisioningSudoPassword": "{{SensorSettings__ProvisioningSudoPassword}}"
},
"OpenSearchAnalytics": {
"DefaultTimeoutSeconds": "{{OpenSearchAnalytics__DefaultTimeoutSeconds}}",
"DashboardTimeoutSeconds": "{{OpenSearchAnalytics__DashboardTimeoutSeconds}}",
"AggregationTimeoutSeconds": "{{OpenSearchAnalytics__AggregationTimeoutSeconds}}",
"ListQueryTimeoutSeconds": "{{OpenSearchAnalytics__ListQueryTimeoutSeconds}}"
},
"AnalyticsCacheWarming": {
"Enabled": "{{AnalyticsCacheWarming__Enabled}}",
"IntervalMinutes": "{{AnalyticsCacheWarming__IntervalMinutes}}",
"InitialDelaySeconds": "{{AnalyticsCacheWarming__InitialDelaySeconds}}"
},
"DockerRegistry": {
"Registry": "{{DockerRegistry__Registry}}",
"Username": "{{DockerRegistry__Username}}",
"Password": "{{DockerRegistry__Password}}"
},
"DataCollector": {
"Endpoint": "{{DataCollector__Endpoint}}",
"Port": "{{DataCollector__Port}}"
},
"BackendUrl": "{{BackendUrl}}"
}
KunciTipeDefaultWajibValidasi
AnsibleSettings:ServiceUrlstringYaTidak boleh kosong
SensorApiSettings:ApiKeystringYaBukan placeholder
SensorSettings:HeartbeatTimeoutMinutesint1Tidak
SensorSettings:ProvisioningSudoPasswordstringYaTidak boleh kosong
OpenSearchAnalytics:DefaultTimeoutSecondsint20TidakInteger positif (disarankan)
OpenSearchAnalytics:DashboardTimeoutSecondsint30TidakInteger positif (disarankan)
OpenSearchAnalytics:AggregationTimeoutSecondsint15TidakInteger positif (disarankan)
OpenSearchAnalytics:ListQueryTimeoutSecondsint25TidakInteger positif (disarankan)
AnalyticsCacheWarming:EnabledbooltrueTidak
AnalyticsCacheWarming:IntervalMinutesint5TidakInteger positif (disarankan)
AnalyticsCacheWarming:InitialDelaySecondsint20TidakInteger non-negatif (disarankan)
DockerRegistry:RegistrystringTidak
DockerRegistry:UsernamestringTidak
DockerRegistry:PasswordstringTidak
DataCollector:EndpointstringYaTidak boleh kosong
DataCollector:PortstringYaInteger positif
BackendUrlstringYaTidak boleh kosong

Kontrol Migrasi Database

{
"Database": {
"AutoMigrate": true,
"MigrationMaxRetries": 10,
"MigrationRetryDelaySeconds": 5
}
}
KunciTipeDefaultDeskripsi
AutoMigratebooltrueJalankan migrasi EF Core saat startup
MigrationMaxRetriesint10Jumlah maksimal percobaan ulang migrasi
MigrationRetryDelaySecondsint5Penundaan antar percobaan (detik)

Logging (Serilog)

{
"Serilog": {
"Using": ["Serilog.Sinks.Console"],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.AspNetCore": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Enrich": ["FromLogContext", "WithMachineName"],
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext} {Message:lj}{NewLine}{Exception}"
}
}
]
}
}

Pemetaan Variabel Lingkungan

Untuk penyebaran kontainer, gunakan konvensi garis bawah ganda ASP.NET Core untuk menimpa nilai appsettings:

Kunci appsettingsVariabel Lingkungan
JwtSettings:SecretJwtSettings__Secret
PostgresqlSettings:HostPostgresqlSettings__Host
PostgresqlSettings:PortPostgresqlSettings__Port
RedisSettings:HostRedisSettings__Host
OpenSearch:UrlOpenSearch__Url
InfluxDb:UrlInfluxDb__Url
BackendUrlBackendUrl
DataCollector:EndpointDataCollector__Endpoint

Ringkasan Kelas Typed Options

Semua kelas opsi didefinisikan dalam Extensions/BackendConfiguration.cs:

KelasBagian KonfigurasiCatatan
PostgresqlSettingsOptionsPostgresqlSettingsTermasuk MaxPoolSize
RedisSettingsOptionsRedisSettingsKata sandi bisa null
JwtSettingsOptionsJwtSettingsTermasuk ExpiryMinutes
InfluxDbOptionsInfluxDbSemua field wajib
OpenSearchOptionsOpenSearchMemiliki default yang masuk akal
AnsibleSettingsOptionsAnsibleSettingsHanya ServiceUrl
SensorApiSettingsOptionsSensorApiSettingsHanya ApiKey
DataCollectorOptionsDataCollectorEndpoint dan Port
DockerRegistryOptionsDockerRegistryRegistry, Username, Password
SensorSettingsOptionsSensorSettingsHeartbeatTimeoutMinutes, ProvisioningSudoPassword
OpenSearchAnalyticsOptionsOpenSearchAnalyticsKontrol timeout jenis kueri
AnalyticsCacheWarmingOptionsAnalyticsCacheWarmingKontrol jadwal pemanasan cache
DatabaseOptionsDatabaseKontrol migrasi
BackendAppOptions(komposit)Url dari kunci BackendUrl
SensorRuntimeOptions(komposit)Menggabungkan beberapa bagian

Validasi Preflight

Gunakan defense_center/scripts/preflight-env.sh untuk mendeteksi nilai konfigurasi yang hilang atau lemah sebelum startup Docker Compose:

sh defense_center/scripts/preflight-env.sh defense_center/.env

Skrip ini memeriksa:

  • Variabel lingkungan wajib yang hilang
  • Nilai placeholder yang belum diganti
  • Rahasia JWT yang lemah