From 8307e1b9379c35b32d922b74757e940cf6f8bfe0 Mon Sep 17 00:00:00 2001 From: Jeffrey Graham Date: Tue, 10 Nov 2026 04:35:32 -0500 Subject: [PATCH] build(indexer): slim Docker image with multi-stage build --- indexer/Dockerfile | 16 +++++++++++++++- indexer/package-lock.json | 9 +-------- indexer/package.json | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/indexer/Dockerfile b/indexer/Dockerfile index d8cb0a0..bca755d 100644 --- a/indexer/Dockerfile +++ b/indexer/Dockerfile @@ -1,4 +1,4 @@ -FROM node:20-alpine +FROM node:20-alpine AS builder RUN apk add --no-cache openssl @@ -13,8 +13,22 @@ RUN npx prisma generate COPY tsconfig.json ./ COPY src ./src RUN npm run build +RUN npm prune --omit=dev + +FROM node:20-alpine AS runner + +RUN apk add --no-cache openssl + +WORKDIR /app +ENV NODE_ENV=production RUN addgroup -S -g 1001 app && adduser -S -u 1001 -G app app + +COPY --from=builder --chown=app:app /app/package.json ./package.json +COPY --from=builder --chown=app:app /app/node_modules ./node_modules +COPY --from=builder --chown=app:app /app/prisma ./prisma +COPY --from=builder --chown=app:app /app/dist ./dist + USER app CMD ["sh", "-c", "npx prisma migrate deploy && exec node dist/index.js"] diff --git a/indexer/package-lock.json b/indexer/package-lock.json index bf23942..fb64a29 100644 --- a/indexer/package-lock.json +++ b/indexer/package-lock.json @@ -10,12 +10,12 @@ "dependencies": { "@prisma/client": "^5.20.0", "@stellar/stellar-sdk": "^16.2.0", + "prisma": "^5.20.0", "prom-client": "^15.1.3" }, "devDependencies": { "@types/node": "^20.0.0", "eslint": "^9.0.0", - "prisma": "^5.20.0", "tsx": "^4.19.0", "typescript": "^5.0.0", "typescript-eslint": "^8.66.0", @@ -746,14 +746,12 @@ "version": "5.22.0", "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.22.0.tgz", "integrity": "sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ==", - "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines": { "version": "5.22.0", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.22.0.tgz", "integrity": "sha512-UNjfslWhAt06kVL3CjkuYpHAWSO6L4kDCVPegV6itt7nD1kSJavd3vhgAEhjglLJJKEdJ7oIqDJ+yHk6qO8gPA==", - "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -767,14 +765,12 @@ "version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2", "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2.tgz", "integrity": "sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ==", - "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { "version": "5.22.0", "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.22.0.tgz", "integrity": "sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA==", - "devOptional": true, "license": "Apache-2.0", "dependencies": { "@prisma/debug": "5.22.0", @@ -786,7 +782,6 @@ "version": "5.22.0", "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.22.0.tgz", "integrity": "sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==", - "devOptional": true, "license": "Apache-2.0", "dependencies": { "@prisma/debug": "5.22.0" @@ -2322,7 +2317,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3182,7 +3176,6 @@ "version": "5.22.0", "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.22.0.tgz", "integrity": "sha512-vtpjW3XuYCSnMsNVBjLMNkTj6OZbudcPPTPYHqX0CJfpcdWciI1dM8uHETwmDxxiqEwCIE6WvXucWUetJgfu/A==", - "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { diff --git a/indexer/package.json b/indexer/package.json index 239ea6f..41171b0 100644 --- a/indexer/package.json +++ b/indexer/package.json @@ -19,12 +19,12 @@ "dependencies": { "@prisma/client": "^5.20.0", "@stellar/stellar-sdk": "^16.2.0", + "prisma": "^5.20.0", "prom-client": "^15.1.3" }, "devDependencies": { "@types/node": "^20.0.0", "eslint": "^9.0.0", - "prisma": "^5.20.0", "tsx": "^4.19.0", "typescript": "^5.0.0", "typescript-eslint": "^8.66.0",