> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/server/de/knowledge-base/how-to-articles/devolutions-server-docker-deployment/advanced-docker-configuration-for-devolutions-server.md).

# Erweiterte Docker-Konfiguration für Devolutions Server

Dieser Artikel behandelt erweiterte Konfigurationsoptionen für die Docker-Bereitstellung von Devolutions Server, einschließlich einer vollständigen Referenz der Umgebungsvariablen, Zertifikatsverwaltung, Performance-Tuning und Sicherheitshärtung.

### Referenz der Umgebungsvariablen

#### Variablen für die Datenbankverbindung

| Variable                            | Erforderlich | Standard | Beschreibung                                                                                                                                                                                                                             |
| ----------------------------------- | ------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DATABASE_HOST`                     | Ja           | —        | SQL Server-Hostname. Für nicht standardmäßige Ports verwenden Sie das Format `host,port` (z. B. `sql.example.com,1433`).                                                                                                                 |
| `AZURE_SQL_HOST`                    | Ja\*         | —        | Alias für `DATABASE_HOST` (Azure-spezifische Benennung).                                                                                                                                                                                 |
| `DATABASE_NAME`                     | Ja           | —        | Name der Devolutions Server-Datenbank.                                                                                                                                                                                                   |
| `AZURE_SQL_DATABASE`                | Ja\*         | —        | Alias für `DATABASE_NAME`.                                                                                                                                                                                                               |
| `DATABASE_USERNAME`                 | Ja           | —        | Benutzername für die SQL-Authentifizierung (verwenden Sie ein Konto mit minimalen Rechten und db\_owner für die Devolutions Server-Datenbank).                                                                                           |
| `AZURE_SQL_USERNAME`                | Ja\*         | —        | Alias für `DATABASE_USERNAME`.                                                                                                                                                                                                           |
| `DATABASE_PASSWORD`                 | Ja           | —        | Passwort für die SQL-Authentifizierung (als Geheimnis behandeln, Docker-Secrets oder Azure Key Vault verwenden).                                                                                                                         |
| `AZURE_SQL_PASSWORD`                | Ja\*         | —        | Alias für `DATABASE_PASSWORD`.                                                                                                                                                                                                           |
| `DATABASE_PORT`                     | Nein         | `1433`   | SQL Server-Port (wird an den Host angehängt, sofern nicht bereits in `DATABASE_HOST` angegeben).                                                                                                                                         |
| `AZURE_SQL_PORT`                    | Nein         | `1433`   | Alias für `DATABASE_PORT`.                                                                                                                                                                                                               |
| `DATABASE_ENCRYPT`                  | Nein         | `false`  | Auf `true` setzen, um die Verbindung zum SQL Server zu verschlüsseln (TLS). Erforderlich, wenn der SQL Server Verschlüsselung erzwingt. Wird bei jedem Containerstart gelesen — geben Sie es bei jedem `docker run` an.                  |
| `DATABASE_TRUST_SERVER_CERTIFICATE` | Nein         | false    | Auf `true` setzen, um dem Zertifikat des SQL Servers ohne Validierung zu vertrauen. Verwenden Sie dies mit `DATABASE_ENCRYPT=true`, wenn der Server ein selbstsigniertes Zertifikat vorweist (z. B. SQL Server 2022 in einem Container). |

{% hint style="info" %}
Mit \* markierte Variablen sind Aliase. Verwenden Sie entweder die Standard- oder die Azure-spezifische Benennung, nicht beide.
{% endhint %}

#### Webserver-Konfiguration

| Variable              | Erforderlich | Standard                | Beschreibung                                                                                               |
| --------------------- | ------------ | ----------------------- | ---------------------------------------------------------------------------------------------------------- |
| `HOSTNAME`            | Nein         | `localhost`             | Server-Hostname (wird auf Azure durch `WEBSITE_HOSTNAME` überschrieben).                                   |
| `WEB_SCHEME`          | Nein         | `http`                  | Protokoll: `http` oder `https`. Auf `https` setzen, um TLS zu aktivieren.                                  |
| `WEB_PORT` / `PORT`   | Nein         | `5000`                  | Port, auf dem der Container lauscht.                                                                       |
| `EXTERNAL_WEB_SCHEME` | Nein         | Entspricht `WEB_SCHEME` | Externes Protokoll bei Betrieb hinter einem Reverse Proxy (z. B. `https`, wenn der Proxy TLS verarbeitet). |
| `EXTERNAL_WEB_PORT`   | Nein         | Entspricht `WEB_PORT`   | Externer Port bei Betrieb hinter einem Reverse Proxy (z. B. `443` für Standard-HTTPS).                     |

#### TLS-Zertifikatskonfiguration

| Variable               | Erforderlich | Standard | Beschreibung                                                                                             |
| ---------------------- | ------------ | -------- | -------------------------------------------------------------------------------------------------------- |
| `TLS_CERTIFICATE_FILE` | Nein\*       | —        | Pfad zur eingebundenen PEM-Zertifikatsdatei (z. B. `/opt/devolutions/dvls/certs/server.pem`)             |
| `TLS_PRIVATE_KEY_FILE` | Nein\*       | —        | Pfad zur eingebundenen PEM-Datei mit privatem Schlüssel (z. B. `/opt/devolutions/dvls/certs/server.key`) |
| `TLS_CERTIFICATE_B64`  | Nein\*       | —        | Base64-kodierter Zertifikatsinhalt (wird in `App_Data/server.pem` geschrieben)                           |
| `TLS_PRIVATE_KEY_B64`  | Nein\*       | —        | Base64-kodierter Inhalt des privaten Schlüssels (wird in `App_Data/server.key` geschrieben)              |

{% hint style="info" %}
Wenn `WEB_SCHEME=https` gesetzt ist und kein Zertifikat bereitgestellt wird, wird automatisch ein selbstsigniertes Zertifikat erzeugt (gültig \~5 Jahre, 2048-Bit-RSA). Verwenden Sie Datei-Mounts oder Base64-Variablen für Produktionszertifikate.
{% endhint %}

#### Konfiguration des Betriebsmodus

{% hint style="info" %}
`DVLS_INIT` und `DVLS_UPDATE_MODE` schließen sich gegenseitig aus. Beide auf `true` zu setzen führt zu einem Fehler.
{% endhint %}

| Variable           | Erforderlich | Standard           | Beschreibung                                                                                                                        |
| ------------------ | ------------ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| `DVLS_INIT`        | Nein         | `false`            | Auf `true` setzen, um den Initialisierungsmodus auszuführen (erstellt Schema und Administratorbenutzer und beendet sich dann).      |
| `DVLS_UPDATE_MODE` | Nein         | `false`            | Auf `true` setzen, um den Aktualisierungsmodus auszuführen (erstellt eine Sicherung, migriert die Datenbank und beendet sich dann). |
| `DVLS_BACKUP_PATH` | Nein         | `/tmp/dvls-backup` | Backup-Speicherort während Updates (Volume einbinden, um Backups zu erhalten).                                                      |

#### Variablen des Initialisierungsmodus

Diese Variablen werden nur während der Initialisierung verwendet (`DVLS_INIT=true`):

| Variable              | Erforderlich | Standard           | Beschreibung                                                                 |
| --------------------- | ------------ | ------------------ | ---------------------------------------------------------------------------- |
| `DVLS_ADMIN_USERNAME` | Nein         | `dvls-admin`       | Während der Initialisierung erstellter Benutzername des Administratorkontos. |
| `DVLS_ADMIN_PASSWORD` | Nein         | `dvls-admin`       | Passwort des Administratorkontos. MUSS in der Produktion geändert werden!    |
| `DVLS_ADMIN_EMAIL`    | Nein         | `admin@<HOSTNAME>` | E-Mail-Adresse des Administratorkontos                                       |

#### Systemkonfiguration

| Variable                     | Erforderlich | Standard                                   | Beschreibung                                                                                                                  |
| ---------------------------- | ------------ | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `DVLS_PATH`                  | Nein         | `/opt/devolutions/dvls`                    | Installations-Root-Pfad (Speicherort von appsettings und App\_Data).                                                          |
| `DVLS_EXECUTABLE_PATH`       | Nein         | `/opt/devolutions/dvls/Devolutions.Server` | Pfad zur ausführbaren Programmdatei von Devolutions Server im Runtime-Modus.                                                  |
| `DVLS_TELEMETRY`             | Nein         | `true`                                     | Telemetrieerfassung aktivieren/deaktivieren.                                                                                  |
| `DVLS_ENCRYPTION_CONFIG_B64` | Nein         | —                                          | Base64-codierte Verschlüsselungskonfiguration (erforderlich für konsistente Verschlüsselung über skalierte Instanzen hinweg). |

#### SSH-Zugriffskonfiguration

| Variable       | Erforderlich | Standard  | Beschreibung                                                                                             |
| -------------- | ------------ | --------- | -------------------------------------------------------------------------------------------------------- |
| `SSH_ENABLED`  | Nein         | `false`   | SSH-Daemon zum Debuggen aktivieren (auf Azure automatisch aktiviert, sofern nicht explizit deaktiviert), |
| `SSH_PORT`     | Nein         | `2222`    | SSH-Listen-Port (veröffentlichen mit `-p 2222:2222`),                                                    |
| `SSH_PASSWORD` | Ja\*         | `Docker!` | Root-Passwort für SSH (ERFORDERLICH, wenn `SSH_ENABLED=true`, MUSS in der Produktion geändert werden!    |

{% hint style="info" %}
Wenn `SSH_ENABLED=true` ohne `SSH_PASSWORD` gesetzt ist, verweigert der Container aus Sicherheitsgründen den Start.
{% endhint %}

#### Azure Web App-Variablen

Diese Variablen werden automatisch von Azure App Service gesetzt:

| Variable              | Gesetzt von | Beschreibung                                                                                              |
| --------------------- | ----------- | --------------------------------------------------------------------------------------------------------- |
| `WEBSITE_HOSTNAME`    | Azure       | Überschreibt `HOSTNAME` (z. B. `dvls-prod.azurewebsites.net`)                                             |
| `WEBSITE_INSTANCE_ID` | Azure       | Vorhandensein erzwingt `EXTERNAL_WEB_SCHEME=https` und `EXTERNAL_WEB_PORT=443`, aktiviert SSH automatisch |

### TLS-Zertifikatskonfiguration

#### Automatisch generiertes selbstsigniertes Zertifikat

Wenn `WEB_SCHEME=https` ohne Zertifikatsvariablen verwendet wird, generiert Devolutions Server ein selbstsigniertes Zertifikat (gültig \~5 Jahre, 2048-Bit-RSA, CN=hostname):

{% tabs %}
{% tab title="Windows" %}

```powershell
docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=localhost `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -p 5000:5000 `
  devolutions/devolutions-server:release-2025.3
