generated from alphane/template
78 lines
1.8 KiB
Docker
78 lines
1.8 KiB
Docker
# Stage 0 - base node customizations
|
|
FROM node:20.19.4-alpine3.22 AS base-node
|
|
|
|
RUN npm install -g npm@10.2.5
|
|
|
|
# Stage 1 - api build - requires development environment because typescript
|
|
FROM base-node AS api-build-stage
|
|
|
|
ENV NODE_ENV=development
|
|
|
|
WORKDIR /usr/src/api
|
|
|
|
COPY api/package*.json ./
|
|
COPY api/tsconfig*.json ./
|
|
RUN npm install
|
|
|
|
COPY api ./
|
|
|
|
RUN npm run build
|
|
|
|
# Copy html files, remove once we are using Vite for build process
|
|
COPY api/src/templates ./dist/templates
|
|
|
|
# Stage 2 - web build - requires development environment to install vue-cli-service
|
|
FROM base-node AS web-build-stage
|
|
|
|
ENV NODE_ENV=development
|
|
|
|
WORKDIR /usr/src/web
|
|
|
|
COPY web/package*.json ./
|
|
COPY web/tsconfig*.json ./
|
|
COPY web/vite.config.js ./
|
|
RUN npm install
|
|
|
|
COPY web ./
|
|
|
|
# Switching to production mode for build environment.
|
|
ENV NODE_ENV=production
|
|
RUN npm run build
|
|
|
|
# Stage 3 - production setup
|
|
FROM base-node
|
|
|
|
ARG RELEASE_TAG
|
|
ARG GIT_COMMIT_HASH
|
|
|
|
ENV RELEASE_TAG=${RELEASE_TAG}
|
|
ENV GIT_COMMIT_HASH=${GIT_COMMIT_HASH}
|
|
|
|
# Persists TZ=UTC effect after container build and into container run
|
|
# Ensures dates/times are consistently formated as UTC
|
|
# Conversion to local time should happen in the UI
|
|
ENV TZ=UTC
|
|
|
|
ENV NODE_ENV=production
|
|
USER node
|
|
|
|
WORKDIR /home/node/app
|
|
RUN chown -R node:node /home/node/app
|
|
|
|
COPY --from=api-build-stage --chown=node:node /usr/src/api/package*.json ./
|
|
RUN npm install && npm cache clean --force --loglevel=error
|
|
|
|
COPY --from=api-build-stage --chown=node:node /usr/src/api/dist ./dist/
|
|
COPY --from=web-build-stage --chown=node:node /usr/src/web/dist ./dist/web/
|
|
|
|
RUN echo "RELEASE_TAG=${RELEASE_TAG}" >> VERSION
|
|
RUN echo "GIT_COMMIT_HASH=${GIT_COMMIT_HASH}" >> VERSION
|
|
|
|
EXPOSE 3000
|
|
|
|
COPY --from=api-build-stage --chown=node:node /usr/src/api/bin/boot-app.sh ./bin/
|
|
|
|
RUN chmod +x ./bin/boot-app.sh
|
|
|
|
CMD ["./bin/boot-app.sh"]
|