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

# Configuración avanzada de Docker para Devolutions Server

Este artículo cubre las opciones de configuración avanzada para el despliegue de Devolutions Server en Docker, incluida la referencia completa de variables de entorno, la gestión de certificados, el ajuste del rendimiento y el refuerzo de la seguridad.

### Referencia de variables de entorno

#### Variables de conexión a la base de datos

| Variable                            | Obligatorio | Predeterminado | Descripción                                                                                                                                                                                                              |
| ----------------------------------- | ----------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `DATABASE_HOST`                     | Sí          | —              | Nombre de host del SQL Server. Para puertos no estándar, use el formato `host,port` (p. ej., `sql.example.com,1433`).                                                                                                    |
| `AZURE_SQL_HOST`                    | Sí\*        | —              | Alias de `DATABASE_HOST` (nomenclatura específica de Azure).                                                                                                                                                             |
| `DATABASE_NAME`                     | Sí          | —              | Nombre de la base de datos de Devolutions Server.                                                                                                                                                                        |
| `AZURE_SQL_DATABASE`                | Sí\*        | —              | Alias de `DATABASE_NAME`.                                                                                                                                                                                                |
| `DATABASE_USERNAME`                 | Sí          | —              | Nombre de usuario de autenticación SQL (use una cuenta con privilegios mínimos con db\_owner en la base de datos de Devolutions Server).                                                                                 |
| `AZURE_SQL_USERNAME`                | Sí\*        | —              | Alias de `DATABASE_USERNAME`.                                                                                                                                                                                            |
| `DATABASE_PASSWORD`                 | Sí          | —              | Contraseña de autenticación SQL (trátela como un secreto, use secretos de Docker o Azure Key Vault).                                                                                                                     |
| `AZURE_SQL_PASSWORD`                | Sí\*        | —              | Alias de `DATABASE_PASSWORD`.                                                                                                                                                                                            |
| `DATABASE_PORT`                     | No          | `1433`         | Puerto del SQL Server (se añade al host si no se ha especificado ya en `DATABASE_HOST`).                                                                                                                                 |
| `AZURE_SQL_PORT`                    | No          | `1433`         | Alias de `DATABASE_PORT`.                                                                                                                                                                                                |
| `DATABASE_ENCRYPT`                  | No          | `false`        | Establézcalo en `true` para cifrar la conexión con el SQL Server (TLS). Obligatorio cuando el SQL Server exige el cifrado. Se lee en cada inicio del contenedor: páselo en cada `docker run`.                            |
| `DATABASE_TRUST_SERVER_CERTIFICATE` | No          | false          | Establézcalo en `true` para confiar en el certificado del SQL Server sin validarlo. Úselo con `DATABASE_ENCRYPT=true` cuando el servidor presente un certificado autofirmado (p. ej., SQL Server 2022 en un contenedor). |

{% hint style="info" %}
Las variables marcadas con \* son alias. Use la nomenclatura estándar o la específica de Azure, no ambas.
{% endhint %}

#### Configuración del servidor web

| Variable              | Obligatorio | Predeterminado       | Descripción                                                                                              |
| --------------------- | ----------- | -------------------- | -------------------------------------------------------------------------------------------------------- |
| `HOSTNAME`            | No          | `localhost`          | Nombre de host del servidor (se sobrescribe con `WEBSITE_HOSTNAME` en Azure).                            |
| `WEB_SCHEME`          | No          | `http`               | Protocolo: `http` o `https`. Establézcalo en `https` para habilitar TLS.                                 |
| `WEB_PORT` / `PORT`   | No          | `5000`               | Puerto en el que escucha el contenedor.                                                                  |
| `EXTERNAL_WEB_SCHEME` | No          | Refleja `WEB_SCHEME` | Protocolo externo cuando está detrás de un proxy inverso (p. ej., `https` cuando el proxy gestiona TLS). |
| `EXTERNAL_WEB_PORT`   | No          | Refleja `WEB_PORT`   | Puerto externo cuando está detrás de un proxy inverso (p. ej., `443` para HTTPS estándar).               |

#### Configuración del certificado TLS

