# Troubleshooting ## Nodes missing from palette ### Symptom Node-RED runs but Nextcloud nodes do not appear under **Manage palette → Nodes**. ### Checks 1. **Entrypoint ran** ```bash docker logs nextcloud-node-red 2>&1 | head -20 ``` Expect: ``` [entrypoint] Installing nextcloud nodes into /data... [entrypoint] Source: /opt/nextcloud-nodes/node-red-contrib-nextcloud-ocs [entrypoint] Target: /data/node_modules/node-red-contrib-nextcloud-ocs ``` If you only see the Node-RED banner with no `[entrypoint]` lines, the image may still use `CMD` instead of `ENTRYPOINT ["/entrypoint.sh"]` — rebuild from current `Dockerfile`. 2. **Module installed in userDir** ```bash docker exec nextcloud-node-red ls /data/node_modules/node-red-contrib-nextcloud-ocs docker exec nextcloud-node-red cat /data/node_modules/node-red-contrib-nextcloud-ocs/package.json ``` 3. **User directory** Logs must show `User directory : /data`. If it shows `/usr/src/node-red/.node-red/`, entrypoint did not start Node-RED with `--userDir /data`. 4. **Stale volume (old package version)** Compare `/opt` vs `/data`: ```bash docker exec nextcloud-node-red sh -c \ 'grep version /opt/nextcloud-nodes/node-red-contrib-nextcloud-ocs/package.json; \ grep version /data/node_modules/node-red-contrib-nextcloud-ocs/package.json' ``` If `/opt` is newer, restart should copy on boot. If `/data` stays old, remove volume (loses flows): ```bash docker rm -f nextcloud-node-red docker volume rm node-red-data docker run -d --name nextcloud-node-red --network host \ -v node-red-data:/data --restart unless-stopped nextcloud-node-red:latest ``` 5. **Browser cache** Hard refresh (Ctrl+F5) or open Node-RED in a private window. --- ## Container restart loop ### Symptom `docker ps` shows `Restarting`; logs repeat entrypoint lines. ### Cause Old `entrypoint.sh` tried to copy missing `settings.js`: ``` cp: can't stat '/usr/src/node-red/.node-red/settings.js': No such file or directory ``` ### Fix Use current `entrypoint.sh` (starts `node-red --userDir /data` only). Rebuild: ```bash docker build --no-cache -t nextcloud-node-red:latest . ``` --- ## `No Nextcloud configuration node selected` Flow nodes reference a deleted or unconfigured **nextcloud-config** node. Open each red Nextcloud node and re-select the config node, then Deploy. --- ## API errors / connection refused | Issue | Fix | |-------|-----| | `ECONNREFUSED` to localhost | Use `--network host` or use LAN IP / hostname, not `127.0.0.1` from bridge network | | SSL errors | Self-signed: nodes set `rejectUnauthorized: false`; or install proper certs | | 401 Unauthorized | Use **app password**, correct username | | 404 on OCS path | App not installed/enabled on Nextcloud (Collectives, Talk, etc.) | Test from container: ```bash docker exec nextcloud-node-red wget -qO- --header="OCS-APIRequest: true" \ --user='USER:APP_PASSWORD' \ https://cloud.example.com/ocs/v2.php/cloud/user ``` --- ## Docker build shows old files Build context must include updated `nodes/nextcloud-ocs/`: ```bash grep version nodes/nextcloud-ocs/package.json # on host before build docker build --no-cache -t nextcloud-node-red:latest . ``` `docker builder prune -af` clears COPY layer cache. --- ## Nextcloud iframe blank 1. Browser DevTools → Console: CSP violations. 2. Confirm **nodered_embed** is enabled and admin URL matches iframe target host. 3. `CSPListener` adds `frame-src` for the hostname from `nodered_url`. 4. Reverse proxy must not set `X-Frame-Options: DENY` on Node-RED. ```bash curl -I https://cloud.example.com | grep -i frame curl -I http://192.168.1.26:1880 | grep -i frame ``` --- ## Permission denied on entrypoint copy Old files in volume owned by root. Fix: ```bash docker rm -f nextcloud-node-red docker volume rm node-red-data # recreate container ``` Or fix ownership once: ```bash docker exec -u root nextcloud-node-red chown -R node-red:node-red /data ``` --- ## Verify node discovery manually ```bash docker exec nextcloud-node-red node -e " const p=require('/data/node_modules/node-red-contrib-nextcloud-ocs/package.json'); console.log(p.version, Object.keys(p['node-red'].nodes).length, 'nodes'); " ``` Expected: version from `package.json` and **16** node types.