> 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/it/knowledge-base/how-to-articles/devolutions-server-docker-deployment/advanced-docker-configuration-for-devolutions-server.md).

# Configurazione Docker avanzata per Devolutions Server

Questo articolo illustra le opzioni di configurazione avanzate per il deployment Docker di Devolutions Server, incluso il riferimento completo alle variabili d'ambiente, la gestione dei certificati, l'ottimizzazione delle prestazioni e il rafforzamento della sicurezza.

### Riferimento delle variabili d'ambiente

#### Variabili di connessione al database

| Variabile                           | Obbligatorio | Predefinito | Descrizione                                                                                                                                                                                                                               |
| ----------------------------------- | ------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DATABASE_HOST`                     | Sì           | —           | Nome host di SQL Server. Per porte non standard, utilizzi il formato `host,port` (ad esempio, `sql.example.com,1433`).                                                                                                                    |
| `AZURE_SQL_HOST`                    | Sì\*         | —           | Alias di `DATABASE_HOST` (denominazione specifica di Azure).                                                                                                                                                                              |
| `DATABASE_NAME`                     | Sì           | —           | Nome del database di Devolutions Server.                                                                                                                                                                                                  |
| `AZURE_SQL_DATABASE`                | Sì\*         | —           | Alias di `DATABASE_NAME`.                                                                                                                                                                                                                 |
| `DATABASE_USERNAME`                 | Sì           | —           | Nome utente per l'autenticazione SQL (utilizzi un account con privilegi minimi con db\_owner sul database di Devolutions Server).                                                                                                         |
| `AZURE_SQL_USERNAME`                | Sì\*         | —           | Alias di `DATABASE_USERNAME`.                                                                                                                                                                                                             |
| `DATABASE_PASSWORD`                 | Sì           | —           | Password per l'autenticazione SQL (da trattare come segreto, utilizzi i segreti Docker o Azure Key Vault).                                                                                                                                |
| `AZURE_SQL_PASSWORD`                | Sì\*         | —           | Alias di `DATABASE_PASSWORD`.                                                                                                                                                                                                             |
| `DATABASE_PORT`                     | No           | `1433`      | Porta di SQL Server (aggiunta all'host se non già specificata in `DATABASE_HOST`).                                                                                                                                                        |
| `AZURE_SQL_PORT`                    | No           | `1433`      | Alias di `DATABASE_PORT`.                                                                                                                                                                                                                 |
| `DATABASE_ENCRYPT`                  | No           | `false`     | Imposti su `true` per crittografare la connessione a SQL Server (TLS). Obbligatorio quando SQL Server impone la crittografia. Viene letta a ogni avvio del container: la passi a ogni `docker run`.                                       |
| `DATABASE_TRUST_SERVER_CERTIFICATE` | No           | false       | Imposti su `true` per considerare attendibile il certificato di SQL Server senza convalida. Da utilizzare con `DATABASE_ENCRYPT=true` quando il server presenta un certificato autofirmato (ad esempio, SQL Server 2022 in un container). |

{% hint style="info" %}
Le variabili contrassegnate con \* sono alias. Utilizzi la denominazione standard oppure quella specifica di Azure, non entrambe.
{% endhint %}

#### Configurazione del server web

| Variabile             | Obbligatorio | Predefinito             | Descrizione                                                                                                    |
| --------------------- | ------------ | ----------------------- | -------------------------------------------------------------------------------------------------------------- |
| `HOSTNAME`            | No           | `localhost`             | Nome host del server (sovrascritto da `WEBSITE_HOSTNAME` su Azure).                                            |
| `WEB_SCHEME`          | No           | `http`                  | Protocollo: `http` o `https`. Imposti su `https` per abilitare TLS.                                            |
| `WEB_PORT` / `PORT`   | No           | `5000`                  | Porta su cui il container è in ascolto.                                                                        |
| `EXTERNAL_WEB_SCHEME` | No           | Rispecchia `WEB_SCHEME` | Protocollo esterno quando si trova dietro un reverse proxy (ad esempio, `https` quando il proxy gestisce TLS). |
| `EXTERNAL_WEB_PORT`   | No           | Rispecchia `WEB_PORT`   | Porta esterna quando si trova dietro un reverse proxy (ad esempio, `443` per HTTPS standard).                  |

#### Configurazione del certificato TLS

| Variabile              | Obbligatorio | Predefinito | Descrizione                                                                                            |
| ---------------------- | ------------ | ----------- | ------------------------------------------------------------------------------------------------------ |
| `TLS_CERTIFICATE_FILE` | No\*         | —           | Percorso del file di certificato PEM montato (ad esempio, `/opt/devolutions/dvls/certs/server.pem`)    |
| `TLS_PRIVATE_KEY_FILE` | No\*         | —           | Percorso del file di chiave privata PEM montato (ad esempio, `/opt/devolutions/dvls/certs/server.key`) |
| `TLS_CERTIFICATE_B64`  | No\*         | —           | Contenuto del certificato codificato in Base64 (scritto in `App_Data/server.pem`)                      |
| `TLS_PRIVATE_KEY_B64`  | No\*         | —           | Contenuto della chiave privata codificato in Base64 (scritto in `App_Data/server.key`)                 |

{% hint style="info" %}
Se `WEB_SCHEME=https` e non viene fornito alcun certificato, viene generato automaticamente un certificato autofirmato (valido \~5 anni, RSA a 2048 bit). Utilizzi i mount di file o le variabili base64 per i certificati di produzione.
{% endhint %}

#### Configurazione della modalità operativa

{% hint style="info" %}
`DVLS_INIT` e `DVLS_UPDATE_MODE` si escludono a vicenda. Impostare entrambe su `true` causerà un errore.
{% endhint %}

| Variabile          | Obbligatorio | Predefinito        | Descrizione                                                                                                          |
| ------------------ | ------------ | ------------------ | -------------------------------------------------------------------------------------------------------------------- |
| `DVLS_INIT`        | No           | `false`            | Imposti su `true` per eseguire la modalità di inizializzazione (crea lo schema e l'utente amministratore, poi esce). |
| `DVLS_UPDATE_MODE` | No           | `false`            | Imposti su `true` per eseguire la modalità di aggiornamento (esegue il backup, migra il database, poi esce).         |
| `DVLS_BACKUP_PATH` | No           | `/tmp/dvls-backup` | Posizione di backup durante gli aggiornamenti (montare un volume per rendere persistenti i backup).                  |

#### Variabili della modalità di inizializzazione

Queste variabili vengono utilizzate solo durante l'inizializzazione (`DVLS_INIT=true`):

| Variabile             | Obbligatoria | Predefinito        | Descrizione                                                                 |
| --------------------- | ------------ | ------------------ | --------------------------------------------------------------------------- |
| `DVLS_ADMIN_USERNAME` | No           | `dvls-admin`       | Nome utente dell'account amministratore creato durante l'inizializzazione.  |
| `DVLS_ADMIN_PASSWORD` | No           | `dvls-admin`       | Password dell'account amministratore. DEVE essere modificata in produzione! |
| `DVLS_ADMIN_EMAIL`    | No           | `admin@<HOSTNAME>` | Indirizzo email dell'account amministratore                                 |

#### Configurazione del sistema

| Variabile                    | Obbligatoria | Predefinito                                | Descrizione                                                                                                            |
| ---------------------------- | ------------ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| `DVLS_PATH`                  | No           | `/opt/devolutions/dvls`                    | Percorso radice di installazione (posizione di appsettings e App\_Data).                                               |
| `DVLS_EXECUTABLE_PATH`       | No           | `/opt/devolutions/dvls/Devolutions.Server` | Percorso dell'eseguibile di Devolutions Server in modalità runtime.                                                    |
| `DVLS_TELEMETRY`             | No           | `true`                                     | Abilita/disabilita la raccolta dei dati di telemetria.                                                                 |
| `DVLS_ENCRYPTION_CONFIG_B64` | No           | —                                          | Configurazione di crittografia codificata in Base64 (necessaria per una crittografia coerente tra le istanze scalate). |

#### Configurazione dell'accesso SSH

| Variabile      | Obbligatoria | Predefinito | Descrizione                                                                                              |
| -------------- | ------------ | ----------- | -------------------------------------------------------------------------------------------------------- |
| `SSH_ENABLED`  | No           | `false`     | Abilita il daemon SSH per il debug (abilitato automaticamente su Azure salvo disabilitazione esplicita), |
| `SSH_PORT`     | No           | `2222`      | Porta di ascolto SSH (pubblicare con `-p 2222:2222`),                                                    |
| `SSH_PASSWORD` | Sì\*         | `Docker!`   | Password root per SSH (OBBLIGATORIA se `SSH_ENABLED=true`, DEVE essere modificata in produzione!         |

{% hint style="info" %}
Se `SSH_ENABLED=true` senza `SSH_PASSWORD`, il container si rifiuterà di avviarsi per motivi di sicurezza.
{% endhint %}

#### Variabili di Azure Web App

Queste variabili vengono impostate automaticamente da Azure App Service:

| Variabile             | Impostata da | Descrizione                                                                                               |
| --------------------- | ------------ | --------------------------------------------------------------------------------------------------------- |
| `WEBSITE_HOSTNAME`    | Azure        | Sovrascrive `HOSTNAME` (ad esempio, `dvls-prod.azurewebsites.net`)                                        |
| `WEBSITE_INSTANCE_ID` | Azure        | La sua presenza forza `EXTERNAL_WEB_SCHEME=https` e `EXTERNAL_WEB_PORT=443` e abilita automaticamente SSH |

### Configurazione del certificato TLS

#### Certificato autofirmato generato automaticamente

Quando `WEB_SCHEME=https` è impostato senza variabili di certificato, Devolutions Server genera un certificato autofirmato (validità \~5 anni, RSA a 2048 bit, 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" %}
Solo per sviluppo e test. I browser mostreranno avvisi di sicurezza.
{% endhint %}

#### File di certificato tramite montaggio di volume

Montare i file di certificato dall'host:

{% 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 %}

Requisiti di formato del certificato:

* Certificato: formato PEM (`.pem`, `.crt`)
* Chiave privata: formato PEM (`.key`, `.pem`)
* Catena: includere i certificati intermedi nel file del certificato

Esempio di file di certificato con catena:

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

#### Certificati codificati in Base64

Utilizzare certificati codificati in Base64 quando si lavora con sistemi di gestione dei segreti (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 %}

Il certificato e la chiave privata vengono scritti in `/opt/devolutions/dvls/App_Data/` e referenziati nella configurazione di Devolutions Server.

### Configurazione del database

#### Formato della stringa di connessione

Devolutions Server costruisce la stringa di connessione a SQL Server a partire dalle variabili d'ambiente:

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

#### Porta standard (1433)

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

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

Oppure omettere `DATABASE_PORT` (il valore predefinito è 1433):

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

{% endtab %}

{% tab title="macOS" %}

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

Oppure omettere `DATABASE_PORT` (il valore predefinito è 1433):

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

{% endtab %}

{% tab title="Linux" %}

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

Oppure omettere `DATABASE_PORT` (il valore predefinito è 1433):

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

{% endtab %}
{% endtabs %}

#### Porta non standard

{% tabs %}
{% tab title="Windows" %}
**Opzione 1**: includere la porta nel nome host:

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

**Opzione 2**: variabile della porta separata:

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

{% endtab %}

{% tab title="macOS" %}
**Opzione 1**: includere la porta nel nome host:

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

**Opzione 2**: variabile della porta separata:

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

{% endtab %}

{% tab title="Linux" %}
**Opzione 1**: includere la porta nel nome host:

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

**Opzione 2**: variabile della porta separata:

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

{% endtab %}
{% endtabs %}

#### Database SQL di Azure

{% 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 %}

#### Connessione al database crittografata (TLS) <a href="#encrypted-database-connection-tls" id="encrypted-database-connection-tls"></a>

Per impostazione predefinita, Devolutions Server si connette a SQL Server senza TLS. Se il suo SQL Server impone la crittografia (ad esempio SQL Server 2022, che richiede TLS per impostazione predefinita, o qualsiasi istanza con "Force Encryption" abilitata), la connessione avrà esito negativo a meno che non si abiliti la crittografia lato client.

{% hint style="warning" %}
Queste variabili vengono lette a ogni avvio del container, non solo durante l'inizializzazione. La stringa di connessione SQL viene rigenerata a partire da esse a ogni avvio, quindi le passi a ogni `docker run` — inizializzazione, runtime e aggiornamento. Ometterle in fase di runtime riscrive la stringa di connessione con la crittografia disabilitata e la connessione avrà esito negativo.
{% endhint %}

| Scenario                                                                            | Variabili obbligatorie                                             |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| SQL Server con un certificato attendibile emesso da una CA                          | `DATABASE_ENCRYPT=true`                                            |
| SQL Server con un certificato autofirmato (ad esempio SQL Server 2022 in container) | `DATABASE_ENCRYPT=true` e `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" %}
L'impostazione `DATABASE_TRUST_SERVER_CERTIFICATE=true` disabilita la convalida del certificato. La utilizzi solo con certificati autofirmati in reti attendibili; per la produzione, installi un certificato attendibile emesso da una CA su SQL Server e imposti solo `DATABASE_ENCRYPT=true`.
{% endhint %}

