---
title: "Konfiguration und Einstellungen"
description: "Wie Nibiru Konfigurationen aus umgebungsspezifischen INI-Dateien lädt."
---

Die Konfigurationsschicht von Nibiru ist absichtlich einfach: Beim Start wird eine einzelne `settings.<env>.ini`-Datei geparst, sie wird über einen Singleton zur Verfügung gestellt, und es können Module ihre eigenen INIs durch den [Registry](/core/registry/) hinzufügen.

## Umgebungsauswahl

Die Umgebungsvariable `APPLICATION_ENV` wählt die zu ladende Datei aus:

| `APPLICATION_ENV` | Datei geladen |
|---|---|
| `development` (Standard) | `application/settings/config/settings.development.ini` |
| `staging` | `application/settings/config/settings.staging.ini` |
| `production` | `application/settings/config/settings.production.ini` |
```bash
export APPLICATION_ENV=production
./nibiru -mi production
```
Wenn `APPLICATION_ENV` nicht gesetzt ist, verwendet Nibiru standardmäßig `development`.

## Abschnitte

Ein typisches `settings.<env>.ini`:
```ini
[ENGINE]
templates    = "/../../application/view/templates/"
templates_c  = "/../../application/view/templates_c/"
cache        = "/../../application/view/cache/"
config_dir   = "/../../application/view/configs/"
caching      = false
debug        = true
error.controller = "error"

[AUTOLOADER]
iface.pos[]  = "users"
iface.pos[]  = "cms"
class.pos[]  = "users"
class.pos[]  = "cms"

[SETTINGS]
page.url            = "https://my-app.local"
navigation          = "/../../application/settings/config/navigation/main.json"
modules.path        = "/../../application/module/"
entries.per.page    = 25
smarty.css[]        = "/public/css/app.css"
smarty.js[]         = "/public/js/app.js"
timezone            = "Europe/Vienna"

[DATABASE]
driver    = "pdo"
hostname  = "localhost"
port      = 3306
username  = "nibiru"
password  = "secret"
basename  = "nibiru_dev"
encoding  = "utf8mb4"
is.active = true

[SECURITY]
password_hash = "change-me-at-once"

[GENERATOR]
database          = true
database.overwrite = true

[EMAIL]
host       = "smtp.example.com"
port       = 587
encryption = "tls"
username   = "noreply@example.com"
password   = "smtp-secret"
from       = "Nibiru <noreply@example.com>"

[NIBIRU_ROUTING]
; optional regex routes — see /core/routing/

[NIBIRU_SECURITY]
password_hash = "another-salt-for-AES_DECRYPT"
```
## Konfiguration lesen
```php
$cfg = \Nibiru\Config::getInstance()->getConfig();
$cfg['DATABASE']['driver'];       // 'pdo'
$cfg['SETTINGS']['page.url'];     // 'https://my-app.local'
```
Verwenden Sie für tief geschachtelte Konfigurationen die typisierten Konstanten aus der View-Schnittstelle:
```php
$cfg[\Nibiru\View::NIBIRU_SETTINGS]['smarty.css'];   // ['/public/css/app.css']
```
## Modulkonfigurationen

Jeder Modul unter `application/module/<name>/settings/` kann seine eigenen INI-Dateien haben. Der Registrierungsservice erkennt sie automatisch und macht sie über verfügbar:
```php
$users = \Nibiru\Registry::getInstance()->loadModuleConfigByName('users');
$users->session_lifetime;        // from [USERS] section in users.ini
```
Der Registrierung wird `<module>.<env>.ini` vor `<module>.ini` bevorzugt, sodass Sie automatisch Überschreibungen pro Umgebung erhalten.

## Geheimnisse

INI-Dateien sind *einfache Textdateien*. Zwei sichere Optionen für die Produktion:

### A. Umgebungsüberlagerung

Behalten Sie `settings.production.ini` im Versionskontrollsystem mit Platzhaltern bei und fügen Sie reale Werte aus Umgebungsvariablen zur Laufzeit ein:
```ini
[DATABASE]
password = "${DB_PASSWORD}"
```
Erweitern Sie sie dann in Ihrem Container/CI:
```bash
envsubst < settings.production.ini.tpl > settings.production.ini
```
### B. Konfiguration außerhalb des Baums

Behalten Sie `settings.production.ini` außerhalb des Repositories und erstellen Sie einen Symlink beim Bereitstellen.
```bash
ln -s /etc/nibiru/settings.production.ini \
      application/settings/config/settings.production.ini
```
Das Framework interessiert sich nicht dafür, wo die Datei liegt, solange `parse_ini_file` sie lesen kann.

## Neuladen-Semantik

Die Konfiguration wird beim Booten **einmal** in die statische Variable `Settings` gelesen. Änderungen am INI-Format erfordern einen Anfragezyklus, um wirksam zu werden (oder für langlaufende Skripte einen expliziten Aufruf von `Settings::setConfig(\Nibiru\Config::getEnv())`).

## Häufige Fallen

- **Pfad mit `/../../`.** Die INI-Pfade des Frameworks sind *relativ zum Verzeichnis des Frameworks*. Sie müssen mit `/../../` beginnen, um in Ihr Projektverzeichnis zu wechseln. Ja, das sieht seltsam aus; ja, es funktioniert.
- **Boolesche Analyse.** `parse_ini_file` ist toleranter — `true`, `on`, `1` werden alle zu `1`; `false`, `off`, `0`, `""` werden zu `0`. Verwenden Sie doppelte Anführungszeichen, wenn Sie wirklich einen Literalen `"true"` benötigen.
- **Array-Werte.** Verwenden Sie die `[]`-Syntax (`smarty.css[] = …`) — Nibiru setzt darauf, dass diese Array sind.
