| # Build API, Client and Data Provider | |
| FROM node:19-alpine AS base | |
| WORKDIR /app | |
| COPY config/loader.js ./config/ | |
| RUN npm install dotenv | |
| WORKDIR /app/api | |
| COPY api/package*.json ./ | |
| COPY api/ ./ | |
| RUN npm install | |
| # React client build | |
| FROM base AS client-build | |
| WORKDIR /app/client | |
| COPY ./client/ ./ | |
| WORKDIR /app/packages/data-provider | |
| COPY ./packages/data-provider ./ | |
| RUN npm install | |
| RUN npm run build | |
| RUN mkdir -p /app/client/node_modules/librechat-data-provider/ | |
| RUN cp -R /app/packages/data-provider/* /app/client/node_modules/librechat-data-provider/ | |
| WORKDIR /app/client | |
| RUN npm install | |
| ENV NODE_OPTIONS="--max-old-space-size=2048" | |
| RUN npm run build | |
| # Node API setup | |
| FROM base AS api-build | |
| COPY --from=client-build /app/client/dist /app/client/dist | |
| EXPOSE 3080 | |
| ENV HOST=0.0.0.0 | |
| CMD ["node", "server/index.js"] | |
| # Nginx setup | |
| FROM nginx:1.21.1-alpine AS prod-stage | |
| COPY ./client/nginx.conf /etc/nginx/conf.d/default.conf | |
| CMD ["nginx", "-g", "daemon off;"] | |