```

{% endtab %}

{% tab title="macOS" %}

```bash
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -p 5000:5000 \
  devolutions/devolutions-server:release-2025.3
```

{% endtab %}

{% tab title="Linux" %}

```bash
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -p 5000:5000 \
  devolutions/devolutions-server:release-2025.3
```

{% endtab %}
{% endtabs %}

{% hint style="success" %}
Nur für Entwicklung und Tests. Browser zeigen Sicherheitswarnungen an.
{% endhint %}

#### Zertifikatsdateien über Volume-Einbindung

Zertifikatsdateien vom Host einbinden:

{% tabs %}
{% tab title="Windows" %}

```powershell
mkdir -p /host/certs
cp /path/to/server.pem /host/certs/
cp /path/to/server.key /host/certs/
chmod 600 /host/certs/server.key

docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=devolutions-server.company.com `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -e TLS_CERTIFICATE_FILE=/opt/devolutions/dvls/certs/server.pem `
  -e TLS_PRIVATE_KEY_FILE=/opt/devolutions/dvls/certs/server.key `
  -p 5000:5000 `
  -v /host/certs:/opt/devolutions/dvls/certs:ro `
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}

{% tab title="macOS" %}

```bash
mkdir -p /host/certs
cp /path/to/server.pem /host/certs/
cp /path/to/server.key /host/certs/
chmod 600 /host/certs/server.key

docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e TLS_CERTIFICATE_FILE=/opt/devolutions/dvls/certs/server.pem \
  -e TLS_PRIVATE_KEY_FILE=/opt/devolutions/dvls/certs/server.key \
  -p 5000:5000 \
  -v /host/certs:/opt/devolutions/dvls/certs:ro \
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}

{% tab title="Linux" %}

```bash
mkdir -p /host/certs
cp /path/to/server.pem /host/certs/
cp /path/to/server.key /host/certs/
chmod 600 /host/certs/server.key

docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e TLS_CERTIFICATE_FILE=/opt/devolutions/dvls/certs/server.pem \
  -e TLS_PRIVATE_KEY_FILE=/opt/devolutions/dvls/certs/server.key \
  -p 5000:5000 \
  -v /host/certs:/opt/devolutions/dvls/certs:ro \
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}
{% endtabs %}

Anforderungen an das Zertifikatsformat:

* Zertifikat: PEM-Format (`.pem`, `.crt`)
* Privater Schlüssel: PEM-Format (`.key`, `.pem`)
* Kette: Zwischenzertifikate in die Zertifikatsdatei einschließen

Beispiel einer Zertifikatsdatei mit Kette:

```
-----BEGIN CERTIFICATE-----
<Your certificate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Intermediate CA certificate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Root CA certificate>
-----END CERTIFICATE-----
```

#### Base64-codierte Zertifikate

Verwenden Sie Base64-codierte Zertifikate, wenn Sie mit Systemen zur Verwaltung von Geheimnissen arbeiten (Azure Key Vault, Kubernetes Secrets):

{% tabs %}
{% tab title="Windows" %}

```powershell
cat server.pem | base64 > server.pem.b64
cat server.key | base64 > server.key.b64

docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=devolutions-server.company.com `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -e TLS_CERTIFICATE_B64="$(cat server.pem.b64)" `
  -e TLS_PRIVATE_KEY_B64="$(cat server.key.b64)" `
  -p 5000:5000 `
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}

{% tab title="macOS" %}

```bash
cat server.pem | base64 > server.pem.b64
cat server.key | base64 > server.key.b64

docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e TLS_CERTIFICATE_B64="$(cat server.pem.b64)" \
  -e TLS_PRIVATE_KEY_B64="$(cat server.key.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}

{% tab title="Linux" %}

```bash
cat server.pem | base64 > server.pem.b64
cat server.key | base64 > server.key.b64

docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e TLS_CERTIFICATE_B64="$(cat server.pem.b64)" \
  -e TLS_PRIVATE_KEY_B64="$(cat server.key.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}
{% endtabs %}

Zertifikat und privater Schlüssel werden nach `/opt/devolutions/dvls/App_Data/` geschrieben und in der Devolutions Server-Konfiguration referenziert.

### Datenbankkonfiguration

#### Format der Verbindungszeichenfolge

Devolutions Server erstellt die SQL Server-Verbindungszeichenfolge aus Umgebungsvariablen:

```
Encrypt=<DATABASE_ENCRYPT>;TrustServerCertificate=<DATABASE_TRUST_SERVER_CERTIFICATE>;
```

#### Standardport (1433)

{% tabs %}
{% tab title="Windows" %}

