#!/usr/bin/env bash # install.sh — nextcloud-collabora-nodered v1.0 # Kör på cloud (192.168.1.10): /home/ncdeploy/nextcloud-collabora-nodered set -euo pipefail VERSION="1.0.0" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" INSTALL_DIR="${INSTALL_DIR:-$SCRIPT_DIR}" COMPOSE="docker compose" CODE_CONTAINER="${CODE_CONTAINER:-code}" COLLABORA_IP="${COLLABORA_IP:-172.17.0.2}" log() { printf '[install] %s\n' "$*"; } die() { printf '[install] FEL: %s\n' "$*" >&2; exit 1; } require_cmd() { command -v "$1" >/dev/null 2>&1 || die "Saknar kommando: $1" } log "nextcloud-collabora-nodered v${VERSION}" log "Installationskatalog: ${INSTALL_DIR}" require_cmd docker if docker compose version >/dev/null 2>&1; then COMPOSE="docker compose" elif command -v docker-compose >/dev/null 2>&1; then COMPOSE="docker-compose" else die "Docker Compose saknas" fi cd "${INSTALL_DIR}" if [ ! -f docker-compose.yml ]; then die "docker-compose.yml saknas i ${INSTALL_DIR}" fi if [ ! -f .env ]; then log "Skapar .env från .env.example" cp .env.example .env fi # Valfri tarball från Windows if [ -n "${IMPORT_TARBALL:-}" ] && [ -f "${IMPORT_TARBALL}" ]; then log "Extraherar ${IMPORT_TARBALL}" tmpdir="$(mktemp -d)" tar -xzf "${IMPORT_TARBALL}" -C "${tmpdir}" src="$(find "${tmpdir}" -maxdepth 2 -name docker-compose.yml -printf '%h\n' | head -1)" [ -n "${src}" ] || die "Ogiltig tarball" rsync -a "${src}/" "${INSTALL_DIR}/" rm -rf "${tmpdir}" fi # Verifiera att CODE redan kör (starta INTE ny) if ! docker ps --format '{{.Names}}' | grep -qx "${CODE_CONTAINER}"; then die "CODE-container '${CODE_CONTAINER}' körs inte. Starta inte ny CODE — fixa befintlig instans först." fi code_ip="$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "${CODE_CONTAINER}" 2>/dev/null | head -1)" if [ -n "${code_ip}" ] && [ "${code_ip}" != "${COLLABORA_IP}" ]; then log "OBS: CODE IP är ${code_ip} (inte ${COLLABORA_IP}). Uppdatera COLLABORA_URL i .env om nödvändigt." if grep -q '^COLLABORA_URL=' .env; then sed -i "s|^COLLABORA_URL=.*|COLLABORA_URL=http://${code_ip}:9980|" .env fi fi log "Bygger och startar sidecar (port 1881, nätverk bridge + collab_default)..." if [ "${FORCE_REBUILD:-0}" = "1" ]; then ${COMPOSE} build --no-cache else ${COMPOSE} build fi ${COMPOSE} up -d log "Väntar på Node-RED..." for i in $(seq 1 30); do if curl -sf "http://127.0.0.1:1881" >/dev/null 2>&1; then log "Node-RED svarar på http://127.0.0.1:1881" break fi sleep 2 [ "$i" -eq 30 ] && log "Varning: Node-RED svarade inte inom 60 s" done log "Testar CODE capabilities från sidecar..." collab_url="$(grep '^COLLABORA_URL=' .env | cut -d= -f2- || echo "http://${COLLABORA_IP}:9980")" if docker exec nextcloud-collabora-nodered curl -sf "${collab_url}/hosting/capabilities" >/dev/null 2>&1; then log "OK: CODE nås på ${collab_url}" else log "VARNING: Kunde inte nå ${collab_url}/hosting/capabilities från sidecar." log " Kontrollera: docker network inspect bridge | grep -A2 code" log " Alternativ: docker network connect bridge nextcloud-collabora-nodered" fi cat </nextcloud-collabora-nodered.git git push -u origin main Orört: nextcloud-node-red :1880 (odds_network), odds-scraper, Gitea-databaslösen. EOF log "Klart."