-
Dobromir Palushev authoredDobromir Palushev authored
Dockerfile 1.50 KiB
ARG NODEJS_VERSION='16.17.0'
# ------------------------------------------------------------------
# Base container to be used in the next stages
FROM node:$NODEJS_VERSION-alpine AS base
ARG \
MONGODB_URL_TEST=mongodb://host.docker.internal:27017/todo-app \
JWT_SECRET_TEST=<my-very-secret-jwt>
ENV \
PORT=<dynamically-set-from-k8s> \
MONGODB_URL=<dynamically-set-from-k8s> \
JWT_SECRET=<dynamically-set-from-k8s>
# ------------------------------------------------------------------
# Test stage
FROM base AS test
# client tests
WORKDIR /client
COPY ./client .
RUN npm ci --no-audit --no-fund
RUN npm run test
# server tests
WORKDIR /server
COPY ./server/src ./src/
COPY ./server/package*.json .
RUN npm ci --no-audit --no-fund
ARG \
MONGODB_URL_TEST \
JWT_SECRET_TEST
# MONGODB_URL and JWT_SECRET are available as env variables
RUN MONGODB_URL=$MONGODB_URL_TEST JWT_SECRET=$JWT_SECRET_TEST npm run test
# ------------------------------------------------------------------
# Build stage
FROM base AS build
ARG APP_BUILD_PATH=/build
# server build
WORKDIR $APP_BUILD_PATH
COPY ./server/src .
COPY ./server/package*.json .
RUN \
npm ci --prod --no-audit --no-fund \
&& rm -rf ./package*
# client build
WORKDIR /client
COPY ./client .
RUN \
npm i --no-audit --no-fund \
&& \
BUILD_PATH=..$APP_BUILD_PATH/public \
npm run build
WORKDIR $APP_BUILD_PATH
# MONGODB_URL and JWT_SECRET should be available as env variables
CMD ["node", "./index.js"]
EXPOSE $PORT