Skip to content
Snippets Groups Projects
Dockerfile 1.46 KiB
Newer Older
# Base 
FROM node:20 AS base

ARG APP_HOME=/home/node/app
ARG SERVICE

WORKDIR ${APP_HOME}

RUN corepack enable

# Build
FROM base AS build

ARG APP_HOME=/home/node/app
WORKDIR ${APP_HOME}

COPY package.json pnpm-lock.yaml pnpm-workspace.yaml tsconfig*.json .swcrc ./
COPY apps/${SERVICE}/package.json ./apps/${SERVICE}/
COPY apps/shared/package.json ./apps/shared/

RUN pnpm install --frozen-lockfile

COPY apps/${SERVICE} ./apps/${SERVICE}
COPY apps/shared ./apps/shared
RUN pnpm --filter shared build
RUN pnpm --filter ${SERVICE} build:production
RUN pnpm --filter ${SERVICE} --prod deploy build
RUN pnpm --filter shared --prod deploy shared

# Final
FROM node:20 AS final

ARG APP_HOME=/home/node/app
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR ${APP_HOME}
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["node", "dist/main.js"]

COPY --chown=node:node ./docker-entrypoint.sh ./docker-entrypoint.sh
COPY --from=build --chown=node:node ${APP_HOME}/build/dist ./dist
COPY --from=build --chown=node:node ${APP_HOME}/shared/dist ./shared
COPY --from=build --chown=node:node ${APP_HOME}/build/node_modules ./node_modules
COPY --from=build --chown=node:node ${APP_HOME}/build/package.json .

# Cut unnecessary stuff from package.json. Only leave name, version and module type
RUN node -e "\
    const { name, version, type } = JSON.parse(fs.readFileSync('./package.json', 'utf-8'));\
    fs.writeFileSync('./package.json', JSON.stringify({ name, version, type }, null, 2));\
"