```
-e DATABASE_HOST=sql.example.com `
-e DATABASE_PORT=1433
```

Oder lassen Sie `DATABASE_PORT` weg (Standardwert 1433):

```powershell
-e DATABASE_HOST=sql.example.com
```

{% endtab %}

{% tab title="macOS" %}

```
-e DATABASE_HOST=sql.example.com \
-e DATABASE_PORT=1433
```

Oder lassen Sie `DATABASE_PORT` weg (Standardwert 1433):

```bash
-e DATABASE_HOST=sql.example.com
```

{% endtab %}

{% tab title="Linux" %}

```
-e DATABASE_HOST=sql.example.com \
-e DATABASE_PORT=1433
```

Oder lassen Sie `DATABASE_PORT` weg (Standardwert 1433):

```bash
-e DATABASE_HOST=sql.example.com
```

{% endtab %}
{% endtabs %}

#### Nicht-Standardport

{% tabs %}
{% tab title="Windows" %}
**Option 1**: Port im Hostnamen angeben:

```powershell
-e DATABASE_HOST=sql.example.com,1435
```

**Option 2**: Separate Port-Variable:

```powershell
-e DATABASE_HOST=sql.example.com `
-e DATABASE_PORT=1435
```

{% endtab %}

{% tab title="macOS" %}
**Option 1**: Port im Hostnamen angeben:

```bash
-e DATABASE_HOST=sql.example.com,1435
```

**Option 2**: Separate Port-Variable:

```bash
-e DATABASE_HOST=sql.example.com \
-e DATABASE_PORT=1435
```

{% endtab %}

{% tab title="Linux" %}
**Option 1**: Port im Hostnamen angeben:

```bash
-e DATABASE_HOST=sql.example.com,1435
```

**Option 2**: Separate Port-Variable:

```bash
-e DATABASE_HOST=sql.example.com \
-e DATABASE_PORT=1435
```

{% endtab %}
{% endtabs %}

#### Azure SQL-Datenbank

{% tabs %}
{% tab title="Windows" %}

```powershell
-e AZURE_SQL_HOST=dvls-sql-server.database.windows.net `
-e AZURE_SQL_DATABASE=dvls `
-e AZURE_SQL_USERNAME=dvls_user@dvls-sql-server `
-e AZURE_SQL_PASSWORD='YourPassword!'
```

{% endtab %}

{% tab title="macOS" %}

```bash
-e AZURE_SQL_HOST=dvls-sql-server.database.windows.net \
-e AZURE_SQL_DATABASE=dvls \
-e AZURE_SQL_USERNAME=dvls_user@dvls-sql-server \
-e AZURE_SQL_PASSWORD='YourPassword!'
```

{% endtab %}

{% tab title="Linux" %}

```bash
-e AZURE_SQL_HOST=dvls-sql-server.database.windows.net \
-e AZURE_SQL_DATABASE=dvls \
-e AZURE_SQL_USERNAME=dvls_user@dvls-sql-server \
-e AZURE_SQL_PASSWORD='YourPassword!'
```

{% endtab %}
{% endtabs %}

#### Verschlüsselte Datenbankverbindung (TLS) <a href="#encrypted-database-connection-tls" id="encrypted-database-connection-tls"></a>

Standardmäßig verbindet sich Devolutions Server ohne TLS mit SQL Server. Wenn Ihr SQL Server Verschlüsselung erzwingt (zum Beispiel SQL Server 2022, das standardmäßig TLS erfordert, oder eine Instanz mit aktivierter Option "Force Encryption"), schlägt die Verbindung fehl, sofern Sie die Verschlüsselung nicht auf der Clientseite aktivieren.

{% hint style="warning" %}
Diese Variablen werden bei jedem Containerstart gelesen, nicht nur während der Initialisierung. Die SQL-Verbindungszeichenfolge wird bei jedem Start daraus neu generiert, geben Sie sie daher bei jedem `docker run` an — Initialisierung, Runtime und Update. Werden sie zur Laufzeit weggelassen, wird die Verbindungszeichenfolge mit deaktivierter Verschlüsselung neu geschrieben und die Verbindung schlägt fehl.
{% endhint %}

| Szenario                                                                                   | Erforderliche Variablen                                              |
| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
| SQL Server mit einem CA-vertrauenswürdigen Zertifikat                                      | `DATABASE_ENCRYPT=true`                                              |
| SQL Server mit einem selbstsignierten Zertifikat (z. B. containerisierter SQL Server 2022) | `DATABASE_ENCRYPT=true` und `DATABASE_TRUST_SERVER_CERTIFICATE=true` |

####

```bash
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e DATABASE_ENCRYPT=true \
  -e DATABASE_TRUST_SERVER_CERTIFICATE=true \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-20XX.X
