this repo has no description
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"]