Skip to content
Snippets Groups Projects
Dockerfile 1.80 KiB
FROM node:19-slim AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
WORKDIR /app
ARG IMAGE_TAG="dev-no-image-tag"
ENV GRAPHPOLARIS_VERSION=$IMAGE_TAG


FROM base AS install
COPY package.json ./
COPY pnpm-lock.yaml ./
COPY pnpm-workspace.yaml ./
COPY turbo.json ./
COPY apps/web/package.json ./apps/web/package.json
COPY apps/docs/package.json ./apps/docs/package.json
COPY libs/config/package.json ./libs/config/package.json
COPY libs/shared/package.json ./libs/shared/package.json
RUN pnpm install --frozen-lockfile


FROM base AS build
WORKDIR /app
COPY apps /app/apps
COPY libs /app/libs
COPY --from=install /app /app
# Fixes: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
ENV NODE_OPTIONS="--max-old-space-size=4096"
RUN pnpm run build


FROM base AS env-build
# Automatically set by build process: https://docs.docker.com/reference/dockerfile/#automatic-platform-args-in-the-global-scope
ARG TARGETARCH
RUN npm install -g pkg
WORKDIR /app
COPY --from=install /app/node_modules /app/node_modules
RUN if [ "$TARGETARCH" = "arm64" ]; then ARCHITECTURE=arm64; else ARCHITECTURE=x64; fi \
    && echo "System architecture: $ARCHITECTURE" \
    && npx pkg ./node_modules/@import-meta-env/cli/bin/import-meta-env.js --target node18-alpine-${ARCHITECTURE} --output import-meta-env-alpine

FROM nginx:1.25-alpine
WORKDIR /app
COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf
COPY entrypoint.sh /usr/bin/entrypoint.sh
COPY apps/web/.env.example /.env.example
COPY --from=env-build /app/import-meta-env-alpine /import-meta-env-alpine
COPY --from=build /app/apps/web/dist /usr/share/nginx/html
RUN chmod +x /usr/bin/entrypoint.sh
EXPOSE 4200
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
# ENTRYPOINT ["ls", "-la"]