######################################## # EVOLV — Node-RED Development Image ######################################## FROM nodered/node-red:latest # Install curl for health checks USER root RUN apk add --no-cache curl USER node-red # Set working directory to the EVOLV bind mount location WORKDIR /data/evolv # ------------------------------------------------------- # Layer-cache: copy dependency manifests first # ------------------------------------------------------- COPY --chown=node-red:node-red package.json package-lock.json* ./ # Copy generalFunctions early (it's a file: dependency) COPY --chown=node-red:node-red nodes/generalFunctions/ ./nodes/generalFunctions/ # Install dependencies — skip scripts to avoid unused TensorFlow native build RUN npm install --ignore-scripts # Install Node-RED palette nodes used by demo flows RUN cd /usr/src/node-red && npm install @flowfuse/node-red-dashboard # ------------------------------------------------------- # Copy entrypoint and settings # ------------------------------------------------------- COPY --chown=node-red:node-red docker/entrypoint.sh /data/evolv/docker/entrypoint.sh COPY --chown=node-red:node-red docker/settings.js /data/evolv/docker/settings.js # ------------------------------------------------------- # Health check: Node-RED admin API # ------------------------------------------------------- HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \ CMD curl -sf http://localhost:1880/nodes || exit 1 # ------------------------------------------------------- # Entrypoint # ------------------------------------------------------- ENTRYPOINT ["sh", "/data/evolv/docker/entrypoint.sh"]