dashboard/Dockerfile
James Brumond 324e2b2818
Some checks failed
Build container images / build (push) Failing after 12s
setting up gitea actions
2023-08-18 16:07:22 -07:00

88 lines
2.1 KiB
Docker

ARG NODE_VERSION="20"
# =====
# 1. Build Stage
# =====
FROM node:${NODE_VERSION}-alpine AS build_stage
ENV BUILD_PATH="/app.build"
# Make a directory to build the application in
RUN mkdir -p $BUILD_PATH
WORKDIR $BUILD_PATH
# Install common build dependencies
# see: https://github.com/gliderlabs/docker-alpine/blob/master/docs/usage.md (re: `--no-cache` flag)
RUN apk add --no-cache \
python3 \
g++ \
make \
bash
# Copy over the application files
COPY package.json package-lock.json tsconfig.json ${BUILD_PATH}/
COPY src/ ${BUILD_PATH}/src/
# Install dependencies and build the application source
# (mount the NPM credentials so we can install private packages)
RUN --mount-type=secret,id=npmrc,target=/root/.npmrc npm ci
RUN npm run tsc
# Remove any dev dependencies now that the app is built
RUN npm prune --production
# =====
# 2. Distribution Stage
# =====
FROM node:${NODE_VERSION}-alpine AS dist_stage
ENV BUILD_PATH="/app.build"
# Environment variables to control where the various application
# components are located. You probably don't need to change these
ENV APP_PATH="/app"
ENV DATA_PATH="/app.data"
ENV CONF_PATH="/app.conf"
# Create a new user/group to run the application
RUN addgroup appuser && \
adduser \
--no-create-home \
--disabled-password \
--gecos "" \
--ingroup appuser \
appuser
# Make a directory to store configuration
VOLUME [ "${DATA_PATH}" ]
RUN mkdir -p ${DATA_PATH} && \
chown appuser:appuser ${DATA_PATH} && \
chmod 0700 ${DATA_PATH}
# Make a directory to store configuration
VOLUME [ "${CONF_PATH}" ]
RUN mkdir -p ${CONF_PATH} && \
chown appuser:appuser ${CONF_PATH} && \
chmod 0500 ${CONF_PATH}
# Copy over the built application code
COPY --from=build_stage --chown=appuser:appuser --chmod=500 ${BUILD_PATH}/build/ ${APP_PATH}/
# Copy over the production node_modules
COPY --from=build_stage --chown=appuser:appuser --chmod=500 ${BUILD_PATH}/node_modules/ /node_modules/
# Run the application with the user/group given permissions above
USER appuser:appuser
# Run the application by default
ENTRYPOINT [ "node", "${APP_PATH}/start.js" ]