```

{% hint style="warning" %}
Das Setzen von `DATABASE_TRUST_SERVER_CERTIFICATE=true` deaktiviert die Zertifikatsvalidierung. Verwenden Sie es nur mit selbstsignierten Zertifikaten in vertrauenswürdigen Netzwerken; installieren Sie für die Produktion ein CA-vertrauenswürdiges Zertifikat auf SQL Server und setzen Sie nur `DATABASE_ENCRYPT=true`.
{% endhint %}

#### SQL Server-Authentifizierung vs. Windows-Authentifizierung

Devolutions Server Docker-Container unterstützen nur die **SQL Server-Authentifizierung** (Benutzername/Passwort). Windows-Authentifizierung (Integrated Security) wird in Linux-Containern nicht unterstützt.

### Reverse-Proxy-Konfiguration

Wenn Devolutions Server hinter einem Reverse Proxy, nginx Ingress oder Azure App Service läuft, konfigurieren Sie die Einstellungen für die externe URL:

{% tabs %}
{% tab title="Windows" %}

```powershell
docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=devolutions-server.company.com `
  -e WEB_SCHEME=http `
  -e PORT=5000 `
  -e EXTERNAL_WEB_SCHEME=https `
  -e EXTERNAL_WEB_PORT=443 `
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}

{% tab title="macOS" %}

```bash
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=http \
  -e PORT=5000 \
  -e EXTERNAL_WEB_SCHEME=https \
  -e EXTERNAL_WEB_PORT=443 \
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}

{% tab title="Linux" %}

```bash
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=http \
  -e PORT=5000 \
  -e EXTERNAL_WEB_SCHEME=https \
  -e EXTERNAL_WEB_PORT=443 \
  devolutions/devolutions-server:release-20XX.X
```

{% endtab %}
{% endtabs %}

Wichtige Einstellungen:

* `WEB_SCHEME=http` - Container verwendet HTTP
* `EXTERNAL_WEB_SCHEME=https` - Öffentliche URL ist HTTPS
* `EXTERNAL_WEB_PORT=443` - Standard-HTTPS-Port (in URLs weggelassen)
* `HOSTNAME=devolutions-server.company.com` - Öffentlicher Hostname

Devolutions Server generiert URLs wie `https://devolutions-server.company.com/` in der Benutzeroberfläche und in API-Antworten.

### Sicherheitshärtung

#### Verwaltung von Geheimnissen

{% hint style="danger" %}
Hardcodieren Sie Passwörter NICHT in docker run-Befehlen oder Compose-Dateien.
{% endhint %}

{% tabs %}
{% tab title="Windows" %}
**Docker Secrets (Swarm-Modus)**

```powershell
echo "YourPassword!" | docker secret create dvls_db_password -

docker service create `
  --name dvls-server `
  --secret dvls_db_password `
  -e DATABASE_PASSWORD_FILE=/run/secrets/dvls_db_password `
  ...
```

**Umgebungsdateien**

```powershell
# .env file (keep out of version control)
DATABASE_PASSWORD=YourPassword!
DVLS_ADMIN_PASSWORD=AdminPassword!

docker run -d --name dvls-server `
  --env-file .env `
  -e DATABASE_HOST=your-sql-server `
  ...
