# As a workaround we have to build on nodejs 18 # nodejs 20 hangs on build with armv6/armv7 FROM docker.io/library/node:18-alpine AS build_node_modules # Set the platform to build image for ARG TARGETPLATFORM ENV TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64} # Install additional tools needed if on arm64 / armv7 / armv6 RUN \ case "${TARGETPLATFORM}" in \ 'linux/arm64') apk add --no-cache python3 make g++ ;; \ 'linux/arm/v7') apk add --no-cache python3 make g++ ;; \ 'linux/arm/v6') apk add --no-cache python3 make g++ ;; \ esac # Update npm to latest RUN npm install -g npm@latest # Copy Web UI COPY src /app WORKDIR /app RUN npm ci --omit=dev &&\ mv node_modules /node_modules # Copy build result to a new image. # This saves a lot of disk space. FROM docker.io/library/node:20-alpine HEALTHCHECK CMD /usr/bin/timeout 5s /bin/sh -c "/usr/bin/wg show | /bin/grep -q interface || exit 1" --interval=1m --timeout=5s --retries=3 COPY --from=build_node_modules /app /app # Move node_modules one directory up, so during development # we don't have to mount it in a volume. # This results in much faster reloading! # # Also, some node_modules might be native, and # the architecture & OS of your development machine might differ # than what runs inside of docker. COPY --from=build_node_modules /node_modules /node_modules # Install Linux packages RUN apk add --no-cache \ dpkg \ dumb-init \ iptables \ iptables-legacy \ wireguard-tools # Use iptables-legacy RUN update-alternatives --install /sbin/iptables iptables /sbin/iptables-legacy 10 --slave /sbin/iptables-restore iptables-restore /sbin/iptables-legacy-restore --slave /sbin/iptables-save iptables-save /sbin/iptables-legacy-save # Set Environment ENV DEBUG=Server,WireGuard,Database # Run Web UI WORKDIR /app CMD ["/usr/bin/dumb-init", "node", "server.js"]