Skip to content
Snippets Groups Projects
Dockerfile 2.75 KiB
# syntax=docker/dockerfile:1.5
# Build with: docker buildx bake --progress=plain local-build

FROM node:18.20-alpine3.20 AS base

FROM base AS deps

RUN apk add --no-cache libc6-compat
WORKDIR /home/node/app
RUN chown node /home/node/app
USER node
RUN mkdir ~/.npm-global
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
ENV PATH=$PATH:/home/node/.npm-global/bin
RUN <<-EOF
    npm install -g @beam-australia/react-env@3.1.1
    npm install -g sharp@0.32.4
EOF
COPY --chown=node package.json package-lock.json* ./
RUN npm ci

FROM base AS builder

WORKDIR /home/node/app
RUN <<-EOF
    apk add --no-cache git
    chown node /home/node/app
EOF
COPY --from=deps --chown=node /home/node/app/node_modules ./node_modules
COPY --chown=node . .
USER node
ENV NEXT_TELEMETRY_DISABLED 1
RUN npm run build:standalone

FROM base AS runner

ARG BUILD_TIME
ARG GIT_COMMIT_SHA
ARG GIT_CURRENT_BRANCH
ARG GIT_LAST_LOG_MESSAGE
ARG GIT_LAST_COMMITTER
ARG GIT_LAST_COMMIT_DATE

RUN apk add --no-cache tini

WORKDIR /home/node/app
RUN chown node /home/node/app
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1

USER node
RUN mkdir ~/.npm-global
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
ENV PATH=$PATH:/home/node/.npm-global/bin
ENV NEXT_SHARP_PATH=/home/node/.npm-global/lib/node_modules/sharp

COPY --from=deps --chown=node /home/node/.npm-global /home/node/.npm-global
COPY --from=builder --chown=node /home/node/app/.next/standalone ./
COPY --from=builder --chown=node /home/node/app/docker/docker-entrypoint.sh /home/node/app/docker-entrypoint.sh
COPY --from=builder --chown=node /home/node/app/.env* ./

EXPOSE 5000
ENV PORT 5000

# HOSTNAME environment variable is set by Docker automatically
HEALTHCHECK CMD wget --no-verbose --tries=1 --spider http://$HOSTNAME:$PORT || exit 1

RUN chmod +x /home/node/app/docker-entrypoint.sh

LABEL org.opencontainers.image.created="$BUILD_TIME"
LABEL org.opencontainers.image.url="https://hive.io/"
LABEL org.opencontainers.image.documentation="https://gitlab.syncad.com/hive/block_explorer_ui"
LABEL org.opencontainers.image.source="https://gitlab.syncad.com/hive/block_explorer_ui"
#LABEL org.opencontainers.image.version="${VERSION}"
LABEL org.opencontainers.image.revision="$GIT_COMMIT_SHA"
LABEL org.opencontainers.image.licenses="MIT"
LABEL org.opencontainers.image.ref.name="HAF Block Explorer UI"
LABEL org.opencontainers.image.title="HAF Block Explorer UI Image"
LABEL org.opencontainers.image.description="Runs HAF Block Explorer User Interface application"
LABEL io.hive.image.branch="$GIT_CURRENT_BRANCH"
LABEL io.hive.image.commit.log_message="$GIT_LAST_LOG_MESSAGE"
LABEL io.hive.image.commit.author="$GIT_LAST_COMMITTER"
LABEL io.hive.image.commit.date="$GIT_LAST_COMMIT_DATE"

ENTRYPOINT ["/sbin/tini", "--", "/home/node/app/docker-entrypoint.sh"]
CMD ["node", "server.js"]