#### Autenticazione di SQL Server e autenticazione di Windows a confronto

I container Docker di Devolutions Server supportano solo l'**autenticazione di SQL Server** (nome utente/password). L'autenticazione di Windows (Integrated Security) non è supportata nei container Linux.

### Configurazione del proxy inverso

Quando Devolutions Server viene eseguito dietro un proxy inverso, un ingress nginx o Azure App Service, configuri le impostazioni dell'URL esterno:

{% 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 %}

Impostazioni principali:

* `WEB_SCHEME=http` - Il container utilizza HTTP
* `EXTERNAL_WEB_SCHEME=https` - L'URL pubblico è HTTPS
* `EXTERNAL_WEB_PORT=443` - Porta HTTPS standard (omessa negli URL)
* `HOSTNAME=devolutions-server.company.com` - Nome host pubblico

Devolutions Server genera URL come `https://devolutions-server.company.com/` nell'interfaccia utente e nelle risposte dell'API.

### Rafforzamento della sicurezza

#### Gestione dei segreti

{% hint style="danger" %}
NON inserisca password in modo hardcoded nei comandi docker run o nei file compose.
{% endhint %}

{% tabs %}
{% tab title="Windows" %}
**Docker Secrets (modalità Swarm)**

```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 `
  ...
```

**File di ambiente**

```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 (modalità Swarm)**

