Fix integrate copy layout and entrypoint patching for :1880

Preserve lib/ and nodes/ tree instead of flattening, validate layout before Docker build, repair broken entrypoint patches, reconnect bridge after compose up, and detect CODE via bridge network HTTPS.
This commit is contained in:
ncadmin
2026-08-22 16:45:59 +02:00
parent 15b80fdf76
commit 865f66112a
3 changed files with 71 additions and 22 deletions
+5
View File
@@ -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
Regular → Executable
View File
+66 -22
View File
@@ -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