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:
@@ -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
Regular → Executable
+66
-22
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user