Files
nextcloud-collabora-nodered/install.sh
T

110 lines
3.6 KiB
Bash

#!/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 <<EOF
Nästa steg:
1. Öppna http://192.168.1.10:1881
2. nc-collab-config: app-lösenord, collaboraUrl=${collab_url}
3. Kör acceptansflödet (capabilities → ncFileToPdf)
Git (Gitea): https://git.domain.name/
git remote add origin https://git.domain.name/<user>/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."