```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 \
  ...
```

**File di ambiente**

```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 (modalità Swarm)**

```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 \
  ...
```

**File di ambiente**

```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**

Utilizzi ***Managed Identity*** per recuperare i segreti da Key Vault in fase di esecuzione. Consulti [Distribuzione di Devolutions Server in Azure App Service tramite un container](/server/it/knowledge-base/how-to-articles/devolutions-server-docker-deployment/devolutions-server-deployment-to-azure-app-service-using-a-container.md) per maggiori dettagli.

#### Isolamento della rete

Utilizzi le reti Docker per isolare Devolutions Server:

{% 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 %}

#### Accesso SSH

Disabiliti SSH in produzione a meno che non sia necessario per il debug:

{% 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 %}

Se SSH è abilitato:

* Utilizzi password complesse.
* Modifichi la password predefinita.
* Limiti l'accesso con regole firewall.
* Consideri l'autenticazione con chiave SSH (richiede un'immagine personalizzata).

#### Aggiornamenti di versione

**Tagging delle versioni**

* Le immagini sono contrassegnate in base alla versione di rilascio (ad esempio, `release-2025.3`, `release-2026.1`) e in base alla build specifica (ad esempio, `2025.3.1.0`, `2025.3.2.0`).
* Non esiste alcun tag `latest` - specifichi sempre una versione.
* Gli aggiornamenti minor/patch all'interno della stessa versione di rilascio sono inclusi automaticamente quando si scarica il tag di rilascio.
* La modalità di aggiornamento del database è necessaria solo quando si cambia versione major (ad esempio, `release-2025.3` → `release-2026.1`).

