diff --git a/README.md b/README.md index f6c0e0a..cca5dfe 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ Collabora/Nextcloud Office-noder för **befintlig** `nextcloud-node-red` på por Skapar **ingen** ny Node-RED-container. +## Standard: integrate (inte sidecar) + +**INSTALL_MODE=integrate** (default) patchar och bygger om befintlig `nextcloud-node-red` på **:1880**. +Ingen ny container, ingen port 1881. Sidecar kräver uttryckligen `INSTALL_MODE=sidecar`. + ## Installation (cloud / valfri VM) ```bash diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 diff --git a/scripts/integrate-into-nodered.sh b/scripts/integrate-into-nodered.sh old mode 100644 new mode 100755 index c100555..23e6c88 --- a/scripts/integrate-into-nodered.sh +++ b/scripts/integrate-into-nodered.sh @@ -171,15 +171,45 @@ preflight() { fi } +assert_package_layout() { + local dest="$1" + local missing=0 + + if [ ! -f "${dest}/package.json" ]; then + warn "Saknas: ${dest}/package.json" + missing=1 + fi + if [ ! -d "${dest}/lib" ] || [ -z "$(ls -A "${dest}/lib" 2>/dev/null)" ]; then + warn "Saknas eller tom: ${dest}/lib/" + missing=1 + fi + if [ ! -d "${dest}/nodes" ] || [ -z "$(ls -A "${dest}/nodes" 2>/dev/null)" ]; then + warn "Saknas eller tom: ${dest}/nodes/" + missing=1 + fi + if [ "${missing}" -ne 0 ]; then + die "Paketlayout fel efter kopiering — förväntat package.json + lib/ + nodes/ under ${dest}" + fi +} + copy_node_package() { local dest="${NODERED_DIR}/nodes/nextcloud-collabora" - log "Kopierar noder → ${dest}" - mkdir -p "${dest}" - rsync -a --delete \ - "${PKG_SRC}/package.json" \ - "${PKG_SRC}/lib/" \ - "${PKG_SRC}/nodes/" \ - "${dest}/" + log "Kopierar paket → ${dest} (lib/ + nodes/, inte platt)" + + rm -rf "${dest}" + mkdir -p "${dest}/lib" "${dest}/nodes" + + cp -a "${PKG_SRC}/package.json" "${dest}/" + cp -a "${PKG_SRC}/lib/." "${dest}/lib/" + cp -a "${PKG_SRC}/nodes/." "${dest}/nodes/" + + if [ -d "${PKG_SRC}/locales" ] && [ -n "$(ls -A "${PKG_SRC}/locales" 2>/dev/null)" ]; then + mkdir -p "${dest}/locales" + cp -a "${PKG_SRC}/locales/." "${dest}/locales/" + fi + + assert_package_layout "${dest}" + log "Paketlayout OK: ${dest}/{package.json,lib/,nodes/}" } patch_dockerfile() { @@ -202,21 +232,30 @@ EOF patch_entrypoint() { local ep="${NODERED_DIR}/entrypoint.sh" - if grep -q "node-red-contrib-nextcloud-collabora" "${ep}"; then - log "entrypoint.sh redan patchad" + + # Rensa trasig tidigare patch (rå cp-rader utan install_nodes) + if grep -q 'cp -a /opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora' "${ep}"; then + log "Rensar trasig collabora-patch i entrypoint.sh" + sed -i '/cp -a \/opt\/nextcloud-nodes\/node-red-contrib-nextcloud-collabora/d' "${ep}" + fi + + if grep -q 'install_nodes.*Nextcloud Collabora' "${ep}"; then + log "entrypoint.sh redan patchad (Collabora install_nodes)" return 0 fi - log "Patchar entrypoint.sh" - # Infoga före sista exec/npm start om möjligt, annars append - if grep -q "node-red-contrib-nextcloud-ocs" "${ep}"; then - sed -i '/node-red-contrib-nextcloud-ocs/a\ -cp -a /opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora /data/node_modules/' "${ep}" + + log "Patchar entrypoint.sh (install_nodes för Collabora)" + if grep -q 'install_nodes.*Nextcloud OCS' "${ep}"; then + sed -i '/install_nodes.*Nextcloud OCS/a\ +install_nodes "/opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora" "/data/node_modules/node-red-contrib-nextcloud-collabora" "Nextcloud Collabora"' "${ep}" + elif grep -q 'install_nodes.*Odds Scraper' "${ep}"; then + sed -i '/install_nodes.*Odds Scraper/a\ +install_nodes "/opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora" "/data/node_modules/node-red-contrib-nextcloud-collabora" "Nextcloud Collabora"' "${ep}" else cat >> "${ep}" <<'EOF' # nextcloud-collabora-nodered -mkdir -p /data/node_modules -cp -a /opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora /data/node_modules/ +install_nodes "/opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora" "/data/node_modules/node-red-contrib-nextcloud-collabora" "Nextcloud Collabora" EOF fi } @@ -254,17 +293,22 @@ wait_nodered() { warn "Node-RED svarade inte inom 60 s" } +code_bridge_ip() { + docker inspect -f '{{range $k,$v := .NetworkSettings.Networks}}{{if eq $k "bridge"}}{{$v.IPAddress}}{{end}}{{end}}' "${CODE_CONTAINER}" 2>/dev/null +} + verify_code_from_nodered() { local code_ip - code_ip="$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "${CODE_CONTAINER}" 2>/dev/null | head -1)" + code_ip="$(code_bridge_ip)" [ -n "${code_ip}" ] || code_ip="${COLLABORA_IP}" - local url="http://${code_ip}:9980/hosting/capabilities" + # CODE lyssnar på HTTPS internt (HTTP ger tom svar) + local url="https://${code_ip}:9980/hosting/capabilities" log "Testar CODE från ${NODERED_CONTAINER}: ${url}" - if docker exec "${NODERED_CONTAINER}" curl -sf "${url}" >/dev/null 2>&1; then + if docker exec "${NODERED_CONTAINER}" curl -sfk "${url}" >/dev/null 2>&1; then log "OK: CODE nås från befintlig Node-RED-container" else warn "CODE nås inte — kör: docker network connect bridge ${NODERED_CONTAINER}" - warn "nc-collab-config collaboraUrl=http://${code_ip}:9980" + warn "nc-collab-config collaboraUrl=https://${code_ip}:9980 (verifyTls=false)" fi } @@ -279,8 +323,8 @@ main() { copy_node_package patch_dockerfile patch_entrypoint - connect_code_network rebuild_nodered + connect_code_network wait_nodered verify_code_from_nodered @@ -294,7 +338,7 @@ Integrering klar — samma Node-RED på port ${NODERED_PORT} Noder: nc-collab-config, collabora-bridge, nc-office, ... Nästa steg: - 1. nc-collab-config → app-lösenord, collaboraUrl=http://172.17.0.2:9980 + 1. nc-collab-config → app-lösenord, collaboraUrl=https://172.17.0.2:9980 (verifyTls=false) 2. Importera flows/example-flows.json från ${PKG_SRC} (valfritt) 3. Test: capabilities → ncFileToPdf