> 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/fr/knowledge-base/how-to-articles/install-devolutions-server-for-linux.md).

# Installer Devolutions Server pour Linux

Devolutions Server est offert pour Linux avec Microsoft Kestrel comme serveur web intégré et Microsoft PowerShell 7 pour l'installation en ligne de commande. Le présent sujet montre comment installer manuellement Devolutions Server pour Linux à l'aide d'invites Bash et de scripts PowerShell, ainsi que comment y accéder et le supprimer.

Autrement, Devolutions Server peut être installé automatiquement à l'aide des scripts qui se trouvent dans le [dépôt GitHub ScriptLibrary de Devolutions](https://github.com/Devolutions/ScriptLibrary/tree/main/DVLSForLinux).

### Installation des prérequis <a href="#installing-prerequisites" id="installing-prerequisites"></a>

1. Si Microsoft SQL Server n'est pas déjà installé, exécutez l'invite Bash suivante en remplaçant la variable `MSSQL_SA_PASSWORD` par un mot de passe fort :

   ```bash
   source /etc/os-release
   curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/microsoft-prod.gpg
   curl -fsSL https://packages.microsoft.com/config/ubuntu/$VERSION_ID/mssql-server-2022.list | sudo tee /etc/apt/sources.list.d/mssql-server-2022.list
   sudo apt-get update
   sudo apt-get install -y mssql-server
   sudo MSSQL_SA_PASSWORD="mystrongpassword" MSSQL_PID="evaluation" /opt/mssql/bin/mssql-conf -n setup accept-eula
   sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
   sudo systemctl restart mssql-server
   ```

   `MSSQL_PID` est défini à ***evaluation*** dans cet exemple, mais une clé de produit peut être saisie ici à la place.