| Variable               | Obligatorio | Predeterminado | Descripción                                                                                     |
| ---------------------- | ----------- | -------------- | ----------------------------------------------------------------------------------------------- |
| `TLS_CERTIFICATE_FILE` | No\*        | —              | Ruta al fichero de certificado PEM montado (p. ej., `/opt/devolutions/dvls/certs/server.pem`)   |
| `TLS_PRIVATE_KEY_FILE` | No\*        | —              | Ruta al fichero de clave privada PEM montado (p. ej., `/opt/devolutions/dvls/certs/server.key`) |
| `TLS_CERTIFICATE_B64`  | No\*        | —              | Contenido del certificado codificado en Base64 (se escribe en `App_Data/server.pem`)            |
| `TLS_PRIVATE_KEY_B64`  | No\*        | —              | Contenido de la clave privada codificado en Base64 (se escribe en `App_Data/server.key`)        |

{% hint style="info" %}
Si `WEB_SCHEME=https` y no se proporciona ningún certificado, se genera automáticamente un certificado autofirmado (válido \~5 años, RSA de 2048 bits). Use montajes de ficheros o variables en base64 para los certificados de producción.
{% endhint %}

#### Configuración del modo de funcionamiento

{% hint style="info" %}
`DVLS_INIT` y `DVLS_UPDATE_MODE` son mutuamente excluyentes. Establecer ambos en `true` provocará un error.
{% endhint %}

