diff --git a/README.md b/README.md index a886677..750d107 100644 --- a/README.md +++ b/README.md @@ -25,15 +25,10 @@ Eine optionale Sammlung mit sechs Beispielen liegt in `beispiel-prompts.json` un /mnt/user/appdata/CasaDePrompt/ ├── bootstrap/ │ └── Startpunkt.sh -├── ssh/ -│ ├── athena_key -│ └── known_hosts └── data/ # wird dauerhaft gespeichert ``` -`Startpunkt.sh` aus diesem Repository nach `bootstrap/` kopieren. Den SSH-Key `athena_key` und eine **bereits geprüfte** `known_hosts` mit dem Eintrag für `[192.168.1.2]:33` nach `ssh/` kopieren. Auf dem Entwicklungsrechner ist dieser Host bereits bekannt. Private Schlüssel niemals ins Repository committen. Für den dauerhaften Betrieb reicht ein eigener, nur lesender Deploy-Key für dieses Repository; er kann unter dem gleichen Dateinamen gemountet werden. - -Die SSH-Dateien sollten nur root zugänglich sein (`chmod 700 ssh`, `chmod 600 ssh/athena_key ssh/known_hosts`). Das Skript prüft den Hostschlüssel strikt; es akzeptiert keine fremden Schlüssel automatisch. Passwortgeschützte Keys benötigen einen Agent und werden von diesem einfachen Bootstrap nicht unterstützt. +`Startpunkt.sh` aus diesem Repository nach `bootstrap/` kopieren. Der Download erfolgt ausschließlich über HTTPS aus dem öffentlich lesbaren Repository. Keine SSH-Keys oder anderen Git-Zugangsdaten mounten oder kopieren. ### 2. Unraid-Vorlage einspielen @@ -52,12 +47,12 @@ Vorbelegt sind: | Image | `python:3.13-alpine` | | Netzwerk | `bridge` (normales Unraid-Netz über Portfreigabe) | | Web-Port | Host `8765` → Container `8000` | -| Repository | `ssh://git@192.168.1.2:33/michael/CasaDePrompt.git` | +| Repository | `https://git.casaderoll.de/michael/CasaDePrompt.git` | | Branch | `main` | | Startbefehl / Post Arguments | `/bin/sh /bootstrap/Startpunkt.sh` | | App-Benutzer | `99:100` | -Beim Start installiert das Skript Git/SSH und Python-Pakete, lädt den gewählten Branch bzw. Tag und startet die Anwendung ohne root-Rechte. Dafür benötigt es Zugriff auf dein Git, Alpine-Paketserver und PyPI. Ein Neustart lädt den aktuellen Stand erneut. Bei Download-/Installationsfehlern stoppt es mit einer Meldung, statt eine halb installierte App zu starten. Für reproduzierbare Updates einen Release-Tag in `APP_REF` verwenden. +Beim Start installiert das Skript Git und Python-Pakete, lädt den gewählten Branch bzw. Tag und startet die Anwendung ohne root-Rechte. Dafür benötigt es Zugriff auf dein Git, Alpine-Paketserver und PyPI. Ein Neustart lädt den aktuellen Stand erneut. Bei Download-/Installationsfehlern stoppt es mit einer Meldung, statt eine halb installierte App zu starten. Für reproduzierbare Updates einen Release-Tag in `APP_REF` verwenden. ### 3. Anmelden diff --git a/Startpunkt.sh b/Startpunkt.sh index 6151baa..6a0a327 100755 --- a/Startpunkt.sh +++ b/Startpunkt.sh @@ -2,33 +2,26 @@ set -eu umask 077 export DATA_DIR="${DATA_DIR:-/data}" -REPO_URL="${REPO_URL:-ssh://git@192.168.1.2:33/michael/CasaDePrompt.git}" +REPO_URL="${REPO_URL:-https://git.casaderoll.de/michael/CasaDePrompt.git}" APP_REF="${APP_REF:-main}" PUID="${PUID:-99}" PGID="${PGID:-100}" case "$PUID:$PGID" in *[!0-9:]*|:*|*:) echo 'PUID/PGID müssen numerisch sein.' >&2; exit 1;; esac if [ "$(id -u)" = 0 ]; then - apk add --no-cache git openssh-client ca-certificates su-exec + apk add --no-cache git ca-certificates su-exec fi mkdir -p "$DATA_DIR" /opt/casadeprompt chmod 755 /opt/casadeprompt if [ -n "${APP_SOURCE:-}" ]; then APP_PATH="$APP_SOURCE" else + case "$REPO_URL" in https://*) ;; *) echo "REPO_URL muss HTTPS verwenden." >&2; exit 1;; esac case "$REPO_URL" in -*) echo 'Ungültige REPO_URL' >&2; exit 1;; esac case "$APP_REF" in -*) echo 'Ungültige APP_REF' >&2; exit 1;; esac - if [ -f /run/ssh/athena_key ]; then - mkdir -p /opt/casa-ssh - cp /run/ssh/athena_key /opt/casa-ssh/key - chmod 600 /opt/casa-ssh/key - [ -f /run/ssh/known_hosts ] || { echo 'Bitte verifizierte known_hosts nach /run/ssh/known_hosts mounten.' >&2; exit 1; } - export GIT_SSH_COMMAND='ssh -i /opt/casa-ssh/key -o IdentitiesOnly=yes -o BatchMode=yes -o StrictHostKeyChecking=yes -o UserKnownHostsFile=/run/ssh/known_hosts' - fi APP_PATH="$(mktemp -d /opt/casadeprompt/release.XXXXXX)" echo 'Lade CasaDePrompt aus dem Repository …' git clone --quiet --depth 1 --branch "$APP_REF" -- "$REPO_URL" "$APP_PATH" rm -rf "$APP_PATH/.git" - rm -f /opt/casa-ssh/key fi [ -f "$APP_PATH/requirements.txt" ] && [ -f "$APP_PATH/atelier/app.py" ] || { echo 'Repository muss die Anwendung im Hauptverzeichnis enthalten.' >&2; exit 1; } python -m venv /opt/casa-venv diff --git a/unraid/CasaDePrompt.xml b/unraid/CasaDePrompt.xml index d13c61d..808f76e 100644 --- a/unraid/CasaDePrompt.xml +++ b/unraid/CasaDePrompt.xml @@ -8,15 +8,14 @@ sh http://192.168.1.2:8765/static/icon.png http://[IP]:[PORT:8000]/ - Privates Prompt-Archiv mit SQLite, Versionierung, OpenAI-kompatibler KI-Anbindung und MCP. Startpunkt.sh, athena_key und verifizierte known_hosts vor dem Start auf dem NAS ablegen. Keine zusätzliche Datenbank erforderlich. + Privates Prompt-Archiv mit SQLite, Versionierung, OpenAI-kompatibler KI-Anbindung und MCP. Startpunkt.sh vor dem Start auf dem NAS ablegen. Keine zusätzliche Datenbank erforderlich. Productivity: --restart unless-stopped /bin/sh /bootstrap/Startpunkt.sh 8765 /mnt/user/appdata/CasaDePrompt/data /mnt/user/appdata/CasaDePrompt/bootstrap - /mnt/user/appdata/CasaDePrompt/ssh - ssh://git@192.168.1.2:33/michael/CasaDePrompt.git + https://git.casaderoll.de/michael/CasaDePrompt.git main 99 100