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

# Installér Devolutions Server til Linux

Installér Devolutions Server til Linux med Bash og PowerShell på en SQL Server- eller PostgreSQL-database, med TLS-opsætning, opdateringer og fjernelse via systemd.

Devolutions Server er tilgængelig til Linux med Microsoft Kestrel som den indbyggede webserver og Microsoft PowerShell 7 til installation fra kommandolinjen. Databasen kan være Microsoft SQL Server eller PostgreSQL. Dette emne viser, hvordan De installerer Devolutions Server til Linux manuelt ved hjælp af Bash-prompts og PowerShell-scripts, og hvordan De får adgang til den, opdaterer den og fjerner den.

Alternativt kan Devolutions Server installeres automatisk med de scripts, der findes i [Devolutions GitHub-lageret ScriptLibrary](https://github.com/Devolutions/ScriptLibrary/tree/main/DVLSForLinux).

### Installation af forudsætninger <a href="#installing-prerequisites" id="installing-prerequisites"></a>

Devolutions Server kræver en databaseserver. Installér den databasemotor, der skal bruges, med proceduren for SQL Server eller PostgreSQL, eller gå direkte til PowerShell-installationen, hvis databaseserveren allerede findes.

#### SQL Server

1. Hvis Microsoft SQL Server ikke allerede er installeret, skal De køre følgende Bash-prompt, hvor variablen `MSSQL_SA_PASSWORD` er ændret til en stærk adgangskode:

   ```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` er sat til ***evaluation*** i dette eksempel, men en produktnøgle kan angives her i stedet.

{% hint style="warning" %}
Microsoft understøtter kun [visse SQL-versioner](/server/da/overview-of-devolutions-server/system-requirements.md#software-dependencies). Se dokumentationen fra Microsoft for at sikre, at Deres version af SQL officielt understøttes til Deres distribution.
{% endhint %}

#### PostgreSQL

Devolutions Server understøtter PostgreSQL 14 eller nyere, installeret på en server eller leveret af en administreret PostgreSQL-tjeneste, der tildeler attributten `SUPERUSER`. Devolutions Server opretter forbindelse med én enkelt rolle ved hjælp af et brugernavn og en adgangskode: integreret godkendelse er ikke tilgængelig med PostgreSQL.

1. Hvis PostgreSQL ikke allerede er tilgængelig, skal De installere det på databaseserveren med denne Bash-prompt:

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

   Den PostgreSQL-version, distributionen leverer, afhænger af dens udgivelse. Kontrollér, at den installerede version er PostgreSQL 14 eller nyere.
2. Opret en dedikeret rolle, der ejer Devolutions Server-databasen, med attributten `SUPERUSER`, som kræves for at oprette databaseskemaet. Skift `YOURSTRONGPASSWORD` til en stærk adgangskode:

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

   Oprettelsen af skemaet ændrer PostgreSQL-typecasts, hvilket kun en superbruger kan gøre. Med en administreret PostgreSQL-tjeneste skal De oprette rollen og databasen med tjenestens administratorkonto. Efter installationen kræver rollen ikke attributten `SUPERUSER`: fjern den med `sudo -u postgres psql -c "ALTER ROLE dvls_owner NOSUPERUSER;"`.
3. På den maskine, der kører Devolutions Server, skal De installere PostgreSQL-klientværktøjerne. Det indbyggede job til sikkerhedskopiering af databasen i Devolutions Server kører `pg_dump` og `pg_restore`, og opdaterings- og fjernelsesprocedurerne på denne side bruger dem:

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

   Hovedversionen af `pg_dump` skal være lig med eller nyere end hovedversionen af PostgreSQL-serveren. Ellers mislykkes sikkerhedskopieringen. Når distributionspakken er ældre end serveren, skal De installere den matchende pakke `postgresql-client-<major version>` fra PostgreSQL APT-lageret.

#### PowerShell og modulet Devolutions.PowerShell

1. Kør denne Bash-prompt for at installere 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
   ```

   Kør denne prompt fra en mappe, hvor den aktuelle bruger kan skrive, fordi `wget` henter `.deb`-pakken til den aktuelle mappe.
2. Installér [PowerShell-modulet Devolutions.PowerShell](https://www.powershellgallery.com/packages/Devolutions.PowerShell/) for alle brugere (placering: `/opt/microsoft/powershell/7/Modules`). Installations- og opdateringsprocedurerne på denne side kører PowerShell som root, som kun finder moduler, der er installeret for alle brugere:

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

   Der vises sandsynligvis en advarsel om, at installationen kommer fra et lager, der ikke er tillid til. Modulet ligger på PowerShell Gallery, den officielle placering til PowerShell-moduler, som administreres af Microsoft. For at undgå denne advarsel fremover skal De køre `Set-PSRepository -Name PSGallery -InstallationPolicy Trusted`.
3. Opret en bruger og en gruppe til Devolutions Server. En separat bruger og gruppe er valgfri og isolerer Devolutions Server fra andre tjenester. Denne Bash-prompt opretter en bruger og en gruppe, der begge hedder ***dvls***, med installationsmappen sat til `/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
   ```

### Download og installation af Devolutions Server til Linux <a href="#downloading-and-installing-dvls-for-linux" id="downloading-and-installing-dvls-for-linux"></a>

Installationsmappen ejes af `dvls:dvls` i tilstand 550, så installationen kører som root. Start PowerShell med `sudo pwsh`, og kør alle PowerShell-scriptsene i dette afsnit i den session.

1. Hent den seneste version af Devolutions Server til Linux, og udpak filen `.tar.gz` til `/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. Generer et certifikat, hvis Devolutions Server skal svare via TLS, og der endnu ikke findes et certifikat. Erstat `MYHOST` med serverens værtsnavn:

   ```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` bruger `DNS:` i dette eksempel. For kun at svare på en IP-adresse skal De bruge `IP:` i stedet. Det genererede `.pfx`-certifikat har ikke en adgangskode.

#### Installationsparametre for SQL Server

Definér installationsparametrene i den samme PowerShell-session. Erstat `MYHOST`, `MYEMAIL`, `MSSQLHOST`, `DBUSERNAME` og `YOURSTRONGPASSWORD` med værdierne fra miljøet. `MSSQLHOST` er SQL Server-værten, `localhost`, når SQL Server kører på den samme maskine. For at svare via TLS skal De bruge `https` i `$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
}
```

#### Installationsparametre for PostgreSQL

Definér installationsparametrene i den samme PowerShell-session. Erstat `MYHOST`, `MYEMAIL`, `PGHOST` og `YOURSTRONGPASSWORD` med værdierne fra miljøet. `PGHOST` er PostgreSQL-værten, `localhost`, når PostgreSQL kører på den samme maskine. For at svare via TLS skal De bruge `https` i `$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` er som standard 5432, når den udelades. Brug et databasenavn med små bogstaver: installationen opretter databasen med navnet i anførselstegn, så navnet skelner mellem store og små bogstaver i PostgreSQL-kommandoer.

Når `DatabaseType` er sat til `PostgreSql`, ignorerer `New-DPSInstallConfiguration` SQL Server-parametrene `-IntegratedSecurity`, `-FailoverPartner`, `-RetryCount` og `-RetryInterval` og viser en advarsel, når de er angivet. `-UseEncryptedConnection` og `-TrustServerCertificate` gælder heller ikke: forbindelsesstrengen bruger `SSL Mode=Prefer`, som kun krypterer forbindelsen, når PostgreSQL-serveren tilbyder TLS. For at kræve kryptering skal De ændre `SSL Mode` til `Require` eller `VerifyFull` i forbindelsesstrengene i `appsettings.json` efter installationen og derefter genstarte Devolutions Server.

Forbindelsesstrengen bevarer PostgreSQL-nøgleordene (`Host=`, `Port=`, `Database=`, `Username=`, `Password=`), og det er sådan, Devolutions Server registrerer PostgreSQL-motoren. Den gemmes under `ConnectionStrings.LocalSqlServer` i `appsettings.json`, den samme nøgle som med SQL Server. Devolutions Server tilføjer `Search Path=dbo,public` og `Keep Alive=30`, når de ikke er angivet. Når De angiver `Search Path` manuelt, skal De beholde `dbo` i den, fordi alle tabellerne i Devolutions Server ligger i skemaet `dbo`.

#### Kørsel af installationen

1. Kør installationen af Devolutions Server med modulet Devolutions.PowerShell i den samme PowerShell-session:

   ```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` viser en advarsel og fortsætter, når databasen allerede findes, hvilket er tilfældet, når databasen blev oprettet på forhånd. `Update-DPSDatabase` opretter derefter skemaet.
2. Hvis et certifikat blev genereret, skal De ændre filen `appsettings.json`, så Kestrel kan svare via TLS:

   ```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. Anvend ejerskab og tilladelser igen for de filer, installationen oprettede, og luk derefter PowerShell-sessionen som 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. Opret en systemd-enhedsfil for at køre Devolutions Server til Linux i baggrunden, og aktivér den ved opstart, med denne 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` kører planlæggeren i Devolutions Server inde i tjenesten. Med PostgreSQL søger det indbyggede sikkerhedskopieringsjob efter `pg_dump` og `pg_restore` i tjenestens `PATH`. Hvis de er installeret et andet sted, skal De tilføje `Environment="DVLS_PG_DUMP_PATH=/path/to/pg_dump"` og `Environment="DVLS_PG_RESTORE_PATH=/path/to/pg_restore"` i afsnittet `[Service]`.
5. Start Devolutions Server, og vis dens status:

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

### Adgang til Devolutions Server til Linux <a href="#accessing-dvls-linux" id="accessing-dvls-linux"></a>

Devolutions Server til Linux lytter på porten i den `HttpListenerUri`, der blev angivet under installationen, på IP-adressen eller værtsnavnet for installationssystemet, for eksempel `http://MYHOST:5000`. Der kan opstå OAuth-fejl ved første start, når De åbner Devolutions Server fra en URL, der ikke er konfigureret. Hvis det er tilfældet, skal De tilføje flere URI'er at lytte på eller ændre den primære ved at køre følgende script i 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/')
```

Hvis Devolutions Server stadig ikke kan nås uden for det installerede system, skal De kontrollere, at firewallen tillader porten, for eksempel med Uncomplicated Firewall: `sudo ufw allow 5000`.

### Import af krypteringsnøgle til Devolutions Server <a href="#importing-devolutions-server-encryption-key" id="importing-devolutions-server-encryption-key"></a>

Når Linux-installationen bruger databasen fra en eksisterende Windows-installation, skal den bruge krypteringsnøglerne fra den installation.

**Eksport fra en eksisterende 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 til den nye Linux-installation**

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

Når nøglerne blev eksporteret med `-Password`, skal De tilføje den samme `-Password` til `Import-DPSEncryptionKeys`.

### Opdatering af Devolutions Server til Linux <a href="#updating-devolutions-server-for-linux" id="updating-devolutions-server-for-linux"></a>

Pak ikke det nye `.tar.gz`-arkiv ud direkte over `/opt/devolutions/dvls`. Det erstatter `appsettings.json`, som indeholder forbindelsesstrengene og Kestrel-indstillingerne, og lader filerne fra den forrige version blive liggende, så tjenesten ikke kan starte. Følg altid den opdateringsmetode, der er beskrevet på denne side.

#### Sikkerhedskopiering af databasen

Sikkerhedskopiér databasen før opdatering.

Med SQL Server skal De køre `sqlcmd` fra pakken `mssql-tools18`, på Linux eller mod en fjern 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;"
```

Den fulde sti til `sqlcmd` undgår fejlen "command not found" i skaller, der ikke er login-skaller, hvor `/etc/profile.d/mssql-tools.sh` ikke er blevet indlæst. `-C` stoler på servercertifikatet, hvilket kræves for lokale SQL Server-installationer, der bruger et selvsigneret certifikat. Sikkerhedskopimappen skal kunne skrives til af brugeren `mssql`: `/var/opt/mssql/data/` virker uden yderligere opsætning. Sørg for, at filen `.bak` findes og ikke er tom, før De fortsætter.

Med PostgreSQL skal De køre `pg_dump` med databaserollen og derefter validere arkivet med `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` beder om rollens adgangskode. Arkivet indeholder kun databasen: sikkerhedskopiér krypteringsnøglerne separat, fordi en databasesikkerhedskopi ikke kan bruges uden dem.

#### Opdatering af installationen

1. Stop tjenesten Devolutions Server:

   ```bash
   sudo systemctl stop dvls.service
   sudo systemctl status dvls.service   # confirm inactive (dead)
   ```
2. Sikkerhedskopiér installations- og konfigurationsfilerne. `/opt/devolutions/dvls` er i tilstand 550 og ejes af `dvls:dvls`, så cmdlets til sikkerhedskopiering skal køres som root. Start PowerShell med `sudo pwsh`, kør dette script, og hold sessionen åben under resten af opdateringen:

   ```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` kopierer `App_Data/encryption.config`, `appsettings.json` og `web.config`, når den findes, og mislykkes, hvis `encryption.config` mangler. `Backup-DPSInstallationFiles` kopierer hele installationsmappen og kræver en tom destinationsmappe.
3. Hent den nye version, tøm installationsmappen bortset fra `App_Data`, som indeholder `encryption.config` og kørselstilstanden, og udpak derefter den nye 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. Gendan de brugerdefinerede mapper og konfigurationen:

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

   `Restore-DPSConfigurationFiles` fletter den gemte `appsettings.json`, herunder forbindelsesstrengene, ind i `appsettings.json` for den nye version og kopierer den gemte `encryption.config` til `App_Data`.
5. Opdater databaseskemaet med forbindelsesstrengen fra den gendannede `appsettings.json`:

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

   `Update-DPSDatabase` fungerer med forbindelsesstrenge til både SQL Server og PostgreSQL. Den skriver ikke noget ved succes og viser advarslen `Update failed.` ved fejl.
6. Anvend ejerskab og tilladelser igen:

   ```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. Start tjenesten, og kontrollér, at den fungerer korrekt:

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

   Loggen viser poster af typen ***Migration done with status Done*** og ingen `[ERR]`-linjer, når opdateringen lykkedes.

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

* **Tjenesten starter ikke, `appsettings.json` mangler eller er tom:** kopiér `$BackupConfig/appsettings.json` til `/opt/devolutions/dvls`, anvend ejerskab og tilladelser igen, og start derefter tjenesten.
* **Login virker, men poster kan ikke dekrypteres:** `encryption.config` blev ikke gendannet. Kopiér `$BackupConfig/encryption.config` til `/opt/devolutions/dvls/App_Data/`, angiv ejer og tilstand med `chown dvls:dvls` og `chmod 660`, og genstart derefter tjenesten.
* **Fejl i databaseskemaet under kørsel:** `Update-DPSDatabase` blev sprunget over eller mislykkedes. Kør `Update-DPSDatabase` igen med forbindelsesstrengen fra `appsettings.json`.
* **Fuld tilbagerulning:** stop tjenesten, tøm `/opt/devolutions/dvls` bortset fra `App_Data`, kopiér indholdet af `$BackupInstall` tilbage til `/opt/devolutions/dvls`, anvend ejerskab og tilladelser igen, gendan databasen fra den sikkerhedskopi, der blev taget før opdateringen, og start derefter tjenesten. Med SQL Server skal De gendanne filen `.bak` med `sqlcmd` og `RESTORE DATABASE [DSERVER] FROM DISK = N'<backup file>' WITH REPLACE;`. Med PostgreSQL skal De gendanne arkivet med `pg_restore --clean --if-exists --single-transaction --host=<PGHOST> --username=dvls_owner --dbname=dvls <backup file>`. Hvis rollerne på destinationsserveren afviger fra kilden, skal De tilføje `--no-owner --role=dvls_owner`.

### Vedligeholdelse af PostgreSQL-databasen <a href="#postgresql-database-maintenance" id="postgresql-database-maintenance"></a>

En PostgreSQL-database, der bruges af Devolutions Server, kræver følgende vedligeholdelse:

* **Autovacuum:** behold autovacuum aktiveret, hvilket er PostgreSQL-standarden.
* **Statistik:** kør `ANALYZE;` i Devolutions Server-databasen én gang efter installationen og efter store importer, for eksempel `psql --host=<PGHOST> --username=dvls_owner --dbname=dvls -c "ANALYZE;"`.
* **Indekser:** PostgreSQL behøver ikke de job til genopbygning og reorganisering af indekser, der bruges med SQL Server. Hvis indeksbloat ophobes over tid, skal De køre `REINDEX CONCURRENTLY` på det berørte indeks.
* **Planlægning:** PostgreSQL har ikke noget, der svarer til SQL Server Agent. Planlæg brugerdefinerede vedligeholdelsesopgaver med cron.
* **Forespørgsler:** identifikatorerne i Devolutions Server-skemaet er med små bogstaver i PostgreSQL. I `psql` skal De forespørge på `dbo.connections`, ikke `dbo.Connections`.

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

Stop og fjern tjenesten, installationsmappen samt brugeren og gruppen ***dvls*** ved at køre dette script i PowerShell, tilpasset systemet:

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

Slet derefter Devolutions Server-databasen.

#### Sletning af SQL Server-databasen

Dette PowerShell-script bruger [PowerShell-modulet DbaTools](https://dbatools.io/) til at slette databasen. Det antager, at `localhost` er SQL Server-installationen, og at `DSERVER` er databasenavnet:

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

Set-DbaToolsInsecureConnection

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

#### Sletning af PostgreSQL-databasen

Kør `dropdb` med den rolle, der ejer databasen, eller med en administratorrolle:

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

`DROP DATABASE dvls;` i `psql` giver det samme resultat fra en forbindelse til en anden database som `postgres`. For også at slette rollen skal De køre `DROP ROLE dvls_owner;` med en administratorrolle.


---

# 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/da/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.