| Variable           | Obligatorio | Predeterminado     | Descripción                                                                                                                                         |
| ------------------ | ----------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DVLS_INIT`        | No          | `false`            | Establézcalo en `true` para ejecutar el modo de inicialización (crea el esquema y el usuario administrador y, a continuación, finaliza).            |
| `DVLS_UPDATE_MODE` | No          | `false`            | Establézcalo en `true` para ejecutar el modo de actualización (realiza una copia de seguridad, migra la base de datos y, a continuación, finaliza). |
| `DVLS_BACKUP_PATH` | No          | `/tmp/dvls-backup` | Ubicación de la copia de seguridad durante las actualizaciones (monte un volumen para conservar las copias de seguridad).                           |

#### Variables del modo de inicialización

Estas variables solo se utilizan durante la inicialización (`DVLS_INIT=true`):

| Variable              | Obligatoria | Predeterminado     | Descripción                                                                       |
| --------------------- | ----------- | ------------------ | --------------------------------------------------------------------------------- |
| `DVLS_ADMIN_USERNAME` | No          | `dvls-admin`       | Nombre de usuario de la cuenta de administrador creada durante la inicialización. |
| `DVLS_ADMIN_PASSWORD` | No          | `dvls-admin`       | Contraseña de la cuenta de administrador. DEBE cambiarse en producción.           |
| `DVLS_ADMIN_EMAIL`    | No          | `admin@<HOSTNAME>` | Dirección de correo electrónico de la cuenta de administrador                     |

#### Configuración del sistema

| Variable                     | Obligatoria | Predeterminado                             | Descripción                                                                                                     |
| ---------------------------- | ----------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
| `DVLS_PATH`                  | No          | `/opt/devolutions/dvls`                    | Ruta raíz de instalación (ubicación de appsettings y App\_Data).                                                |
| `DVLS_EXECUTABLE_PATH`       | No          | `/opt/devolutions/dvls/Devolutions.Server` | Ruta del ejecutable de Devolutions Server en modo de ejecución.                                                 |
| `DVLS_TELEMETRY`             | No          | `true`                                     | Activar/desactivar la recopilación de telemetría.                                                               |
| `DVLS_ENCRYPTION_CONFIG_B64` | No          | —                                          | Configuración de cifrado codificada en Base64 (necesaria para un cifrado coherente entre instancias escaladas). |

#### Configuración del acceso SSH

| Variable       | Obligatoria | Predeterminado | Descripción                                                                                                       |
| -------------- | ----------- | -------------- | ----------------------------------------------------------------------------------------------------------------- |
| `SSH_ENABLED`  | No          | `false`        | Activa el demonio SSH para depuración (se activa automáticamente en Azure salvo que se desactive explícitamente), |
| `SSH_PORT`     | No          | `2222`         | Puerto de escucha SSH (publíquelo con `-p 2222:2222`),                                                            |
| `SSH_PASSWORD` | Sí\*        | `Docker!`      | Contraseña de root para SSH (OBLIGATORIA si `SSH_ENABLED=true`; DEBE cambiarse en producción.                     |

{% hint style="info" %}
Si `SSH_ENABLED=true` sin `SSH_PASSWORD`, el contenedor se negará a iniciarse por motivos de seguridad.
{% endhint %}

#### Variables de Azure Web App

Estas variables las establece automáticamente Azure App Service:

| Variable              | Establecida por | Descripción                                                                                             |
| --------------------- | --------------- | ------------------------------------------------------------------------------------------------------- |
| `WEBSITE_HOSTNAME`    | Azure           | Sustituye a `HOSTNAME` (por ejemplo, `dvls-prod.azurewebsites.net`)                                     |
| `WEBSITE_INSTANCE_ID` | Azure           | Su presencia fuerza `EXTERNAL_WEB_SCHEME=https` y `EXTERNAL_WEB_PORT=443`, y activa automáticamente SSH |

### Configuración del certificado TLS

#### Certificado autofirmado generado automáticamente

Cuando `WEB_SCHEME=https` sin variables de certificado, Devolutions Server genera un certificado autofirmado (válido \~5 años, RSA de 2048 bits, 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 para desarrollo y pruebas. Los navegadores mostrarán advertencias de seguridad.
{% endhint %}

#### Ficheros de certificado mediante montaje de volumen

Monte los ficheros de certificado desde el 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 %}

Requisitos de formato del certificado:

* Certificado: formato PEM (`.pem`, `.crt`)
* Clave privada: formato PEM (`.key`, `.pem`)
* Cadena: incluya los certificados intermedios en el fichero de certificado

Ejemplo de fichero de certificado con cadena:

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

#### Certificados codificados en Base64

Utilice certificados codificados en Base64 cuando trabaje con sistemas de gestión de secretos (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 %}

El certificado y la clave privada se escriben en `/opt/devolutions/dvls/App_Data/` y se referencian en la configuración de Devolutions Server.

### Configuración de la base de datos

#### Formato de la cadena de conexión

Devolutions Server construye la cadena de conexión de SQL Server a partir de variables de entorno:

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

#### Puerto estándar (1433)

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

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

O bien omita `DATABASE_PORT` (por defecto, 1433):

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

{% endtab %}

{% tab title="macOS" %}

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

O bien omita `DATABASE_PORT` (por defecto, 1433):

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

{% endtab %}

{% tab title="Linux" %}

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

O bien omita `DATABASE_PORT` (por defecto, 1433):

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

{% endtab %}
{% endtabs %}

#### Puerto no estándar

{% tabs %}
{% tab title="Windows" %}
**Opción 1**: incluir el puerto en el nombre de host:

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

**Opción 2**: variable de puerto separada:

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

{% endtab %}

{% tab title="macOS" %}
**Opción 1**: incluir el puerto en el nombre de host:

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

**Opción 2**: variable de puerto separada:

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

{% endtab %}

{% tab title="Linux" %}
**Opción 1**: incluir el puerto en el nombre de host:

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

**Opción 2**: variable de puerto separada:

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

{% endtab %}
{% endtabs %}

#### Base de datos de Azure SQL

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

#### Conexión cifrada a la base de datos (TLS) <a href="#encrypted-database-connection-tls" id="encrypted-database-connection-tls"></a>

De forma predeterminada, Devolutions Server se conecta a SQL Server sin TLS. Si su SQL Server exige cifrado (por ejemplo, SQL Server 2022, que requiere TLS de forma predeterminada, o cualquier instancia con «Force Encryption» activado), la conexión fallará a menos que active el cifrado en el lado del cliente.

{% hint style="warning" %}
Estas variables se leen en cada inicio del contenedor, no solo durante la inicialización. La cadena de conexión SQL se regenera a partir de ellas en cada arranque, así que páselas en cada `docker run`: inicialización, ejecución y actualización. Omitirlas en tiempo de ejecución reescribe la cadena de conexión con el cifrado desactivado y la conexión fallará.
{% endhint %}

| Escenario                                                                              | Variables obligatorias                                             |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| SQL Server con un certificado de confianza emitido por una CA                          | `DATABASE_ENCRYPT=true`                                            |
| SQL Server con un certificado autofirmado (por ejemplo, SQL Server 2022 en contenedor) | `DATABASE_ENCRYPT=true` y `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" %}
Establecer `DATABASE_TRUST_SERVER_CERTIFICATE=true` desactiva la validación del certificado. Utilícelo solo con certificados autofirmados en redes de confianza; para producción, instale un certificado de confianza emitido por una CA en SQL Server y establezca únicamente `DATABASE_ENCRYPT=true`.
{% endhint %}

