# IMAGE FOR BUILDING
FROM node:16.19.0-alpine as build

ARG node_env
ARG server_protocol
ARG server_host
ARG server_port
ARG client_protocol
ARG client_host
ARG client_port
ARG public_client_host
ARG public_client_protocol
ARG public_client_port
ARG use_colab_email
ARG flax_site_url

ENV NODE_ENV "production"
ENV SERVER_PROTOCOL $server_protocol
ENV SERVER_HOST $server_host
ENV SERVER_PORT $server_port
ENV CLIENT_PROTOCOL $client_protocol
ENV CLIENT_HOST $client_host
ENV CLIENT_PORT $client_port
ENV PUBLIC_CLIENT_HOST $public_client_host
ENV PUBLIC_CLIENT_PORT $public_client_port
ENV PUBLIC_CLIENT_PROTOCOL $public_client_protocol
ENV USE_COLAB_EMAIL $use_colab_email
ENV FLAX_SITE_URL $flax_site_url

RUN apk add --no-cache git python3 make g++ bash 

WORKDIR /home/node/app

COPY package.json .
COPY yarn.lock .

# Install production node modules for server use
RUN yarn install --frozen-lockfile --production=true
# Copy to another folder for later use
RUN mv node_modules production_node_modules

# Install development node modules for building webpack bundle
RUN yarn install --frozen-lockfile --production=false

COPY . .

RUN yarn webpack --config webpack/webpack.production.config.js

# IMAGE FOR RUNNING
FROM node:16.19.0-alpine as server

WORKDIR /home/node/app

RUN mkdir ./uploads

RUN chown -R node:node .
RUN apk add bash coreutils postgresql-client
USER node

COPY --chown=node:node ./config ./config
COPY --chown=node:node ./public ./public
COPY --chown=node:node ./scripts ./scripts
COPY --chown=node:node ./server ./server
COPY --chown=node:node ./app/storage ./app/storage
COPY --chown=node:node ./app/brandConfig.json ./app/brandConfig.json
COPY --chown=node:node ./startServer.js .
COPY --chown=node:node ./profiles ./profiles

COPY --from=build /home/node/app/_build/assets ./_build/assets
COPY --from=build /home/node/app/production_node_modules ./node_modules

VOLUME /home/node/app/uploads

ENTRYPOINT ["sh", "./scripts/setupProdServer.sh"]
CMD ["node", "./startServer.js"]
