sdk_signer/Dockerfile

51 lines
1.2 KiB
Docker

FROM node:18-slim AS builder
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-slim
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app/dist ./dist
COPY --from=builder /usr/src/app/package.json ./package.json
COPY --from=builder /usr/src/app/node_modules ./node_modules
EXPOSE 3000
ENV PORT=3000
CMD ["node","dist/index.js"]
FROM node:20-alpine AS base
# Install production dependencies only by default
ENV NODE_ENV=production
WORKDIR /app
# Install build dependencies
FROM base AS deps
ENV NODE_ENV=development
RUN apk add --no-cache python3 make g++
COPY package.json package-lock.json* ./
RUN npm ci
# Build TypeScript
FROM deps AS build
COPY tsconfig.json ./
COPY src ./src
COPY pkg ./pkg
RUN npm run build
# Runtime image
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
RUN addgroup -S nodejs && adduser -S nodejs -G nodejs
COPY --from=deps /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
COPY --from=build /app/pkg ./pkg
RUN echo '{"type":"commonjs"}' > /app/pkg/package.json
# Create data directory for LevelDB with proper permissions
RUN mkdir -p /app/data && chown -R nodejs:nodejs /app/data
EXPOSE 9090
USER nodejs
CMD ["node", "dist/index.js"]