diff --git a/Dockerfile b/Dockerfile index 880581e..048b689 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,16 @@ +# 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" -RUN apt-get update && apt install -y --no-install-recommends \ +# 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 \ @@ -23,42 +31,69 @@ RUN apt-get update && apt install -y --no-install-recommends \ 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 -RUN git clone --recursive -b release-v0.17 https://github.com/monero-project/monero.git \ +# Clone and compile monerod with all available threads +ARG MONERO_BRANCH +ARG NPROC +RUN git clone --recursive --branch ${MONERO_BRANCH} https://github.com/monero-project/monero.git \ && cd monero \ - && USE_SINGLE_BUILDDIR=1 make + && 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 .. -RUN make -# use ldd and awk to bundle up dynamic libraries for the final image +# 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" -RUN apt-get update && apt-get install -y --no-install-recommends \ - unzip \ + +# 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 -WORKDIR /home/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", "./xmrblocks"] + +# Set sane defaults that are overridden if the user passes any commands +CMD ["--enable-json-api", "--enable-autorefresh-option", "--enable-emission-monitor", "--enable-pusher"] \ No newline at end of file