mirror of
https://github.com/StanGirard/quivr.git
synced 2024-11-30 21:28:56 +03:00
71d4a63a17
# Description Currently, the production Docker images are very large, sitting at 4.17 GB for the frontend image, and 3.49 GB for backend images. This change adds multi-stage builds, to optimize the image sizes, which results in the following improvements: - frontend image size: 4.17 GB -> 1.64 GB - backend image size: 3.49 GB -> 1.71 GB I hope this is appropriate as there is no open issue for this that I know of. I implemented this change and tested it locally, and would be glad to discuss this and open an issue if necessary. ## Checklist before requesting a review Please delete options that are not relevant. - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented hard-to-understand areas - [x] New and existing unit tests pass locally with my changes ## Screenshots (if appropriate): Image sizes before: <img width="1416" alt="image" src="https://github.com/StanGirard/quivr/assets/8296549/fcbb020f-8165-4549-ae30-823318691ec6"> Image sizes after: <img width="1416" alt="image" src="https://github.com/StanGirard/quivr/assets/8296549/d3f43c78-be26-4c38-9d23-9c1b0e9e37f2">
50 lines
1.3 KiB
Docker
50 lines
1.3 KiB
Docker
# First stage: Build environment
|
|
FROM node:18.13.0-alpine as builder
|
|
|
|
# Install Python and essential build tools
|
|
RUN apk add --update --no-cache python3 make g++ && ln -sf python3 /usr/bin/python
|
|
RUN python3 -m ensurepip
|
|
RUN pip3 install --no-cache --upgrade pip setuptools
|
|
|
|
# Create a Python virtual environment
|
|
RUN python3 -m venv /venv
|
|
ENV PATH="/venv/bin:$PATH"
|
|
|
|
# Create the directory where our app will live
|
|
RUN mkdir -p /app
|
|
WORKDIR /app
|
|
|
|
# Copy package.json and yarn.lock to the working directory
|
|
COPY package*.json yarn.lock ./
|
|
|
|
# Install Node.js dependencies
|
|
RUN yarn install --network-timeout 1000000
|
|
|
|
# Copy the rest of the Next.js folder into /app
|
|
COPY . .
|
|
|
|
# Build the Next.js application
|
|
RUN yarn build
|
|
|
|
# Second stage: Runtime environment
|
|
FROM node:18.13.0-alpine
|
|
|
|
# Copy the virtual environment from the builder stage
|
|
COPY --from=builder /venv /venv
|
|
ENV PATH="/venv/bin:$PATH"
|
|
|
|
# Set the working directory
|
|
WORKDIR /app
|
|
|
|
# Copy built assets from the builder stage
|
|
COPY --from=builder /app/.next ./.next
|
|
COPY --from=builder /app/node_modules ./node_modules
|
|
COPY --from=builder /app/package.json ./package.json
|
|
COPY --from=builder /app/public ./public
|
|
|
|
# Ensure port 3000 is accessible to our system
|
|
EXPOSE 3000
|
|
|
|
# Run yarn start, as we would via the command line
|
|
CMD ["yarn", "start"]
|