2026-08-22 14:56:38 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
# install.sh — nextcloud-collabora-nodered v1.0
|
2026-08-22 14:59:25 +02:00
|
|
|
# Kör på cloud (192.168.1.26): /home/ncadmin/nextcloud-collabora-nodered
|
2026-08-22 14:56:38 +02:00
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
VERSION="1.0.0"
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
|
INSTALL_DIR="${INSTALL_DIR:-$SCRIPT_DIR}"
|
|
|
|
|
COMPOSE="docker compose"
|
2026-08-22 14:59:25 +02:00
|
|
|
CODE_CONTAINER="${CODE_CONTAINER:-code}"
|
|
|
|
|
COLLABORA_IP="${COLLABORA_IP:-172.17.0.2}"
|
2026-08-22 14:56:38 +02:00
|
|
|
|
|
|
|
|
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
|
2026-08-22 14:59:25 +02:00
|
|
|
die "Docker Compose saknas"
|
2026-08-22 14:56:38 +02:00
|
|
|
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
|
|
|
|
|
|
2026-08-22 14:59:25 +02:00
|
|
|
# Valfri tarball från Windows
|
2026-08-22 14:56:38 +02:00
|
|
|
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)"
|
2026-08-22 14:59:25 +02:00
|
|
|
[ -n "${src}" ] || die "Ogiltig tarball"
|
2026-08-22 14:56:38 +02:00
|
|
|
rsync -a "${src}/" "${INSTALL_DIR}/"
|
|
|
|
|
rm -rf "${tmpdir}"
|
|
|
|
|
fi
|
|
|
|
|
|
2026-08-22 14:59:25 +02:00
|
|
|
# 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
|
2026-08-22 14:56:38 +02:00
|
|
|
${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
|
2026-08-22 14:59:25 +02:00
|
|
|
[ "$i" -eq 30 ] && log "Varning: Node-RED svarade inte inom 60 s"
|
2026-08-22 14:56:38 +02:00
|
|
|
done
|
|
|
|
|
|
2026-08-22 14:59:25 +02:00
|
|
|
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
|
2026-08-22 14:56:38 +02:00
|
|
|
|
|
|
|
|
Nästa steg:
|
2026-08-22 14:59:25 +02:00
|
|
|
1. Öppna http://192.168.1.26:1881
|
|
|
|
|
2. nc-collab-config: app-lösenord, collaboraUrl=${collab_url}
|
|
|
|
|
3. Kör acceptansflödet (capabilities → ncFileToPdf)
|
2026-08-22 14:56:38 +02:00
|
|
|
|
2026-08-22 14:59:25 +02:00
|
|
|
Git (Gitea): https://kode.hannesahlin.se/
|
|
|
|
|
git remote add origin https://kode.hannesahlin.se/<user>/nextcloud-collabora-nodered.git
|
|
|
|
|
git push -u origin main
|
2026-08-22 14:56:38 +02:00
|
|
|
|
2026-08-22 14:59:25 +02:00
|
|
|
Orört: nextcloud-node-red :1880 (odds_network), odds-scraper, Gitea-databaslösen.
|
2026-08-22 14:56:38 +02:00
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
log "Klart."
|