1
+ # ---- Builder Stage ----
2
+ FROM node:22-slim AS builder
3
+
4
+ # Set working directory
5
+ WORKDIR /app
6
+
7
+ # Install dependencies
8
+ # Copy package files first for better caching
9
+ COPY package.json package-lock.json* ./
10
+ # Install all dependencies (including devDependencies needed for build)
11
+ RUN npm install --production=false
12
+
13
+ # Copy source code
14
+ COPY . .
15
+
16
+ # Build the application
17
+ RUN npm run build
18
+
19
+ # Remove devDependencies after build
20
+ RUN npm prune --production
21
+
22
+
23
+ # ---- Final Stage ----
24
+ FROM node:22-slim
25
+
26
+ ENV NODE_ENV=production \
27
+ PATH="/home/service-user/.local/bin:${PATH}"
28
+
29
+ # Install mcp-proxy globally for runtime use
30
+ # Combine update, install, and clean in one layer
31
+ RUN apt-get update && \
32
+ apt-get install -y --no-install-recommends curl && \
33
+ npm install -g
[email protected] && \
34
+ npm cache clean --force && \
35
+ apt-get purge -y --auto-remove curl && \
36
+ apt-get clean && \
37
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
38
+
39
+ # Create non-root user and group
40
+ # Create app directory and set permissions
41
+ RUN groupadd --system --gid 1987 service-user && \
42
+ useradd --system --uid 1987 --gid service-user -m service-user && \
43
+ mkdir -p /app && \
44
+ chown -R service-user:service-user /app
45
+
46
+ # Set working directory
47
+ WORKDIR /app
48
+
49
+ # Copy necessary artifacts from builder stage
50
+ COPY --from=builder --chown=service-user:service-user /app/package.json ./package.json
51
+ COPY --from=builder --chown=service-user:service-user /app/node_modules ./node_modules
52
+ COPY --from=builder --chown=service-user:service-user /app/build ./build
53
+
54
+ # Switch to non-root user
55
+ USER service-user
56
+
57
+ # Expose port if necessary (Update port number if your app uses a different one)
58
+ # EXPOSE 3000
59
+
60
+ # Define the command to run the application
61
+ # CMD ["mcp-proxy", "node", "build/index.js"] # Keep original for reference
62
+ CMD ["mcp-proxy" , "node" , "build/index.js" ]
0 commit comments