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

# Devolutions Server für Linux installieren

Installieren Sie Devolutions Server für Linux mit Bash und PowerShell auf einer SQL Server- oder PostgreSQL-Datenbank, mit TLS-Einrichtung, Updates und Entfernung über systemd.

Devolutions Server ist für Linux mit Microsoft Kestrel als integriertem Webserver und Microsoft PowerShell 7 für die Befehlszeileninstallation verfügbar. Die Datenbank kann Microsoft SQL Server oder PostgreSQL sein. Dieses Thema zeigt, wie Sie Devolutions Server für Linux manuell mit Bash-Prompts und PowerShell-Skripts installieren und wie Sie darauf zugreifen, es aktualisieren und entfernen.

Alternativ kann Devolutions Server automatisch mit den Skripten aus dem [Devolutions GitHub ScriptLibrary Repository](https://github.com/Devolutions/ScriptLibrary/tree/main/DVLSForLinux) installiert werden.

### Voraussetzungen installieren <a href="#installing-prerequisites" id="installing-prerequisites"></a>

Devolutions Server benötigt einen Datenbankserver. Installieren Sie das Datenbankmodul, das Sie mit der SQL Server- oder PostgreSQL-Prozedur verwenden, oder gehen Sie direkt zur PowerShell-Installation, wenn der Datenbankserver bereits vorhanden ist.

#### SQL Server

1. Wenn Microsoft SQL Server noch nicht installiert ist, führen Sie die folgende Bash-Eingabe aus, wobei die Variable `MSSQL_SA_PASSWORD` auf ein starkes Passwort geändert wird:

   ```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_PID="evaluation" MSSQL_SA_PASSWORD="mystrongpassword" /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` ist in diesem Beispiel auf ***evaluation*** gesetzt, hier kann jedoch stattdessen ein Produktschlüssel eingegeben werden.

{% hint style="warning" %}
Microsoft unterstützt nur [bestimmte SQL-Versionen](/server/de/overview-of-devolutions-server/system-requirements.md#software-dependencies). Ziehen Sie die Dokumentation von Microsoft zurate, um sicherzustellen, dass Ihre SQL-Version offiziell für Ihre Distribution unterstützt wird.
{% endhint %}

#### PostgreSQL

Devolutions Server unterstützt PostgreSQL 14 oder höher, installiert auf einem Server oder von einem verwalteten PostgreSQL-Dienst bereitgestellt, der das Attribut `SUPERUSER` gewährt. Devolutions Server verbindet sich mit einer einzigen Rolle über einen Benutzernamen und ein Passwort: Die integrierte Authentifizierung ist mit PostgreSQL nicht verfügbar.

1. Wenn PostgreSQL noch nicht verfügbar ist, installieren Sie es auf dem Datenbankserver mit diesem Bash-Prompt:

   ```bash
   sudo apt-get update
   sudo apt-get install -y postgresql
   psql --version
   ```

   Die von der Distribution bereitgestellte PostgreSQL-Version hängt von deren Release ab. Stellen Sie sicher, dass die installierte Version PostgreSQL 14 oder höher ist.
2. Erstellen Sie eine dedizierte Rolle, der die Devolutions Server-Datenbank gehört, mit dem Attribut `SUPERUSER`, das zum Erstellen des Datenbankschemas erforderlich ist. Ersetzen Sie `YOURSTRONGPASSWORD` durch ein starkes Passwort:

   ```bash
   sudo -u postgres psql -c "CREATE ROLE dvls_owner LOGIN SUPERUSER PASSWORD 'YOURSTRONGPASSWORD';"
   sudo -u postgres psql -c "CREATE DATABASE dvls OWNER dvls_owner;"
   ```

   Die Schemaerstellung ändert PostgreSQL-Typumwandlungen, was nur ein Superuser tun kann. Bei einem verwalteten PostgreSQL-Dienst erstellen Sie die Rolle und die Datenbank mit dem Administratorkonto des Dienstes. Nach der Installation benötigt die Rolle das Attribut `SUPERUSER` nicht: entfernen Sie es mit `sudo -u postgres psql -c "ALTER ROLE dvls_owner NOSUPERUSER;"`.
3. Installieren Sie auf dem Computer, auf dem Devolutions Server ausgeführt wird, die PostgreSQL-Clienttools. Der integrierte Datenbanksicherungsauftrag von Devolutions Server führt `pg_dump` und `pg_restore` aus, und die Update- und Entfernungsprozeduren auf dieser Seite verwenden sie:

   ```bash
   sudo apt-get install -y postgresql-client
   pg_dump --version
   ```

   Die Hauptversion von `pg_dump` muss der Hauptversion des PostgreSQL-Servers entsprechen oder neuer sein, andernfalls schlägt die Sicherung fehl. Wenn das Paket der Distribution älter als der Server ist, installieren Sie das passende Paket `postgresql-client-<major version>` aus dem PostgreSQL-APT-Repository.

#### PowerShell und das Modul Devolutions.PowerShell

1. Führen Sie diese Bash-Eingabe aus, um PowerShell 7 zu installieren:

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

   Führen Sie diesen Prompt aus einem Verzeichnis aus, in dem der aktuelle Benutzer schreiben kann, da `wget` das Paket `.deb` in das aktuelle Verzeichnis herunterlädt.
2. Installieren Sie das [Devolutions.PowerShell-Modul](https://www.powershellgallery.com/packages/Devolutions.PowerShell/) für alle Benutzer (Speicherort: `/opt/microsoft/powershell/7/Modules`). Die Installations- und Updateprozeduren auf dieser Seite führen PowerShell als root aus. root findet nur Module, die für alle Benutzer installiert sind:

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

   Es erscheint wahrscheinlich eine Warnung, dass die Installation aus einem nicht vertrauenswürdigen Repository stammt. Das Modul wird in der PowerShell Gallery gehostet, dem offiziellen Speicherort für PowerShell-Module, der von Microsoft verwaltet wird. Damit diese Warnung künftig nicht mehr erscheint, führen Sie `Set-PSRepository -Name PSGallery -InstallationPolicy Trusted` aus.
3. Erstellen Sie einen Benutzer und eine Gruppe für Devolutions Server. Ein eigener Benutzer und eine eigene Gruppe sind optional und isolieren Devolutions Server von anderen Diensten. Dieser Bash-Prompt erstellt einen Benutzer und eine Gruppe, die beide ***dvls*** heißen, und setzt das Installationsverzeichnis auf `/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
   ```

### Devolutions Server für Linux herunterladen und installieren <a href="#downloading-and-installing-dvls-for-linux" id="downloading-and-installing-dvls-for-linux"></a>

Das Installationsverzeichnis gehört `dvls:dvls` im Modus 550, daher wird die Installation als root ausgeführt. Starten Sie PowerShell mit `sudo pwsh` und führen Sie alle PowerShell-Skripts dieses Abschnitts in dieser Sitzung aus.

1. Laden Sie die neueste Version von Devolutions Server für Linux herunter und extrahieren Sie die Datei `.tar.gz` nach `/opt/devolutions/dvls`:

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

   $DVLSPath = '/opt/devolutions/dvls'
   $DVLSDownloadPath = '/tmp/dvls-linux-x64.tar.gz'

   Get-DPSProduct -Name 'DPSLinuxX64bin' -Destination $DVLSDownloadPath
   & tar -xzf $DVLSDownloadPath -C $DVLSPath --strip-components=1
   Remove-Item -Path $DVLSDownloadPath

   & 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')

   Set-Location -Path $DVLSPath
   ```
2. Erzeugen Sie ein Zertifikat, wenn Devolutions Server über TLS antworten soll und noch kein Zertifikat vorhanden ist. Ersetzen Sie `MYHOST` durch den Hostnamen des Servers:

   ```powershell
   & 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:
   ```

   `subjectAltName` verwendet in diesem Beispiel `DNS:`. Um nur auf einer IP-Adresse zu antworten, verwenden Sie stattdessen `IP:`. Das erzeugte Zertifikat `.pfx` hat kein Passwort.

#### Installationsparameter für SQL Server

Definieren Sie die Installationsparameter in derselben PowerShell-Sitzung. Ersetzen Sie `MYHOST`, `MYEMAIL`, `MSSQLHOST`, `DBUSERNAME` und `YOURSTRONGPASSWORD` durch die Werte der Umgebung. `MSSQLHOST` ist der SQL Server-Host, `localhost`, wenn SQL Server auf demselben Computer ausgeführt wird. Um über TLS zu antworten, verwenden Sie `https` in `$DVLSURI`.

```powershell
$DVLSPath = '/opt/devolutions/dvls'
$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
}
```

#### Installationsparameter für PostgreSQL

Definieren Sie die Installationsparameter in derselben PowerShell-Sitzung. Ersetzen Sie `MYHOST`, `MYEMAIL`, `PGHOST` und `YOURSTRONGPASSWORD` durch die Werte der Umgebung. `PGHOST` ist der PostgreSQL-Host, `localhost`, wenn PostgreSQL auf demselben Computer ausgeführt wird. Um über TLS zu antworten, verwenden Sie `https` in `$DVLSURI`.

```powershell
$DVLSPath = '/opt/devolutions/dvls'
$DVLSURI  = 'http://MYHOST:5000/'

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

$Params = @{
    'DatabaseType'         = 'PostgreSql'
    'DatabaseHost'         = 'PGHOST'
    'DatabasePort'         = 5432
    'DatabaseName'         = 'dvls'
    'DatabaseUserName'     = 'dvls_owner'
    'DatabasePassword'     = 'YOURSTRONGPASSWORD'
    'ServerName'           = 'DSERVER'
    'AccessUri'            = $DVLSURI
    'HttpListenerUri'      = $DVLSURI
    'DPSPath'              = $DVLSPath
    'EnableTelemetry'      = $True # Modify as needed
    'DisableEncryptConfig' = $True
}
```

`DatabasePort` ist standardmäßig 5432, wenn der Wert weggelassen wird. Verwenden Sie einen Datenbanknamen in Kleinbuchstaben: Die Installation erstellt die Datenbank mit dem Namen in Anführungszeichen, daher wird die Groß-/Kleinschreibung des Namens in PostgreSQL-Befehlen beachtet.

Wenn `DatabaseType` auf `PostgreSql` gesetzt ist, ignoriert `New-DPSInstallConfiguration` die SQL Server-Parameter `-IntegratedSecurity`, `-FailoverPartner`, `-RetryCount` und `-RetryInterval` und zeigt eine Warnung an, wenn sie angegeben werden. `-UseEncryptedConnection` und `-TrustServerCertificate` gelten ebenfalls nicht: Die Verbindungszeichenfolge verwendet `SSL Mode=Prefer`, wodurch die Verbindung nur verschlüsselt wird, wenn der PostgreSQL-Server TLS anbietet. Um Verschlüsselung zu erzwingen, ändern Sie `SSL Mode` in den Verbindungszeichenfolgen von `appsettings.json` nach der Installation in `Require` oder `VerifyFull` und starten Sie Devolutions Server neu.

Die Verbindungszeichenfolge behält die PostgreSQL-Schlüsselwörter (`Host=`, `Port=`, `Database=`, `Username=`, `Password=`). Daran erkennt Devolutions Server das PostgreSQL-Modul. Sie wird unter `ConnectionStrings.LocalSqlServer` in `appsettings.json` gespeichert, demselben Schlüssel wie bei SQL Server. Devolutions Server fügt `Search Path=dbo,public` und `Keep Alive=30` hinzu, wenn sie nicht angegeben sind. Wenn Sie `Search Path` manuell setzen, behalten Sie `dbo` darin, da sich alle Tabellen von Devolutions Server im Schema `dbo` befinden.

#### Installation ausführen

1. Führen Sie die Installation von Devolutions Server mit dem Modul Devolutions.PowerShell in derselben PowerShell-Sitzung aus:

   ```powershell
   $Configuration = New-DPSInstallConfiguration @Params
   New-DPSAppSettings -Configuration $Configuration

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

   New-DPSDatabase -ConnectionString $ConnectionString
   Update-DPSDatabase -ConnectionString $ConnectionString -InstallationPath $DVLSPath
   New-DPSWorkspaceSettings -ConnectionString $ConnectionString

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

   New-DPSAdministrator -ConnectionString $ConnectionString -Name $DVLSAdminUsername -Password $DVLSAdminPassword -Email $DVLSAdminEmail
   ```

   `New-DPSDatabase` zeigt eine Warnung an und fährt fort, wenn die Datenbank bereits vorhanden ist. Das ist der Fall, wenn die Datenbank vorher erstellt wurde. `Update-DPSDatabase` erstellt anschließend das Schema.
2. Wenn ein Zertifikat erzeugt wurde, ändern Sie die Datei `appsettings.json`, damit Kestrel über TLS antworten kann:

   ```powershell
   $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')

   $AccessUri = (Get-DPSAccessUri -ConnectionString $ConnectionString).AccessUri
   Set-DPSAccessUri -ApplicationPath $DVLSPath -ConnectionString $ConnectionString -AccessURI ($AccessUri -Replace '^http:', 'https:')
   ```
3. Wenden Sie den Besitzer und die Berechtigungen der von der Installation erstellten Dateien erneut an und schließen Sie dann die PowerShell-Sitzung von root:

   ```powershell
   & chown -R dvls:dvls $DVLSPath
   & chmod -R o-rwx $DVLSPath
   & chmod 550 $DVLSPath
   & chmod 660 (Join-Path -Path $DVLSPath -ChildPath 'appsettings.json')
   & chmod 770 (Join-Path -Path $DVLSPath -ChildPath 'App_Data')
   exit
   ```
4. Erstellen Sie eine systemd-Unit-Datei, um Devolutions Server für Linux im Hintergrund auszuführen und beim Start zu aktivieren, mit diesem Bash-Prompt:

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

   [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
   EOT

   sudo systemctl daemon-reload
   sudo systemctl enable dvls
   ```

   `SCHEDULER_EMBEDDED=true` führt den Planungsdienst von Devolutions Server innerhalb des Dienstes aus. Bei PostgreSQL sucht der integrierte Sicherungsauftrag `pg_dump` und `pg_restore` im `PATH` des Dienstes. Wenn sie an einem anderen Ort installiert sind, fügen Sie `Environment="DVLS_PG_DUMP_PATH=/path/to/pg_dump"` und `Environment="DVLS_PG_RESTORE_PATH=/path/to/pg_restore"` zum Abschnitt `[Service]` hinzu.
5. Starten Sie Devolutions Server und zeigen Sie seinen Status an:

   ```bash
   sudo systemctl start dvls
   sudo systemctl status dvls
   ```

### Auf Devolutions Server für Linux zugreifen <a href="#accessing-dvls-linux" id="accessing-dvls-linux"></a>

Devolutions Server für Linux lauscht auf dem Port des während der Installation festgelegten `HttpListenerUri`, auf der IP-Adresse oder dem Hostnamen des Installationssystems, zum Beispiel `http://MYHOST:5000`. Beim ersten Start können OAuth-Fehler auftreten, wenn auf Devolutions Server über eine URL zugegriffen wird, die nicht konfiguriert ist. Fügen Sie in diesem Fall weitere URIs hinzu, auf denen gelauscht werden soll, oder ändern Sie den primären URI, indem Sie das folgende Skript in PowerShell ausführen:

```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/')
```

Wenn Devolutions Server außerhalb des installierten Systems nicht erreichbar bleibt, stellen Sie sicher, dass die Firewall den Port zulässt, zum Beispiel mit Uncomplicated Firewall: `sudo ufw allow 5000`.

### Devolutions Server-Verschlüsselungsschlüssel importieren <a href="#importing-devolutions-server-encryption-key" id="importing-devolutions-server-encryption-key"></a>

Wenn die Linux-Installation die Datenbank einer vorhandenen Windows-Installation verwendet, benötigt sie die Verschlüsselungsschlüssel dieser Installation.

**Export aus einer bestehenden Windows-Installation**

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

**Import in die neue Linux-Installation**

```powershell
Import-Module -Name 'Devolutions.PowerShell'
$DVLSPath = '/opt/devolutions/dvls'
$keysToImport = '/path/to/encryption.config'
Import-DPSEncryptionKeys -ApplicationPath $DVLSPath -Filename $keysToImport
```

Wenn die Schlüssel mit `-Password` exportiert wurden, fügen Sie dasselbe `-Password` zu `Import-DPSEncryptionKeys` hinzu.

### Devolutions Server für Linux aktualisieren <a href="#updating-devolutions-server-for-linux" id="updating-devolutions-server-for-linux"></a>

Extrahieren Sie das neue Archiv `.tar.gz` nicht direkt über `/opt/devolutions/dvls`. Dadurch wird `appsettings.json` ersetzt, das die Verbindungszeichenfolgen und die Kestrel-Einstellungen enthält, und die Dateien der vorherigen Version bleiben liegen, sodass der Dienst nicht starten kann. Folgen Sie immer der auf dieser Seite beschriebenen Updatemethode.

#### Datenbank sichern

Sichern Sie die Datenbank vor dem Update.

Führen Sie bei SQL Server `sqlcmd` aus dem Paket `mssql-tools18` aus, unter Linux oder gegen einen entfernten SQL Server:

```bash
/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;"
```

Der vollständige Pfad zu `sqlcmd` vermeidet den Fehler „command not found“ in Shells, die keine Anmeldeshells sind und in denen `/etc/profile.d/mssql-tools.sh` nicht geladen wurde. `-C` vertraut dem Serverzertifikat, was für lokale SQL Server-Installationen mit einem selbstsignierten Zertifikat erforderlich ist. Das Sicherungsverzeichnis muss für den Benutzer `mssql` beschreibbar sein: `/var/opt/mssql/data/` funktioniert ohne weitere Einrichtung. Stellen Sie sicher, dass die Datei `.bak` vorhanden und nicht leer ist, bevor Sie fortfahren.

Führen Sie bei PostgreSQL `pg_dump` mit der Datenbankrolle aus und prüfen Sie das Archiv anschließend mit `pg_restore --list`:

```bash
sudo mkdir -p /var/backups/dvls
sudo chown $(id -un) /var/backups/dvls
BACKUP_FILE=/var/backups/dvls/dvls-$(date +%F-%H%M).backup
pg_dump --format=custom --host=<PGHOST> --port=5432 --username=dvls_owner --dbname=dvls --file=$BACKUP_FILE
pg_restore --list $BACKUP_FILE > /dev/null && echo "Backup is valid: $BACKUP_FILE"
```

`pg_dump` fragt nach dem Passwort der Rolle. Das Archiv enthält nur die Datenbank: Sichern Sie die Verschlüsselungsschlüssel separat, da eine Datenbanksicherung ohne sie nicht verwendet werden kann.

#### Installation aktualisieren

1. Beenden Sie den Devolutions Server-Dienst:

   ```bash
   sudo systemctl stop dvls.service
   sudo systemctl status dvls.service   # confirm inactive (dead)
   ```
2. Sichern Sie die Installations- und Konfigurationsdateien. `/opt/devolutions/dvls` ist im Modus 550 und gehört `dvls:dvls`, daher müssen die Sicherungs-Cmdlets als root ausgeführt werden. Starten Sie PowerShell mit `sudo pwsh`, führen Sie dieses Skript aus und lassen Sie die Sitzung für den Rest des Updates geöffnet:

   ```powershell
   Import-Module -Name 'Devolutions.PowerShell'
   $DVLSPath      = '/opt/devolutions/dvls'
   $BackupBase    = "/var/backups/dvls/$(Get-Date -Format 'yyyy-MM-dd-HHmm')"
   $BackupConfig  = Join-Path -Path $BackupBase -ChildPath 'config'
   $BackupInstall = Join-Path -Path $BackupBase -ChildPath 'installation'
   New-Item -ItemType Directory -Path $BackupConfig, $BackupInstall -Force | Out-Null
   Backup-DPSConfigurationFiles -ApplicationPath $DVLSPath -BackupConfigurationPath $BackupConfig
   Backup-DPSInstallationFiles  -ApplicationPath $DVLSPath -BackupPath $BackupInstall
   ```

   `Backup-DPSConfigurationFiles` kopiert `App_Data/encryption.config`, `appsettings.json` und `web.config`, wenn die Datei vorhanden ist, und schlägt fehl, wenn `encryption.config` fehlt. `Backup-DPSInstallationFiles` kopiert das gesamte Installationsverzeichnis und erfordert ein leeres Zielverzeichnis.
3. Laden Sie die neue Version herunter, leeren Sie das Installationsverzeichnis mit Ausnahme von `App_Data`, das `encryption.config` und den Laufzeitzustand enthält, und extrahieren Sie dann die neue Version:

   ```powershell
   $DVLSDownloadPath = '/tmp/dvls-linux-x64.tar.gz'
   Get-DPSProduct -Name 'DPSLinuxX64bin' -Destination $DVLSDownloadPath
   Get-ChildItem -Path $DVLSPath -Force | Where-Object { $_.Name -ne 'App_Data' } | Remove-Item -Recurse -Force
   & tar -xzf $DVLSDownloadPath -C $DVLSPath --strip-components=1
   Remove-Item -Path $DVLSDownloadPath
   ```
4. Stellen Sie die benutzerdefinierten Ordner und die Konfiguration wieder her:

   ```powershell
   Restore-DPSCustomFolders          -BackupPath $BackupInstall -ApplicationPath $DVLSPath
   Restore-DPSAnomalyDetectionFolder -BackupPath $BackupInstall -ApplicationPath $DVLSPath
   Restore-DPSConfigurationFiles     -BackupConfigurationPath $BackupConfig -ApplicationPath $DVLSPath
   ```

   `Restore-DPSConfigurationFiles` führt die gespeicherte `appsettings.json`, einschließlich der Verbindungszeichenfolgen, mit der `appsettings.json` der neuen Version zusammen und kopiert die gespeicherte `encryption.config` nach `App_Data`.
5. Aktualisieren Sie das Datenbankschema mit der Verbindungszeichenfolge der wiederhergestellten `appsettings.json`:

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

   `Update-DPSDatabase` funktioniert mit SQL Server- und PostgreSQL-Verbindungszeichenfolgen. Bei Erfolg gibt es keine Ausgabe aus und bei einem Fehler die Warnung `Update failed.`.
6. Wenden Sie Besitzrechte und Berechtigungen erneut an:

   ```powershell
   & chown -R dvls:dvls $DVLSPath
   & chmod -R o-rwx $DVLSPath
   & chmod 550 $DVLSPath
   & chmod 660 (Join-Path -Path $DVLSPath -ChildPath 'appsettings.json')
   & chmod 770 (Join-Path -Path $DVLSPath -ChildPath 'App_Data')
   # If a certs directory is in use:
   if (Test-Path -Path (Join-Path -Path $DVLSPath -ChildPath 'certs')) { & chmod 750 (Join-Path -Path $DVLSPath -ChildPath 'certs') }
   ```
7. Starten Sie den Dienst und stellen Sie sicher, dass er ordnungsgemäß funktioniert:

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

   Das Journal zeigt Einträge ***Migration done with status Done*** und keine Zeilen `[ERR]`, wenn das Update erfolgreich war.

#### Fehlerbehebung <a href="#troubleshooting" id="troubleshooting"></a>

* **Der Dienst startet nicht, `appsettings.json` fehlt oder ist leer:** Kopieren Sie `$BackupConfig/appsettings.json` nach `/opt/devolutions/dvls`, wenden Sie Besitzer und Berechtigungen erneut an und starten Sie dann den Dienst.
* **Die Anmeldung funktioniert, aber Einträge lassen sich nicht entschlüsseln:** `encryption.config` wurde nicht wiederhergestellt. Kopieren Sie `$BackupConfig/encryption.config` nach `/opt/devolutions/dvls/App_Data/`, setzen Sie Besitzer und Modus mit `chown dvls:dvls` und `chmod 660` und starten Sie den Dienst neu.
* **Datenbankschemafehler zur Laufzeit:** `Update-DPSDatabase` wurde übersprungen oder ist fehlgeschlagen. Führen Sie `Update-DPSDatabase` erneut mit der Verbindungszeichenfolge von `appsettings.json` aus.
* **Vollständiges Zurücksetzen:** Beenden Sie den Dienst, leeren Sie `/opt/devolutions/dvls` mit Ausnahme von `App_Data`, kopieren Sie den Inhalt von `$BackupInstall` zurück nach `/opt/devolutions/dvls`, wenden Sie Besitzer und Berechtigungen erneut an, stellen Sie die Datenbank aus der vor dem Update erstellten Sicherung wieder her und starten Sie dann den Dienst. Stellen Sie bei SQL Server die Datei `.bak` mit `sqlcmd` und `RESTORE DATABASE [DSERVER] FROM DISK = N'<backup file>' WITH REPLACE;` wieder her. Stellen Sie bei PostgreSQL das Archiv mit `pg_restore --clean --if-exists --single-transaction --host=<PGHOST> --username=dvls_owner --dbname=dvls <backup file>` wieder her. Wenn sich die Rollen des Zielservers von denen der Quelle unterscheiden, fügen Sie `--no-owner --role=dvls_owner` hinzu.

### Wartung der PostgreSQL-Datenbank <a href="#postgresql-database-maintenance" id="postgresql-database-maintenance"></a>

Une base de données PostgreSQL utilisée par Devolutions Server nécessite la maintenance suivante :

* **Autovacuum :** laissez autovacuum activé, ce qui est la valeur par défaut de PostgreSQL.
* **Statistiques :** exécutez `ANALYZE;` dans la base de données de Devolutions Server une fois après l'installation et après les importations volumineuses, par exemple `psql --host=<PGHOST> --username=dvls_owner --dbname=dvls -c "ANALYZE;"`.
* **Index :** PostgreSQL n'a pas besoin des tâches de reconstruction et de réorganisation d'index utilisées avec SQL Server. Si le gonflement des index s'accumule avec le temps, exécutez `REINDEX CONCURRENTLY` sur l'index concerné.
* **Planification :** PostgreSQL n'a pas d'équivalent de SQL Server Agent. Planifiez les tâches de maintenance personnalisées avec cron.
* **Requêtes :** les identifiants du schéma de Devolutions Server sont en minuscules dans PostgreSQL. Dans `psql`, interrogez `dbo.connections`, et non `dbo.Connections`.

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

Arrêtez et supprimez le service, le répertoire d'installation et l'utilisateur et le groupe ***dvls*** en exécutant ce script dans PowerShell, adapté au système :

```powershell
& sudo systemctl stop dvls.service
& sudo systemctl disable dvls.service
& sudo rm /etc/systemd/system/dvls.service
& sudo systemctl daemon-reload
& sudo rm -rf /opt/devolutions/dvls
& sudo userdel -r dvls
& sudo groupdel dvls
```

Supprimez ensuite la base de données de Devolutions Server.

#### Löschen der SQL Server-Datenbank

Dieses PowerShell-Skript verwendet das [DbaTools-PowerShell-Modul](https://dbatools.io/), um die Datenbank zu löschen. Es setzt voraus, dass `localhost` die SQL Server-Installation und `DSERVER` der Datenbankname ist:

```powershell
Import-Module dbatools
$Credential = Get-Credential

Set-DbaToolsInsecureConnection

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

#### Löschen der PostgreSQL-Datenbank

Führen Sie `dropdb` mit der Rolle aus, der die Datenbank gehört, oder mit einer Administratorrolle:

```bash
dropdb --host=<PGHOST> --port=5432 --username=dvls_owner dvls
```

`DROP DATABASE dvls;` in `psql` führt zum selben Ergebnis, über eine Verbindung zu einer anderen Datenbank wie `postgres`. Um auch die Rolle zu löschen, führen Sie `DROP ROLE dvls_owner;` mit einer Administratorrolle aus.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/server/de/knowledge-base/how-to-articles/install-devolutions-server-for-linux.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