{% hint style="info" %}
La versione 2026.1 è utilizzata a scopo illustrativo; la sostituisca con l'effettiva ultima versione major al momento dell'aggiornamento.
{% endhint %}

{% tabs %}
{% tab title="Windows" %}
**Aggiornamento di versione major**

```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
```

**Aggiornamento minor/patch (ad esempio, da 2025.3.1 a 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" %}
**Aggiornamento di versione major**

```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
```

**Aggiornamento minor/patch (ad esempio, da 2025.3.1 a 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" %}
**Aggiornamento di versione major**

```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
```

**Aggiornamento minor/patch (ad esempio, da 2025.3.1 a 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 %}

### Elenco di controllo per la sicurezza

Consulti [Rafforzamento della sicurezza di Devolutions Server](/server/it/getting-started/security-checklist/devolutions-server-security-hardening.md) per:

* Impostazioni degli account di amministrazione
* Criteri delle password
* Autenticazione a più fattori
* Restrizioni IP
* Registrazione di audit
* Impostazioni di crittografia

#### Vedere anche

* [Distribuzione di Devolutions Server in Azure App Service tramite un container](/server/it/knowledge-base/how-to-articles/devolutions-server-docker-deployment/devolutions-server-deployment-to-azure-app-service-using-a-container.md)
* [Distribuire Devolutions Server con Docker](/server/it/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/it/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.