#### Autenticación de SQL Server frente a autenticación de Windows

Los contenedores Docker de Devolutions Server solo admiten la **autenticación de SQL Server** (usuario/contraseña). La autenticación de Windows (Integrated Security) no se admite en contenedores Linux.

### Configuración del proxy inverso

Cuando Devolutions Server se ejecuta detrás de un proxy inverso, un ingress de nginx o Azure App Service, configure los ajustes de la URL externa:

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

Ajustes clave:

* `WEB_SCHEME=http`: el contenedor utiliza HTTP
* `EXTERNAL_WEB_SCHEME=https`: la URL pública es HTTPS
* `EXTERNAL_WEB_PORT=443`: puerto HTTPS estándar (se omite en las URL)
* `HOSTNAME=devolutions-server.company.com`: nombre de host público

Devolutions Server genera URL como `https://devolutions-server.company.com/` en la interfaz de usuario y en las respuestas de la API.

### Refuerzo de la seguridad

#### Gestión de secretos

{% hint style="danger" %}
NO codifique las contraseñas de forma fija en los comandos docker run ni en los ficheros compose.
{% endhint %}

{% tabs %}
{% tab title="Windows" %}
**Docker Secrets (modo 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 `
  ...
```

**Ficheros de entorno**

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

**Ficheros de entorno**

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

**Ficheros de entorno**

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

Utilice ***Managed Identity*** para recuperar los secretos de Key Vault en tiempo de ejecución. Consulte [Devolutions Server deployment to Azure App Service using a container](/server/es/knowledge-base/how-to-articles/devolutions-server-docker-deployment/devolutions-server-deployment-to-azure-app-service-using-a-container.md) para obtener más detalles.

#### Aislamiento de red

Utilice redes de Docker para aislar 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 %}

#### Acceso SSH

Deshabilite SSH en producción a menos que sea necesario para la depuración:

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

Si SSH está habilitado:

* Utilice contraseñas seguras.
* Cambie la contraseña predeterminada.
* Restrinja el acceso con reglas de firewall.
* Considere la autenticación mediante clave SSH (requiere una imagen personalizada).

#### Actualizaciones de versión

**Etiquetado de versiones**

* Las imágenes se etiquetan por versión de lanzamiento (por ejemplo, `release-2025.3`, `release-2026.1`) y por compilación específica (por ejemplo, `2025.3.1.0`, `2025.3.2.0`).
* No existe la etiqueta `latest`: especifique siempre una versión.
* Las actualizaciones menores o de parche dentro de la misma versión de lanzamiento se incluyen automáticamente al descargar la etiqueta de lanzamiento.
* El modo de actualización de la base de datos solo es necesario al cambiar de versión principal (por ejemplo, `release-2025.3` → `release-2026.1`).

{% hint style="info" %}
La versión 2026.1 se utiliza a modo ilustrativo; sustitúyala por la versión principal más reciente real al actualizar.
{% endhint %}

{% tabs %}
{% tab title="Windows" %}
**Actualización de versión principal**

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

**Actualización menor o de parche (por ejemplo, de 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" %}
**Actualización de versión principal**

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

**Actualización menor o de parche (por ejemplo, de 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" %}
**Actualización de versión principal**

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

**Actualización menor o de parche (por ejemplo, de 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 %}

### Lista de comprobación de seguridad

Consulte [Devolutions Server security hardening](/server/es/getting-started/security-checklist/devolutions-server-security-hardening.md) para:

* Configuración de las cuentas de administración
* Políticas de contraseñas
* Autenticación multifactor
* Restricciones de IP
* Registro de auditoría
* Configuración de cifrado

#### Véase también

* [Devolutions Server deployment to Azure App Service using a container](/server/es/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/es/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/es/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.
