1- FROM node:20-slim AS base
2-
3- # Copy project files
4- COPY package.json /usr/src/app/
5- COPY package-lock.json /usr/src/app/
6- COPY tsconfig.json /usr/src/app/
7- COPY src/index.ts /usr/src/app/src/
8- COPY *.db /data/
9- WORKDIR /usr/src/app
10-
11- RUN npm install
12- RUN npm run build
1+ # Build stage
2+ FROM cgr.dev/chainguard/wolfi-base:latest AS builder
3+
4+ ENV LANG=C.UTF-8
5+ ENV LC_ALL=C.UTF-8
6+
7+ RUN apk update && apk add --no-cache \
8+ bash \
9+ build-base \
10+ ca-certificates \
11+ curl \
12+ make \
13+ node-gyp \
14+ nodejs \
15+ npm \
16+ openssl \
17+ python3 \
18+ sqlite-dev \
19+ unzip \
20+ && update-ca-certificates \
21+ && rm -rf /var/cache/apk/*
22+
23+ WORKDIR /app
24+
25+ # Copy package files first for better layer caching
26+ COPY package.json package-lock.json tsconfig.json ./
27+ COPY src/ ./src/
28+
29+ # Install dependencies and build
30+ RUN --mount=type=cache,target=/root/.npm \
31+ npm install typescript && \
32+ npm ci --only=production && \
33+ npm install --save-dev typescript && \
34+ npm run build
35+
36+ # Production stage
37+ FROM cgr.dev/chainguard/wolfi-base:latest AS production
38+
39+ ENV LANG=C.UTF-8
40+ ENV LC_ALL=C.UTF-8
41+ ENV NODE_ENV=production
42+
43+ # Install only runtime dependencies
44+ RUN apk update && apk add --no-cache \
45+ nodejs \
46+ ca-certificates \
47+ sqlite \
48+ && update-ca-certificates \
49+ && rm -rf /var/cache/apk/*
50+
51+ # Create non-root user
52+ RUN addgroup -g 1001 -S nodejs && \
53+ adduser -S kagent -u 1001 -G nodejs
54+
55+ WORKDIR /app
56+
57+ # Copy built application and production dependencies from builder stage
58+ COPY --from=builder --chown=kagent:nodejs /app/build ./build
59+ COPY --from=builder --chown=kagent:nodejs /app/node_modules ./node_modules
60+ COPY --from=builder --chown=kagent:nodejs /app/package.json ./
61+
62+ USER kagent
63+
64+ LABEL org.opencontainers.image.source=https://github.com/kagent-dev/kagent-doc2vec
65+ LABEL org.opencontainers.image.description="Kagent Doc2Vec MCP"
66+ LABEL org.opencontainers.image.authors="Kagent Creators 🤖"
67+
68+ EXPOSE 3001
1369
1470ENTRYPOINT ["node" , "build/index.js" ]
0 commit comments