{% hint style="warning" %}
Microsoft ne prend en charge que [certaines versions de SQL](/server/fr/overview/system-requirements.md#software-dependencies). Consultez la documentation de Microsoft pour vous assurer que votre version de SQL est officiellement prise en charge pour votre distribution.
{% endhint %}

2. Exécutez cette invite Bash pour installer PowerShell 7 :

   ```bash
   sudo apt-get update
   sudo apt-get install -y wget apt-transport-https software-properties-common
   source /etc/os-release
   wget -q https://packages.microsoft.com/config/ubuntu/$VERSION_ID/packages-microsoft-prod.deb
   sudo dpkg -i packages-microsoft-prod.deb
   rm packages-microsoft-prod.deb
   sudo apt-get update
   sudo apt-get install -y powershell
   ```

Assurez-vous que l'installation a lieu dans un répertoire accessible pour l'utilisateur actuel, car la ligne de commande `wget` télécharge un paquet `.deb` dans ledit répertoire.

3. Choisissez d'installer le [module Devolutions.PowerShell](https://www.powershellgallery.com/packages/Devolutions.PowerShell/) pour l'utilisateur actuel ou pour tous les utilisateurs.

   * **Pour l'utilisateur actuel** (emplacement : `/.local/share/powershell/Modules`), exécutez :

     ```powershell
     Install-Module -Name 'Devolutions.PowerShell' -Confirm:$False
     ```
   * **Pour tous les utilisateurs** (emplacement : `/opt/microsoft/powershell/7/Modules`), exécutez :

     ```powershell
     & sudo pwsh -Command { Install-Module -Name 'Devolutions.PowerShell' -Confirm:$False -Scope 'AllUsers' -Force }
     ```

   Un avertissement risque d'apparaître indiquant que l'installation provient d'un dépôt non approuvé. Le module est hébergé sur PowerShell Gallery, l'emplacement officiel d'hébergement des modules PowerShell géré par Microsoft. Pour éviter de voir cet avertissement à l'avenir, exécutez :

   ```powershell
   Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
   ```

   Bien que ce ne soit pas requis, le provisionnement d'utilisateurs et de groupes distincts pour Devolutions Server est fortement recommandé. Voici une invite Bash pour créer un utilisateur et un groupe nommés tous deux ***dvls***, avec le répertoire d'installation défini à `/opt/devolutions/dvls` :

   ```bash
   sudo useradd -N dvls
   sudo groupadd dvls
   sudo usermod -a -G dvls dvls
   # optional, add current user to dvls group
   sudo usermod -a -G dvls $(id -un)
   sudo mkdir -p /opt/devolutions/dvls
   sudo chown -R dvls:dvls /opt/devolutions/dvls
   sudo chmod 550 /opt/devolutions/dvls
   ```

### Téléchargement et installation de Devolutions Server pour Linux <a href="#downloading-and-installing-dvls-for-linux" id="downloading-and-installing-dvls-for-linux"></a>

1. Exécutez le script PowerShell ci-dessous pour télécharger la dernière version de Devolutions Server pour Linux et extraire le fichier `.tar.gz` dans l'emplacement `/opt/devolutions/dvls` :

   ```powershell
   $DVLSPath = "/opt/devolutions/dvls"
   $DVLSProductURL = "https://devolutions.net/productinfo.htm"

   $Result = (Invoke-RestMethod -Method 'GET' -Uri $DVLSProductURL) -Split "`r"

   $DVLSLinux = [PSCustomObject]@{
       "Version" = (($Result | Select-String DPSLinuxX64bin.Version) -Split "=")[-1].Trim()
       "URL"     = (($Result | Select-String DPSLinuxX64bin.Url) -Split "=")[-1].Trim()
       "Hash"    = (($Result | Select-String DPSLinuxX64bin.hash) -Split "=")[-1].Trim()
   }

   $DVLSDownloadPath = Join-Path -Path "/tmp" -ChildPath (([URI]$DVLSLinux.URL).Segments)[-1]

   Invoke-RestMethod -Method 'GET' -Uri $DVLSLinux.URL -OutFile $DVLSDownloadPath

   & tar -xzf $DVLSDownloadPath -C $DVLSPath --strip-components=1

   Remove-Item -Path $DVLSDownloadPath

   & sudo pwsh -Command {
     Param(
         $DVLSPath
     )

     chown -R dvls:dvls $DVLSPath
     chmod -R o-rwx $DVLSPath
     chmod 660 (Join-Path -Path $DVLSPath -ChildPath 'appsettings.json')
     chmod 770 (Join-Path -Path $DVLSPath -ChildPath 'App_Data')
     chown -R dvls:dvls $DVLSPath
   } -Args $DVLSPath

   Set-Location -Path $DVLSPath
   ```

   Il est préférable que Devolutions Server puisse répondre via TLS. Si un certificat n'existe pas déjà, il est possible d'en générer un rapidement à l'aide de cette invite Bash :

   ```bash
   cd /opt/devolutions/dvls

   openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout cert.key -out cert.crt -subj "/CN=MYHOST" -addext "subjectAltName=DNS:MYHOST"
   openssl pkcs12 -export -out cert.pfx -inkey cert.key -in cert.crt -passout pass:
   ```

   Dans l'exemple ci-dessus, le `subjectAltName` utilise `DNS:.` Pour répondre uniquement sur une IP, utilisez plutôt `IP:`.

Notez que le certificat `.pfx` généré n'a pas de mot de passe.

2. À l'aide du module Devolutions.PowerShell, exécutez l'installation de Devolutions Server via PowerShell. Assurez-vous de personnaliser les valeurs indiquées ici :

   * `MYHOST`
   * `MSSQLHOST`
   * `DBUSERNAME`
   * `YOURSTRONGPASSWORD`
   * `MYEMAIL`

   ```powershell
   Import-Module -Name 'Devolutions.PowerShell'

   $DVLSPath = "/opt/devolutions/dvls"
   # Modify the $DVLSURI to use 'https' if using SSL
   $DVLSURI  = "http://MYHOST:5000/"

   $DVLSAdminUsername = 'dvls-admin'
   $DVLSAdminPassword = 'dvls-admin'
   $DVLSAdminEmail    = 'MYEMAIL'

   $Params = @{
       "DatabaseHost"           = "MSSQLHOST"
       "DatabaseName"           = "DSERVER"
       "DatabaseUserName"       = "DBUSERNAME"
       "DatabasePassword"       = "YOURSTRONGPASSWORD"
       "ServerName"             = "DSERVER"
       "AccessUri"              = $DVLSURI
       "HttpListenerUri"        = $DVLSURI
       "DPSPath"                = $DVLSPath
       "UseEncryptedconnection" = $False # Modify as needed
       "TrustServerCertificate" = $False # Modify as needed
       "EnableTelemetry"        = $True # Modify as needed
       "DisableEncryptConfig"   = $True
   }

   $Configuration = New-DPSInstallConfiguration @Params
   New-DPSAppsettings -Configuration $Configuration

   $Settings = Get-DPSAppSettings -ApplicationPath $DVLSPath

   New-DPSDatabase -ConnectionString $Settings.ConnectionStrings.LocalSqlServer
   Update-DPSDatabase -ConnectionString $Settings.ConnectionStrings.LocalSqlServer -InstallationPath $DVLSPath
   New-DPSDataSourceSettings -ConnectionString $Settings.ConnectionStrings.LocalSqlServer

   New-DPSEncryptConfiguration -ApplicationPath $DVLSPath
   New-DPSDatabaseAppSettings -Configuration $Configuration

   New-DPSAdministrator -ConnectionString $Settings.ConnectionStrings.LocalSqlServer -Name $DVLSAdminUsername -Password $DVLSAdminPassword -Email $DVLSAdminEmail
   ```

   Si un certificat a déjà été généré, procédez à la modification du fichier `appsettings.json` pour permettre à Kestrel de répondre via TLS à l'aide de ce script PowerShell :

   ```powershell
   Import-Module -Name 'Devolutions.PowerShell'

   $DVLSPath = '/opt/devolutions/dvls'

   $JSON = Get-Content -Path (Join-Path -Path $DVLSPath -ChildPath 'appsettings.json') | ConvertFrom-JSON -Depth 100

   $JSON.Kestrel.Endpoints.Http | Add-Member -MemberType NoteProperty -Name 'Certificate' -Value @{
       'Path'     = (Join-Path -Path $DVLSPath -ChildPath 'cert.pfx')
       'Password' = ''
   }

   $JSON | ConvertTo-JSON -Depth 100 | Set-Content -Path (Join-Path -Path $DVLSPath -ChildPath 'appsettings.json')

   $Settings = Get-DPSAppSettings -ApplicationPath $DVLSPath

   $AccessUri = (Get-DPSAccessUri -ConnectionString $Settings.ConnectionStrings.LocalSqlServer).AccessUri
   Set-DPSAccessUri -ApplicationPath $DVLSPath -ConnectionString $Settings.ConnectionStrings.LocalSqlServer -AccessURI ($AccessUri -Replace "http","https")

   & sudo pwsh -Command {
     Param(
         $DVLSPath
     )

     & chown dvls:dvls (Join-Path -Path $DVLSPath -ChildPath 'cert.pfx')
   } -Args $DVLSPath
   ```

   Pour permettre l'exécution en arrière-plan de Devolutions Server pour Linux, il est recommandé de créer un fichier d'unité pour systemd à l'aide de cette invite Bash :

   ```bash
   sudo tee /etc/systemd/system/dvls.service > /dev/null <<EOT
   [Unit]
   Description=DVLS

   [Service]
   Type=simple
   Restart=always
   RestartSec=10
   User=dvls
   ExecStart=/opt/devolutions/dvls/Devolutions.Server
   WorkingDirectory=/opt/devolutions/dvls
   KillSignal=SIGINT
   SyslogIdentifier=dvls
   Environment="SCHEDULER_EMBEDDED=true"

   [Install]
   WantedBy=multi-user.target
   Alias=dvls.service
   EOT

   sudo systemctl daemon-reload
   ```
3. Pour démarrer Devolutions Server, exécutez :

   ```bash
   sudo systemctl start dvls

   # View status
   sudo systemctl status dvls
   ```

### Accéder à Devolutions Server pour Linux <a href="#accessing-dvls-linux" id="accessing-dvls-linux"></a>

Par défaut, Devolutions Server pour Linux écoute sur le port 5000 sur l'IP ou le nom d'hôte du système d'installation, ce qui ressemble le plus souvent à : `http://MYHOST:5000`. Sachez que des erreurs OAuth peuvent se produire au premier lancement lors d'une tentative d'accès à Devolutions Server à partir d'une URL non configurée. Si c'est le cas, ajoutez des URI supplémentaires sur lesquels écouter, ou modifiez l'URI principal en exécutant le script suivant dans PowerShell :

```powershell
Import-Module -Name 'Devolutions.PowerShell'

$DVLSPath = "/opt/devolutions/dvls"

$Settings = Get-DPSAppSettings -ApplicationPath $DVLSPath
$ConnectionString = $Settings.ConnectionStrings.LocalSqlServer

Get-DPSAccessUri -ConnectionString $ConnectionString

Set-DPSAccessUri -ConnectionString $ConnectionString -ApplicationPath $DVLSPath -AccessURI 'http://10.10.0.20:5000/' -AdditionalAccessURIs @('http://ubuntu-2204:5000/')
```

Si Devolutions Server demeure inaccessible à l'extérieur du système installé, vérifiez si les ports de pare-feu requis sont ouverts, en ajoutant Uncomplicated Firewall à l'invite, par exemple : `sudo ufw allow 5000`.

### Importation de la clé de chiffrement de Devolutions Server <a href="#importing-devolutions-server-encryption-key" id="importing-devolutions-server-encryption-key"></a>

**Exportation à partir d'une installation Windows existante**

```powershell
Import-Module -Name 'Devolutions.PowerShell
$existingDVLSInstance = 'C:\my\path\dvlsInstance\'
$destination = 'C:\other\path\encryption.config'
Export-DPSEncryptionKeys -ApplicationPath $existingDVLSInstance -Destination $destination
```

**Importation vers une nouvelle installation Linux**

```powershell
Import-Module -Name 'Devolutions.PowerShell
$newDvlsInstance = '/home/user/linuxDlvsInstance'
$keysToImport = '/path/to/encryption.config'
Import-DPSEncryptionKeys -ApplicationPath $newDvlsInstance -Filename $keysToImport
```

### Mise à jour de Devolutions Server pour Linux <a href="#updating-devolutions-server-for-linux" id="updating-devolutions-server-for-linux"></a>

N'extrayez pas la nouvelle archive `.tar.gz` directement par-dessus `/opt/devolutions/dvls.` Cela écrase `appsettings.json` et `encryption.config`, ce qui empêche le service de démarrer et peut rendre les données existantes indéchiffrables. Suivez toujours la méthode de mise à jour détaillée sur cette page.

1. Sauvegardez la base de données. Voici comment procéder pour Microsoft SQL Server (Linux ou distant) :

   ```
   /opt/mssql-tools18/bin/sqlcmd -S <MSSQLHOST> -U <DBUSERNAME> -P '<PASSWORD>' -C \
     -Q "BACKUP DATABASE [DSERVER] TO DISK = N'/var/opt/mssql/data/DSERVER-$(date +%F-%H%M).bak' WITH INIT, COMPRESSION;"
   ```

   Le chemin complet vers `sqlcmd` évite l'erreur **"**&#x63;ommand not found" dans les shells sans connexion où `/etc/profile.d/mssql-tools.sh` n'a pas été sourcé.

   `-C` fait confiance au certificat du serveur (requis pour les installations locales de SQL Server qui utilisent un certificat auto-signé).

   Sauvegardez dans un répertoire accessible en écriture par l'utilisateur MSSQL. `/var/opt/mssql/data/` fonctionne d'emblée.
2. Assurez-vous que le fichier `.bak` existe et n'est pas vide avant de passer à l'étape suivante.
3. Arrêtez le service Devolutions Server à l'aide du script suivant :

   ```bash
   sudo systemctl stop dvls.service
   sudo systemctl status dvls.service   # confirm inactive (dead)
   ```
4. Sauvegardez les fichiers d'installation et de configuration. Gardez en tête que `/opt/devolutions/dvls` est en mode 550 et appartient à `dvls:dvls`, par conséquent les applets de commande de sauvegarde doivent être exécutées en tant que racine. Démarrez PowerShell avec `sudo pwsh`, puis collez ce script :

   ```powershell
   Import-Module Devolutions.PowerShell
   $DVLSPath        = '/opt/devolutions/dvls'
   $BackupBase      = "/var/backups/dvls/$(Get-Date -Format 'yyyy-MM-dd-HHmm')"
   $BackupConfig    = Join-Path $BackupBase 'config'
   $BackupInstall   = Join-Path $BackupBase 'installation'
   mkdir -p $BackupConfig $BackupInstall
   Backup-DPSConfigurationFiles -ApplicationPath $DVLSPath -BackupConfigurationPath $BackupConfig
   Backup-DPSInstallationFiles  -ApplicationPath $DVLSPath -BackupPath              $BackupInstall
   ```

   * `Backup-DPSConfigurationFiles` préserve : `appsettings.json`, `web.config` et `encryption.config`.
   * `Backup-DPSInstallationFiles` préserve les dossiers personnalisés, le dossier de détection d'anomalies et tous les actifs ajoutés par l'utilisateur.
5. Videz le répertoire d'installation, à l'exception de `App_data`, car il contient l'état d'exécution qui survit aux mises à niveau. Utilisez ce script pour le faire :

   ```bash
   sudo find /opt/devolutions/dvls -mindepth 1 -maxdepth 1 ! -name 'App_Data' -exec rm -rf {} +
   sudo tar -xzf /tmp/DVLS.<version>.linux-x64.tar.gz -C /opt/devolutions/dvls --strip-components=1
   ```

   Utilisez `--strip-components` seulement si l'archive comporte un dossier de premier niveau.
6. Restaurez la configuration et les données personnalisées. À cette étape, `appsettings.json` (chaîne de connexion à la base de données) et `web.config` sont replacés dans la nouvelle installation. Puisque `encryption.config` a déjà été préservé dans `App_Data/` à l'étape 5, `Restore-DPSConfigurationFiles` ne le placera pas à la racine de l'installation, car ce n'est pas là qu'il se trouve sous Linux. Voici le script de restauration :

   ```
   Restore-DPSCustomFolders            -BackupPath              $BackupInstall -ApplicationPath $DVLSPath
   Restore-DPSAnomalyDetectionFolder   -BackupPath              $BackupInstall -ApplicationPath $DVLSPath
   Restore-DPSConfigurationFiles       -BackupConfigurationPath $BackupConfig  -ApplicationPath $DVLSPath
   ```
7. Extrayez les chaînes de connexion du fichier `appsettings.json` restauré :

   ```
   $ConnectionString = (Get-DPSAppSettings -ApplicationPath $DVLSPath).ConnectionStrings.LocalSqlServer
   Update-DPSDatabase -ConnectionString $ConnectionString -InstallationPath $DVLSPath
   ```

   `Update-DPSDatabase` n'affiche aucun résultat en cas de succès. Vérifiez que la commande a fonctionné en confirmant qu'elle a retourné le code de sortie 0 et qu'après le démarrage du service à l'étape 9, le journal affiche des entrées ***Migration done with status Done*** sans lignes `[ERR]`.
8. Réappliquez la propriété et les permissions :

   ```
   sudo chown -R dvls:dvls /opt/devolutions/dvls
   sudo chmod 550 /opt/devolutions/dvls
   sudo chmod 660 /opt/devolutions/dvls/appsettings.json
   sudo chmod 770 /opt/devolutions/dvls/App_Data
   # If a certs/ directory is in use:
   [ -d /opt/devolutions/dvls/certs ] && sudo chmod 750 /opt/devolutions/dvls/certs
   ```
9. Démarrez le service et vérifiez s'il fonctionne correctement :

   ```
   sudo systemctl start dvls.service
   sudo systemctl status dvls.service
   sudo journalctl -u dvls.service -n 100 --no-pager
   ```

#### Dépannage <a href="#troubleshooting" id="troubleshooting"></a>

* **Le service ne démarre pas, `appsettings.json` est absent ou vide :** restaurez à partir de `$BackupConfig/appsettings.json`, répétez les étapes 8 et 9.
* **La connexion fonctionne, mais les entrées ne se déchiffrent pas :** `encryption.config` n'a pas été restauré. Copiez `$BackupConfig/encryption.config` dans `$DVLSPath/App_Data/`, corrigez les permissions (`chown dvls:dvls` et `chmod 660`), puis redémarrez.
* **Erreurs de schéma de base de données à l'exécution :** `Update-DPSDatabase` a été ignoré ou a échoué. Répétez l'étape 7.
* **Retour arrière complet :** arrêtez le service (voir l'étape 3), videz `/opt/devolutions/dvls` sauf `App_Data/` (étape 5), copiez le contenu de `$BackupInstall` de nouveau dans `/opt/devolutions/dvls`, restaurez `appsettings.json` à partir de `$BackupConfig`, réappliquez la propriété et les permissions de l'étape 8, restaurez la base de données à partir du fichier `.bak` produit à l'étape 1, puis redémarrez.

### Suppression de Devolutions Server <a href="#removing-dvls" id="removing-dvls"></a>

Pour supprimer Devolutions Server, exécutez l'invite Bash ci-dessous et personnalisez-la pour le système. Ce script s'appuie sur le [module PowerShell DbaTools](https://dbatools.io/) pour faciliter la suppression de la base de données MSSQL. Il suppose que `localhost` est l'installation MSSQL et `dvls` le nom de la base de données.

```
# Remove DVLS on Linux, adjust as necessary
& sudo systemctl stop dvls.service
& sudo rm /etc/systemd/system/dvls.service
& sudo rm -rf /opt/devolutions/dvls
& sudo userdel -r dvls
& sudo groupdel dvls

Import-Module dbatools
$Credential = Get-Credential

Set-DbaToolsInsecureConnection

Remove-DbaDatabase -SqlInstance localhost -SqlCredential $Credential -Database 'dvls' -Confirm:$False
```


---

# 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/fr/knowledge-base/how-to-articles/install-devolutions-server-for-linux.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.
