80 lines
2.3 KiB
Docker
80 lines
2.3 KiB
Docker
FROM node:lts-buster AS base
|
|
|
|
# Copy scripts
|
|
COPY scripts/*.sh /tmp/
|
|
|
|
RUN mkdir -p /usr/src/node-red /data && \
|
|
deluser --remove-home node && \
|
|
adduser --gecos "" --home /usr/src/node-red --disabled-login --uid 1000 node-red && \
|
|
chown -R node-red:node-red /data && \
|
|
chown -R node-red:node-red /usr/src/node-red && \
|
|
chmod +x /tmp/*.sh
|
|
|
|
# Install tools, create Node-RED app and data dir, add user and set rights
|
|
RUN set -ex && \
|
|
apt-get update && \
|
|
apt-get upgrade -y && \
|
|
apt-get install -y \
|
|
bash \
|
|
tzdata \
|
|
iputils-ping \
|
|
iputils-arping \
|
|
curl \
|
|
nano \
|
|
git \
|
|
openssl \
|
|
openssh-client
|
|
|
|
# Set work directory
|
|
WORKDIR /usr/src/node-red
|
|
|
|
# package.json contains Node-RED NPM module and node dependencies
|
|
COPY package.json .
|
|
|
|
#### Stage BUILD #######################################################################################################
|
|
FROM base AS build
|
|
|
|
# Install Build tools
|
|
RUN apt-get update && \
|
|
apt-get upgrade -y && \
|
|
apt-get -y install build-essential linux-headers-$(uname -r) udev python && \
|
|
npm install --unsafe-perm --no-update-notifier --only=production
|
|
|
|
RUN /tmp/remove_native_gpio.sh && \
|
|
cp -R node_modules prod_node_modules
|
|
|
|
#### Stage RELEASE #####################################################################################################
|
|
FROM base AS RELEASE
|
|
|
|
COPY --from=build /usr/src/node-red/prod_node_modules ./node_modules
|
|
|
|
# Chown, install devtools & Clean up
|
|
RUN chown -R node-red:node-red /usr/src/node-red && \
|
|
/tmp/install_devtools.sh && \
|
|
rm -r /tmp/*
|
|
|
|
RUN apt-get clean autoclean && \
|
|
apt-get autoremove --yes && \
|
|
rm -rf /var/lib/{apt,dpkg,cache,log}/
|
|
|
|
USER node-red
|
|
|
|
# Env variables
|
|
ENV NODE_RED_VERSION=$NODE_RED_VERSION \
|
|
NODE_PATH=/usr/src/node-red/node_modules:/data/node_modules \
|
|
FLOWS=flows.json
|
|
|
|
# ENV NODE_RED_ENABLE_SAFE_MODE=true # Uncomment to enable safe start mode (flows not running)
|
|
# ENV NODE_RED_ENABLE_PROJECTS=true # Uncomment to enable projects option
|
|
|
|
# User configuration directory volume
|
|
VOLUME ["/data"]
|
|
|
|
# Expose the listening port of node-red
|
|
EXPOSE 1880
|
|
|
|
# Add a healthcheck (default every 30 secs)
|
|
HEALTHCHECK CMD curl http://localhost:1880/ || exit 1
|
|
|
|
ENTRYPOINT ["npm", "start", "--", "--userDir", "/data"]
|