diff --git a/development-system/README.md b/development-system/README.md index fd418ef..d2632b7 100644 --- a/development-system/README.md +++ b/development-system/README.md @@ -94,6 +94,17 @@ Contao maskiert nicht freigegebene HTML-Tags auch im Inhaltselement **HTML**. Vo Danach den Contao-Cache über **Systemwartung** leeren und das Inhaltselement erneut speichern. Keine globale Freigabe mit `*` verwenden. Wer ein HTML-Inhaltselement bearbeiten darf, kann mit dem freigegebenen `script`-Tag JavaScript auf der Website ausführen; diese Bearbeitungsrechte müssen daher auf vertrauenswürdige Backend-Nutzer beschränkt bleiben. Die Beispieltermine stehen ausschließlich in `public/booking/booking.js`. Der spätere serverseitige Endpunkt muss sie ersetzen; Datenbankzugänge oder SQL gehören niemals in das HTML oder das Browser-JavaScript. +## Statische Perspektivwerk-Seite übertragen + +Das Skript [scripts/Deploy-Perspektivwerk.ps1](scripts/Deploy-Perspektivwerk.ps1) überträgt ausschließlich den Inhalt von `public/perspektivwerk/` per SCP und korrigiert anschließend die Lesbarkeit auf dem Server per SSH. Dieser Ordner enthält auch `js/booking.js` und `js/booking.css`. Es lädt weder Contao noch die Datenbank oder andere Projektdateien hoch. + +```powershell +.\scripts\Deploy-Perspektivwerk.ps1 +``` + +Der Hostname `boogie` wird aus der lokalen SSH-Konfiguration verwendet. Der vollständige Inhalt wird per SCP-Aufruf nach `/home/boogie/html/perspektivwerk/` übertragen. Anschließend führt ein separater SSH-Aufruf `chmod -R a+rX /home/boogie/html/perspektivwerk` aus. Die Passphrase des SSH-Schlüssels wird daher in der Regel zweimal abgefragt. + +Vor dem Upload gibt das Skript den vollständigen Zielpfad aus. Damit lässt sich direkt prüfen, ob `booking.js` unter `/home/boogie/html/perspektivwerk/js/booking.js` landet. Das große `X` in `a+rX` setzt das Ausführungsrecht nur auf Verzeichnissen und auf bereits ausführbaren Dateien; normale HTML-, CSS- und JavaScript-Dateien erhalten kein unnötiges Ausführungsbit. ## Versionierter Contao-Seitenzustand diff --git a/development-system/scripts/Deploy-Perspektivwerk.ps1 b/development-system/scripts/Deploy-Perspektivwerk.ps1 new file mode 100644 index 0000000..c6dc508 --- /dev/null +++ b/development-system/scripts/Deploy-Perspektivwerk.ps1 @@ -0,0 +1,45 @@ +[CmdletBinding()] +param() + +$ErrorActionPreference = 'Stop' +$projectRoot = Split-Path -Parent $PSScriptRoot +$perspektivwerkSource = Join-Path $projectRoot 'public/perspektivwerk' +$remoteTarget = 'boogie:/home/boogie/html/perspektivwerk/' + +if (-not (Test-Path -LiteralPath $perspektivwerkSource -PathType Container)) { + throw "Der zu übertragende Ordner '$perspektivwerkSource' wurde nicht gefunden." +} + +$sourceItems = @(Get-ChildItem -LiteralPath $perspektivwerkSource -Force) +if ($sourceItems.Count -eq 0) { + throw "Der zu übertragende Ordner '$perspektivwerkSource' enthält keine Dateien." +} + +if (-not (Get-Command scp -ErrorAction SilentlyContinue)) { + throw 'OpenSSH scp wurde nicht gefunden. Installiere den OpenSSH-Client oder füge ihn zum PATH hinzu.' +} + +if (-not (Get-Command ssh -ErrorAction SilentlyContinue)) { + throw 'OpenSSH ssh wurde nicht gefunden. Installiere den OpenSSH-Client oder füge ihn zum PATH hinzu.' +} + +Write-Host 'Zielverzeichnisse auf dem Server:' +Write-Host " $perspektivwerkSource\* -> $remoteTarget" + +Write-Host "Übertrage ausschließlich die statische Perspektivwerk-Seite nach $remoteTarget" +Write-Host 'SCP-Upload und anschließende Rechtekorrektur benötigen jeweils eine SSH-Verbindung.' + +& scp -r @sourceItems $remoteTarget + +if ($LASTEXITCODE -ne 0) { + throw "Der Upload nach '$remoteTarget' ist fehlgeschlagen (scp Exit-Code $LASTEXITCODE)." +} + +Write-Host 'Setze Lese- und Durchsuchrechte auf dem hochgeladenen Ordner.' +& ssh boogie 'chmod -R a+rX /home/boogie/html/perspektivwerk' + +if ($LASTEXITCODE -ne 0) { + throw "Der Upload war erfolgreich, aber die Rechtekorrektur ist fehlgeschlagen (ssh Exit-Code $LASTEXITCODE)." +} + +Write-Host 'Upload und Rechtekorrektur abgeschlossen: /home/boogie/html/perspektivwerk/ (inklusive js/booking.js).'