this repo has no description
at main 1.4 kB view raw
1FROM node:20-alpine as base 2 3# Install Deno 4RUN apk update && apk upgrade && \ 5 apk add --no-cache dumb-init curl unzip && \ 6 curl -fsSL https://deno.land/install.sh | sh && \ 7 mv /root/.deno/bin/deno /usr/local/bin/ && \ 8 apk del curl unzip && \ 9 rm -rf /var/cache/apk/* 10 11# Set working directory 12WORKDIR /app 13 14# DEPENDENCIES stage 15FROM base as deps 16 17# Copy package files for Deno 18COPY package.json deno.lock* ./ 19 20# Install using Deno 21RUN deno install 22 23# BUILDER stage 24FROM base as builder 25 26WORKDIR /app 27 28# Copy dependencies from deps stage 29COPY --from=deps /app/node_modules ./node_modules 30 31# Copy source code 32COPY . . 33 34# Create production build 35RUN deno task build 36 37# PRODUCTION stage 38FROM base as production 39 40# Set prod environment 41ENV NODE_ENV=production \ 42 PORT=3000 43 44# Create non-root user 45RUN addgroup -g 1001 -S nodejs && \ 46 adduser -S -u 1001 -G nodejs nodejs 47 48WORKDIR /app 49 50# Copy only necessary files from builder 51COPY --chown=nodejs:nodejs --from=builder /app/package.json ./ 52COPY --chown=nodejs:nodejs --from=builder /app/deno.lock* ./ 53COPY --chown=nodejs:nodejs --from=builder /app/node_modules ./node_modules 54COPY --chown=nodejs:nodejs --from=builder /app/build ./build 55 56# Switch to non-root user 57USER nodejs 58 59# Expose port 60EXPOSE 3000 61 62# Use dumb-init to handle signals properly 63ENTRYPOINT ["dumb-init", "--"] 64 65# Start the application 66# For adapter-node (SSR): 67CMD ["node", "build/index.js"]