# Use ubuntu:20.04 as base for builder stage image FROM ubuntu:20.04 as builder # Set Monero branch/tag to be used for monerod compilation ARG MONERO_BRANCH=release-v0.17 # Added DEBIAN_FRONTEND=noninteractive to workaround tzdata prompt on installation ENV DEBIAN_FRONTEND="noninteractive" # Install dependencies for monerod and xmrblocks compilation RUN apt-get update \ && apt-get upgrade -y \ && apt-get install -y --no-install-recommends \ git \ build-essential \ cmake \ miniupnpc \ graphviz \ doxygen \ pkg-config \ ca-certificates \ zip \ libboost-all-dev \ libunbound-dev \ libunwind8-dev \ libssl-dev \ libcurl4-openssl-dev \ libgtest-dev \ libreadline-dev \ libzmq3-dev \ libsodium-dev \ libhidapi-dev \ libhidapi-libusb0 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Set compilation environment variables ENV CFLAGS='-fPIC' ENV CXXFLAGS='-fPIC' ENV USE_SINGLE_BUILDDIR 1 ENV BOOST_DEBUG 1 WORKDIR /root # Clone and compile monerod with all available threads ARG NPROC RUN git clone --recursive --branch ${MONERO_BRANCH} https://github.com/monero-project/monero.git \ && cd monero \ && test -z "$NPROC" && nproc > /nproc || echo -n "$NPROC" > /nproc && make -j"$(cat /nproc)" # Copy and cmake xmrblocks COPY . /root/onion-monero-blockchain-explorer/ WORKDIR /root/onion-monero-blockchain-explorer/build RUN cmake .. # Compile xmrblocks with all available threads RUN test -z "$NPROC" && nproc > /nproc || echo -n "$NPROC" > /nproc && make -j"$(cat /nproc)" # Use ldd and awk to bundle up dynamic libraries for the final image RUN zip /lib.zip $(ldd xmrblocks | grep -E '/[^\ ]*' -o) # Use ubuntu:20.04 as base for final image FROM ubuntu:20.04 # Added DEBIAN_FRONTEND=noninteractive to workaround tzdata prompt on installation ENV DEBIAN_FRONTEND="noninteractive" # Install unzip to handle bundled libs from builder stage RUN apt-get update \ && apt-get upgrade -y \ && apt-get install -y --no-install-recommends unzip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /lib.zip . RUN unzip -o lib.zip && rm -rf lib.zip # Add user and setup directories for monerod and xmrblocks RUN useradd -ms /bin/bash monero \ && mkdir -p /home/monero/.bitmonero \ && chown -R monero:monero /home/monero/.bitmonero USER monero # Switch to home directory and install newly built xmrblocks binary WORKDIR /home/monero COPY --chown=monero:monero --from=builder /root/onion-monero-blockchain-explorer/build/xmrblocks . COPY --chown=monero:monero --from=builder /root/onion-monero-blockchain-explorer/build/templates ./templates/ # Expose volume used for lmdb access by xmrblocks VOLUME /home/monero/.bitmonero # Expose default explorer http port EXPOSE 8081 ENTRYPOINT ["/bin/sh", "-c"] # Set sane defaults that are overridden if the user passes any commands CMD ["./xmrblocks --enable-json-api --enable-autorefresh-option --enable-emission-monitor --enable-pusher"]