```

{% endtab %}

{% tab title="macOS" %}
**Docker Secrets (Swarm-Modus)**

```bash
echo "YourPassword!" | docker secret create dvls_db_password -

docker service create \
  --name dvls-server \
  --secret dvls_db_password \
  -e DATABASE_PASSWORD_FILE=/run/secrets/dvls_db_password \
  ...
```

**Umgebungsdateien**

```bash
# .env file (keep out of version control)
DATABASE_PASSWORD=YourPassword!
DVLS_ADMIN_PASSWORD=AdminPassword!

docker run -d --name dvls-server \
  --env-file .env \
  -e DATABASE_HOST=your-sql-server \
  ...
```

{% endtab %}

{% tab title="Linux" %}
**Docker Secrets (Swarm-Modus)**

```bash
echo "YourPassword!" | docker secret create dvls_db_password -

docker service create \
  --name dvls-server \
  --secret dvls_db_password \
  -e DATABASE_PASSWORD_FILE=/run/secrets/dvls_db_password \
  ...
```

**Umgebungsdateien**

```bash
# .env file (keep out of version control)
DATABASE_PASSWORD=YourPassword!
DVLS_ADMIN_PASSWORD=AdminPassword!

docker run -d --name dvls-server \
  --env-file .env \
  -e DATABASE_HOST=your-sql-server \
  ...
```

{% endtab %}
{% endtabs %}

**Azure Key Vault**

Verwenden Sie ***Managed Identity***, um Geheimnisse zur Laufzeit aus Key Vault abzurufen. Weitere Details finden Sie unter [Devolutions Server deployment to Azure App Service using a container](/server/de/knowledge-base/how-to-articles/devolutions-server-docker-deployment/devolutions-server-deployment-to-azure-app-service-using-a-container.md).

#### Netzwerkisolierung

Verwenden Sie Docker-Netzwerke, um Devolutions Server zu isolieren:

{% tabs %}
{% tab title="Windows" %}

```powershell
docker network create dvls-network

docker run -d --name dvls-server `
  --network dvls-network `
  -p 127.0.0.1:5000:5000 `
  -e DATABASE_HOST=sql-server `
  ...
```

{% endtab %}

{% tab title="macOS" %}

```bash
docker network create dvls-network

docker run -d --name dvls-server \
  --network dvls-network \
  -p 127.0.0.1:5000:5000 \
  -e DATABASE_HOST=sql-server \
  ...
```

{% endtab %}

{% tab title="Linux" %}

```bash
docker network create dvls-network

docker run -d --name dvls-server \
  --network dvls-network \
  -p 127.0.0.1:5000:5000 \
  -e DATABASE_HOST=sql-server \
  ...
```

{% endtab %}
{% endtabs %}

#### SSH-Zugriff

Deaktivieren Sie SSH in der Produktion, sofern es nicht zum Debuggen benötigt wird:

{% tabs %}
{% tab title="Windows" %}

```
-e SSH_ENABLED=false
```

{% endtab %}

{% tab title="macOS" %}

```
-e SSH_ENABLED=false
```

{% endtab %}

{% tab title="Linux" %}

```
-e SSH_ENABLED=false
```

{% endtab %}
{% endtabs %}

Wenn SSH aktiviert ist:

* Verwenden Sie starke Passwörter.
* Ändern Sie das Standardpasswort.
* Beschränken Sie den Zugriff mit Firewall-Regeln.
* Erwägen Sie die SSH-Schlüsselauthentifizierung (erfordert ein benutzerdefiniertes Image).

#### Versionsaktualisierungen

**Versionskennzeichnung**

* Images werden nach Release-Version (z. B. `release-2025.3`, `release-2026.1`) und nach spezifischem Build (z. B. `2025.3.1.0`, `2025.3.2.0`) getaggt.
* Es existiert kein `latest`-Tag - geben Sie immer eine Version an.
* Minor-/Patch-Aktualisierungen innerhalb derselben Release-Version sind beim Pullen des Release-Tags automatisch enthalten.
* Der Datenbankaktualisierungsmodus ist nur beim Wechsel von Hauptversionen erforderlich (z. B. `release-2025.3` → `release-2026.1`).

{% hint style="info" %}
Version 2026.1 dient der Veranschaulichung; ersetzen Sie sie beim Aktualisieren durch die tatsächlich neueste Hauptversion.
{% endhint %}

{% tabs %}
{% tab title="Windows" %}
**Aktualisierung der Hauptversion**

```powershell
docker pull devolutions/devolutions-server:release-2026.1
docker stop dvls-server

