# BUILD NIM APP ---------------------------------------------------------------- FROM rust:1.77.1-alpine3.18 AS nim-build ARG NIMFLAGS ARG MAKE_TARGET=liteprotocoltester ARG NIM_COMMIT ARG LOG_LEVEL=TRACE # Get build tools and required header files RUN apk add --no-cache bash git build-base openssl-dev pcre-dev linux-headers curl jq WORKDIR /app COPY . . # workaround for alpine issue: https://github.com/alpinelinux/docker-alpine/issues/383 RUN apk update && apk upgrade # Ran separately from 'make' to avoid re-doing RUN git submodule update --init --recursive # Slowest build step for the sake of caching layers RUN make -j$(nproc) deps QUICK_AND_DIRTY_COMPILER=1 ${NIM_COMMIT} # Build the final node binary RUN make -j$(nproc) ${NIM_COMMIT} $MAKE_TARGET LOG_LEVEL=${LOG_LEVEL} NIMFLAGS="${NIMFLAGS}" # REFERENCE IMAGE as BASE for specialized PRODUCTION IMAGES---------------------------------------- FROM alpine:3.18 AS base_lpt ARG MAKE_TARGET=liteprotocoltester LABEL maintainer="zoltan@status.im" LABEL source="https://github.com/waku-org/nwaku" LABEL description="Lite Protocol Tester: Waku light-client" LABEL commit="unknown" LABEL version="unknown" # DevP2P, LibP2P, and JSON RPC ports EXPOSE 30303 60000 8545 # Referenced in the binary RUN apk add --no-cache libgcc pcre-dev libpq-dev \ wget \ iproute2 \ python3 # Fix for 'Error loading shared library libpcre.so.3: No such file or directory' RUN ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3 COPY --from=nim-build /app/build/liteprotocoltester /usr/bin/ RUN chmod +x /usr/bin/liteprotocoltester # Standalone image to be used manually and in lpt-runner ------------------------------------------- FROM base_lpt AS standalone_lpt COPY --from=nim-build /app/apps/liteprotocoltester/run_tester_node.sh /usr/bin/ RUN chmod +x /usr/bin/run_tester_node.sh ENTRYPOINT ["/usr/bin/run_tester_node.sh", "/usr/bin/liteprotocoltester"] # Image for infra deployment ------------------------------------------- FROM base_lpt AS deployment_lpt # let supervisor python script flush logs immediately ENV PYTHONUNBUFFERED="1" COPY --from=nim-build /app/apps/liteprotocoltester/run_tester_node_at_infra.sh /usr/bin/ COPY --from=nim-build /app/apps/liteprotocoltester/infra.env /usr/bin/ COPY --from=nim-build /app/apps/liteprotocoltester/lpt_supervisor.py /usr/bin/ RUN chmod +x /usr/bin/run_tester_node_at_infra.sh RUN chmod +x /usr/bin/lpt_supervisor.py ENTRYPOINT ["/usr/bin/lpt_supervisor.py"]