# syntax=docker/dockerfile:1 | |
ARG NODE_VERSION=18 | |
FROM node:${NODE_VERSION}-alpine | |
# Use production node environment by default. | |
ENV NODE_ENV production | |
ENV PORT 7860 | |
WORKDIR /usr/src/app | |
# Download dependencies as a separate step to take advantage of Docker's caching. | |
# Leverage a cache mount to /root/.npm to speed up subsequent builds. | |
# Leverage a bind mounts to package.json and package-lock.json to avoid having to copy them into | |
# into this layer. | |
RUN --mount=type=bind,source=package.json,target=package.json \ | |
--mount=type=bind,source=package-lock.json,target=package-lock.json \ | |
--mount=type=cache,target=/root/.npm \ | |
npm ci --omit=dev | |
RUN mkdir -p /data/logs | |
RUN chown -R node:node /data/logs | |
# Run the application as a non-root user. | |
USER node | |
# Copy the rest of the source files into the image. | |
COPY . /usr/src/app | |
# Expose the port that the application listens on. | |
EXPOSE 7860 | |
ENV BODY_SIZE_LIMIT=50000000 | |
# Run the application. | |
CMD node build | |