diff --git a/Dockerfile b/Dockerfile index 4bf674e5261..0fd49b926c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,55 @@ -FROM node:23.3.0 -RUN npm install -g pnpm@9.4.0 +# Use a specific Node.js version for better reproducibility +FROM node:23.3.0-slim AS builder + +# Install pnpm globally and install necessary build tools +RUN npm install -g pnpm@9.4.0 && \ + apt-get update && \ + apt-get install -y git python3 make g++ && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Set Python 3 as the default python +RUN ln -s /usr/bin/python3 /usr/bin/python # Set the working directory WORKDIR /app -# Add configuration files and install dependencies -ADD pnpm-workspace.yaml /app/pnpm-workspace.yaml -ADD package.json /app/package.json -ADD .npmrc /app/.npmrc -ADD tsconfig.json /app/tsconfig.json -ADD turbo.json /app/turbo.json +# Copy package.json and other configuration files +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc turbo.json ./ + +# Copy the rest of the application code +COPY agent ./agent +COPY packages ./packages +COPY scripts ./scripts +COPY characters ./characters -# Add the documentation -ADD docs /app/docs +# Install dependencies and build the project +RUN pnpm install \ + && pnpm build \ + && pnpm prune --prod -# Add the rest of the application code -ADD agent /app/agent -ADD packages /app/packages +# Create a new stage for the final image +FROM node:23.3.0-slim -# Add the environment variables -ADD scripts /app/scripts -ADD characters /app/characters -ADD .env /app/.env +# Install runtime dependencies if needed +RUN npm install -g pnpm@9.4.0 && \ + apt-get update && \ + apt-get install -y git python3 && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /app -RUN pnpm i -RUN pnpm build +# Copy built artifacts and production dependencies from the builder stage +COPY --from=builder /app/package.json ./ +COPY --from=builder /app/pnpm-workspace.yaml ./ +COPY --from=builder /app/.npmrc ./ +COPY --from=builder /app/turbo.json ./ +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/agent ./agent +COPY --from=builder /app/packages ./packages +COPY --from=builder /app/scripts ./scripts +COPY --from=builder /app/characters ./characters -# Command to run the container -CMD ["tail", "-f", "/dev/null"] \ No newline at end of file +# Set the command to run the application +CMD ["pnpm", "start"] \ No newline at end of file