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. 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) ## Installation (cloud / valfri VM)
```bash ```bash
Regular → Executable
View File
+66 -22
View File
@@ -171,15 +171,45 @@ preflight() {
fi 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() { copy_node_package() {
local dest="${NODERED_DIR}/nodes/nextcloud-collabora" local dest="${NODERED_DIR}/nodes/nextcloud-collabora"
log "Kopierar noder → ${dest}" log "Kopierar paket → ${dest} (lib/ + nodes/, inte platt)"
mkdir -p "${dest}"
rsync -a --delete \ rm -rf "${dest}"
"${PKG_SRC}/package.json" \ mkdir -p "${dest}/lib" "${dest}/nodes"
"${PKG_SRC}/lib/" \
"${PKG_SRC}/nodes/" \ cp -a "${PKG_SRC}/package.json" "${dest}/"
"${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() { patch_dockerfile() {
@@ -202,21 +232,30 @@ EOF
patch_entrypoint() { patch_entrypoint() {
local ep="${NODERED_DIR}/entrypoint.sh" 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 return 0
fi fi
log "Patchar entrypoint.sh"
# Infoga före sista exec/npm start om möjligt, annars append log "Patchar entrypoint.sh (install_nodes för Collabora)"
if grep -q "node-red-contrib-nextcloud-ocs" "${ep}"; then if grep -q 'install_nodes.*Nextcloud OCS' "${ep}"; then
sed -i '/node-red-contrib-nextcloud-ocs/a\ sed -i '/install_nodes.*Nextcloud OCS/a\
cp -a /opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora /data/node_modules/' "${ep}" 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 else
cat >> "${ep}" <<'EOF' cat >> "${ep}" <<'EOF'
# nextcloud-collabora-nodered # nextcloud-collabora-nodered
mkdir -p /data/node_modules install_nodes "/opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora" "/data/node_modules/node-red-contrib-nextcloud-collabora" "Nextcloud Collabora"
cp -a /opt/nextcloud-nodes/node-red-contrib-nextcloud-collabora /data/node_modules/
EOF EOF
fi fi
} }
@@ -254,17 +293,22 @@ wait_nodered() {
warn "Node-RED svarade inte inom 60 s" 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() { verify_code_from_nodered() {
local code_ip 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}" [ -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}" 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" log "OK: CODE nås från befintlig Node-RED-container"
else else
warn "CODE nås inte — kör: docker network connect bridge ${NODERED_CONTAINER}" 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 fi
} }
@@ -279,8 +323,8 @@ main() {
copy_node_package copy_node_package
patch_dockerfile patch_dockerfile
patch_entrypoint patch_entrypoint
connect_code_network
rebuild_nodered rebuild_nodered
connect_code_network
wait_nodered wait_nodered
verify_code_from_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, ... Noder: nc-collab-config, collabora-bridge, nc-office, ...
Nästa steg: 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) 2. Importera flows/example-flows.json från ${PKG_SRC} (valfritt)
3. Test: capabilities → ncFileToPdf 3. Test: capabilities → ncFileToPdf