# Run update mode to migrate database
docker run --rm `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e DVLS_UPDATE_MODE=true `
  -e DVLS_BACKUP_PATH=/backup `
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" `
  -v dvls-backups:/backup `
  devolutions/devolutions-server:release-2026.1

docker rm dvls-server
docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=localhost `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" `
  -p 5000:5000 `
  devolutions/devolutions-server:release-2026.1
```

**Minor-/Patch-Aktualisierung (z. B. 2025.3.1 auf 2025.3.2)**

```powershell
docker pull devolutions/devolutions-server:release-2025.3
docker stop dvls-server
docker rm dvls-server

docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=localhost `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" `
  -p 5000:5000 `
  devolutions/devolutions-server:release-2025.3
```

{% endtab %}

{% tab title="macOS" %}
**Aktualisierung der Hauptversion**

```bash
docker pull devolutions/devolutions-server:release-2026.1
docker stop dvls-server

# Run update mode to migrate database
docker run --rm \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e DVLS_UPDATE_MODE=true \
  -e DVLS_BACKUP_PATH=/backup \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -v dvls-backups:/backup \
  devolutions/devolutions-server:release-2026.1

docker rm dvls-server
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-2026.1
```

**Minor-/Patch-Aktualisierung (z. B. 2025.3.1 auf 2025.3.2)**

```bash
docker pull devolutions/devolutions-server:release-2025.3
docker stop dvls-server
docker rm dvls-server

docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-2025.3
```

{% endtab %}

{% tab title="Linux" %}
**Aktualisierung der Hauptversion**

```bash
docker pull devolutions/devolutions-server:release-2026.1
docker stop dvls-server

# Run update mode to migrate database
docker run --rm \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e DVLS_UPDATE_MODE=true \
  -e DVLS_BACKUP_PATH=/backup \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -v dvls-backups:/backup \
  devolutions/devolutions-server:release-2026.1

docker rm dvls-server
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-2026.1
```

**Minor-/Patch-Aktualisierung (z. B. 2025.3.1 auf 2025.3.2)**

```bash
docker pull devolutions/devolutions-server:release-2025.3
docker stop dvls-server
docker rm dvls-server

docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-2025.3
```

{% endtab %}
{% endtabs %}

### Sicherheits-Checkliste

Konsultieren Sie [Devolutions Server security hardening](/server/de/getting-started/security-checklist/devolutions-server-security-hardening.md) für:

* Einstellungen für Administrationskonten
* Passwortrichtlinien
* Multifaktor-Authentifizierung
* IP-Einschränkungen
* Audit-Protokollierung
* Verschlüsselungseinstellungen

#### Siehe auch

* [Devolutions Server deployment to Azure App Service using a container](/server/de/knowledge-base/how-to-articles/devolutions-server-docker-deployment/devolutions-server-deployment-to-azure-app-service-using-a-container.md)
* [Deploy Devolutions Server with Docker](/server/de/knowledge-base/how-to-articles/devolutions-server-docker-deployment.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/server/de/knowledge-base/how-to-articles/devolutions-server-docker-deployment/advanced-docker-configuration-for-devolutions-server.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
