From 0cfa6a691b931ba71cc071e6bb37d1759ce30143 Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Tue, 19 May 2026 22:06:13 +0200 Subject: [PATCH] =?UTF-8?q?KI-AGENT:=20Erg=C3=A4nze=20Selfhost=20Curl=20In?= =?UTF-8?q?staller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +++ scripts/selfhost-install.sh | 185 ++++++++++++++++++++++++++++++++++++ scripts/selfhost-setup.sh | 10 +- 3 files changed, 208 insertions(+), 1 deletion(-) create mode 100755 scripts/selfhost-install.sh diff --git a/README.md b/README.md index 652ccaa..c68b4b8 100644 --- a/README.md +++ b/README.md @@ -138,6 +138,20 @@ Alternativ kannst du die Konfiguration geführt erzeugen lassen: bash scripts/selfhost-setup.sh ``` +Auf einem frischen Server kannst du den Checkout und die Konfiguration direkt per One-Liner vorbereiten: + +```bash +curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash +``` + +Der schnelle One-Liner mit direktem Stack-Start: + +```bash +curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash -s -- --simple --start +``` + +Der Installer prüft Basispakete, installiert Docker auf Wunsch über das offizielle Docker-Installationsscript, klont oder aktualisiert FEDEO nach `/opt/fedeo` und startet anschließend den geführten Setup-Assistenten. + Für den schnellen Standardpfad: ```bash diff --git a/scripts/selfhost-install.sh b/scripts/selfhost-install.sh new file mode 100755 index 0000000..736da36 --- /dev/null +++ b/scripts/selfhost-install.sh @@ -0,0 +1,185 @@ +#!/usr/bin/env bash +set -euo pipefail + +FEDEO_REPO_URL="${FEDEO_REPO_URL:-https://git.federspiel.tech/flfeders/FEDEO.git}" +FEDEO_REF="${FEDEO_REF:-dev}" +FEDEO_DIR="${FEDEO_DIR:-/opt/fedeo}" +SETUP_ARGS=("$@") +FEDEO_USE_SUDO_DOCKER="${FEDEO_USE_SUDO_DOCKER:-false}" + +SUDO="" +if [[ "$(id -u)" -ne 0 ]]; then + if command -v sudo >/dev/null 2>&1; then + SUDO="sudo" + else + echo "Dieses Script braucht Schreibrechte für $FEDEO_DIR oder sudo." >&2 + exit 1 + fi +fi + +usage() { + cat <<'USAGE' +FEDEO Selfhost Installer + +Typischer One-Liner: + curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash + +Mit Optionen für den Setup-Assistenten: + curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash -s -- --simple --start + curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash -s -- --advanced + +Umgebung: + FEDEO_DIR=/opt/fedeo + FEDEO_REPO_URL=https://git.federspiel.tech/flfeders/FEDEO.git + FEDEO_REF=dev +USAGE +} + +yes_no() { + local label="$1" + local default_value="${2:-j}" + local answer + + while true; do + read -r -p "$label [$default_value]: " answer + answer="${answer:-$default_value}" + case "$answer" in + y|Y|j|J|yes|Yes|ja|Ja) + return 0 + ;; + n|N|no|No|nein|Nein) + return 1 + ;; + *) + echo "Bitte ja oder nein eingeben." + ;; + esac + done +} + +have() { + command -v "$1" >/dev/null 2>&1 +} + +install_base_packages() { + local missing=() + for binary in git curl openssl; do + if ! have "$binary"; then + missing+=("$binary") + fi + done + + if [[ "${#missing[@]}" -eq 0 ]]; then + return + fi + + if ! have apt-get; then + echo "Fehlende Programme: ${missing[*]}" >&2 + echo "Bitte installiere sie manuell und starte den Installer erneut." >&2 + exit 1 + fi + + echo "Installiere Basispakete: ${missing[*]}" + $SUDO apt-get update + $SUDO apt-get install -y ca-certificates curl git openssl +} + +ensure_docker() { + if have docker && docker compose version >/dev/null 2>&1; then + FEDEO_USE_SUDO_DOCKER="false" + return + fi + + if [[ -n "$SUDO" ]] && have docker && $SUDO docker compose version >/dev/null 2>&1; then + FEDEO_USE_SUDO_DOCKER="true" + return + fi + + echo + echo "Docker Engine mit Compose Plugin wurde nicht gefunden." + if ! have curl; then + echo "curl fehlt, Docker kann nicht automatisch installiert werden." >&2 + exit 1 + fi + + if yes_no "Docker jetzt über das offizielle Docker-Installationsscript installieren?" "j"; then + curl -fsSL https://get.docker.com | $SUDO sh + else + echo "Bitte Docker Engine inkl. Compose Plugin installieren und den Installer erneut starten." >&2 + exit 1 + fi + + if docker compose version >/dev/null 2>&1; then + FEDEO_USE_SUDO_DOCKER="false" + return + fi + + if [[ -n "$SUDO" ]] && $SUDO docker compose version >/dev/null 2>&1; then + FEDEO_USE_SUDO_DOCKER="true" + return + fi + + if ! docker compose version >/dev/null 2>&1; then + echo "Docker Compose ist nach der Installation noch nicht verfügbar." >&2 + echo "Melde dich ggf. neu an oder prüfe die Docker-Installation." >&2 + exit 1 + fi +} + +prepare_checkout() { + echo + echo "Zielverzeichnis: $FEDEO_DIR" + echo "Repository: $FEDEO_REPO_URL" + echo "Version/Branch: $FEDEO_REF" + + if [[ -d "$FEDEO_DIR/.git" ]]; then + echo "Bestehenden FEDEO-Checkout aktualisieren..." + git -C "$FEDEO_DIR" fetch --prune origin + git -C "$FEDEO_DIR" checkout "$FEDEO_REF" + git -C "$FEDEO_DIR" pull --ff-only origin "$FEDEO_REF" + return + fi + + if [[ -e "$FEDEO_DIR" ]]; then + echo "$FEDEO_DIR existiert bereits, ist aber kein Git-Checkout." >&2 + echo "Bitte FEDEO_DIR auf ein leeres Ziel setzen oder das Verzeichnis prüfen." >&2 + exit 1 + fi + + $SUDO mkdir -p "$FEDEO_DIR" + if [[ -n "$SUDO" ]]; then + $SUDO chown "$(id -u):$(id -g)" "$FEDEO_DIR" + fi + + git clone --branch "$FEDEO_REF" "$FEDEO_REPO_URL" "$FEDEO_DIR" +} + +main() { + if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then + usage + exit 0 + fi + + cat <<'EOF' +FEDEO Selfhost Installer + +Dieser Installer bringt die typische Serverstruktur mit: + - prüft Basispakete + - installiert Docker optional automatisch + - klont oder aktualisiert FEDEO nach /opt/fedeo + - startet danach den geführten Selfhost-Assistenten + +EOF + + install_base_packages + ensure_docker + prepare_checkout + + echo + echo "Starte Selfhost-Assistent..." + cd "$FEDEO_DIR" + export FEDEO_USE_SUDO_DOCKER + exec bash scripts/selfhost-setup.sh "${SETUP_ARGS[@]}" +} + +main "$@" diff --git a/scripts/selfhost-setup.sh b/scripts/selfhost-setup.sh index eb672fa..62ab14d 100755 --- a/scripts/selfhost-setup.sh +++ b/scripts/selfhost-setup.sh @@ -10,6 +10,14 @@ MODE="" START_STACK="ask" FORCE="false" +compose() { + if [[ "${FEDEO_USE_SUDO_DOCKER:-false}" == "true" ]]; then + sudo docker compose "$@" + else + docker compose "$@" + fi +} + usage() { cat <<'USAGE' FEDEO Selfhost Setup @@ -458,7 +466,7 @@ main() { fi if [[ "$START_STACK" == "yes" ]]; then - docker compose -f "$COMPOSE_FILE" up -d + compose -f "$COMPOSE_FILE" up -d else echo echo "Start später mit:"