#!/usr/bin/env bash # bootstrap-install.sh — klona från Gitea och integrera i befintlig nextcloud-node-red # # Skapar INTE ny Node-RED-container. Patchar /home/ncdeploy/nextcloud-node-red och bygger om. # # One-liner: # curl -fsSL https://git.domain.name/your-user/nextcloud-collabora-nodered/raw/branch/main/bootstrap-install.sh | bash # # Som ncdeploy (rekommenderat): # curl -fsSL ... | sudo -u ncdeploy bash # set -euo pipefail VERSION="1.0.0" GIT_REPO_URL="${GIT_REPO_URL:-https://git.domain.name/your-user/nextcloud-collabora-nodered.git}" GIT_BRANCH="${GIT_BRANCH:-main}" INSTALL_MODE="${INSTALL_MODE:-integrate}" # Som root: använd ncdeploy-sökvägar (inte /root) if [ "$(id -u)" -eq 0 ] && [ -d "/home/ncdeploy" ]; then INSTALL_DIR="${INSTALL_DIR:-/home/ncdeploy/nextcloud-collabora-nodered}" NODERED_DIR="${NODERED_DIR:-/home/ncdeploy/nextcloud-node-red}" else INSTALL_DIR="${INSTALL_DIR:-${HOME}/nextcloud-collabora-nodered}" NODERED_DIR="${NODERED_DIR:-${HOME}/nextcloud-node-red}" fi NC_HOST="${NC_HOST:-cloud.domain.name}" CODE_CONTAINER="${CODE_CONTAINER:-code}" NODERED_CONTAINER="${NODERED_CONTAINER:-nextcloud-node-red}" NODERED_PORT="${NODERED_PORT:-1880}" SKIP_APT="${SKIP_APT:-0}" SKIP_DOCKER_INSTALL="${SKIP_DOCKER_INSTALL:-1}" log() { printf '[bootstrap] %s\n' "$*"; } warn() { printf '[bootstrap] VARNING: %s\n' "$*" >&2; } die() { printf '[bootstrap] FEL: %s\n' "$*" >&2; exit 1; } run_as_root() { if [ "$(id -u)" -eq 0 ]; then "$@"; elif command -v sudo >/dev/null 2>&1; then sudo "$@"; else die "sudo krävs"; fi } install_apt_packages() { [ "${SKIP_APT}" = "1" ] && return 0 command -v apt-get >/dev/null 2>&1 || return 0 log "Installerar git, curl, rsync..." run_as_root apt-get update -qq run_as_root apt-get install -y -qq git curl ca-certificates rsync } install_docker() { [ "${SKIP_DOCKER_INSTALL}" = "1" ] && return 0 command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1 && return 0 log "Installerar Docker..." curl -fsSL https://get.docker.com | run_as_root sh } clone_or_update_repo() { if [ -d "${INSTALL_DIR}/.git" ]; then log "Uppdaterar ${INSTALL_DIR}..." git -C "${INSTALL_DIR}" fetch origin git -C "${INSTALL_DIR}" checkout "${GIT_BRANCH}" git -C "${INSTALL_DIR}" pull --ff-only origin "${GIT_BRANCH}" || warn "git pull misslyckades" return 0 fi log "Klonar ${GIT_REPO_URL} → ${INSTALL_DIR}" mkdir -p "$(dirname "${INSTALL_DIR}")" git clone --branch "${GIT_BRANCH}" --depth 1 "${GIT_REPO_URL}" "${INSTALL_DIR}" if [ "$(id -u)" -eq 0 ] && [ -d "/home/ncdeploy" ]; then chown -R ncdeploy:ncdeploy "${INSTALL_DIR}" 2>/dev/null || true fi } preflight() { command -v docker >/dev/null 2>&1 || die "Docker saknas" docker ps --format '{{.Names}}' | grep -qx "${NODERED_CONTAINER}" \ || die "'${NODERED_CONTAINER}' körs inte — detta skript integrerar i befintlig Node-RED, skapar ingen ny" docker ps --format '{{.Names}}' | grep -qx "${CODE_CONTAINER}" \ || die "'${CODE_CONTAINER}' (Collabora) körs inte" [ -d "${NODERED_DIR}" ] || die "nextcloud-node-red-katalog saknas: ${NODERED_DIR}" log "OK: ${NODERED_CONTAINER} + ${CODE_CONTAINER} körs" } main() { log "bootstrap v${VERSION} — läge: ${INSTALL_MODE} (befintlig Node-RED :${NODERED_PORT})" log "Repo → ${INSTALL_DIR}" log "Integrera → ${NODERED_DIR}" if [ "$(id -u)" -eq 0 ] && [ -z "${SUDO_USER:-}" ]; then warn "Körs som root — rekommenderat: curl ... | sudo -u ncdeploy bash" fi install_apt_packages install_docker clone_or_update_repo preflight chmod +x "${INSTALL_DIR}/install.sh" "${INSTALL_DIR}/scripts/integrate-into-nodered.sh" INSTALL_DIR="${INSTALL_DIR}" \ INSTALL_MODE="${INSTALL_MODE}" \ NODERED_DIR="${NODERED_DIR}" \ CODE_CONTAINER="${CODE_CONTAINER}" \ bash "${INSTALL_DIR}/install.sh" local host_ip host_ip="$(hostname -I 2>/dev/null | awk '{print $1}' || echo "127.0.0.1")" cat <