1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- # Auto-generated Dockerfile for Node.js application
- # Generated by BYOP Engine - Node.js Stack Analyzer
- FROM node:{{.NodeVersion}}-alpine
- # Set working directory
- WORKDIR /app
- {{if .SystemDeps}}
- # Install system dependencies
- RUN apk add --no-cache {{.SystemDeps | join " "}}
- {{end}}
- # Copy package files for better dependency caching
- COPY package.json ./
- {{if .HasYarnLock}}
- COPY yarn.lock ./
- {{else if .HasPnpmLock}}
- COPY pnpm-lock.yaml ./
- {{else if .HasPackageLock}}
- COPY package-lock.json ./
- {{end}}
- # Install dependencies based on package manager
- {{if eq .PackageManager "yarn"}}
- RUN yarn install --frozen-lockfile {{if .ProductionOnly}}--production{{end}}
- {{else if eq .PackageManager "pnpm"}}
- RUN corepack enable && pnpm install --frozen-lockfile {{if .ProductionOnly}}--prod{{end}}
- {{else}}
- {{if .ProductionOnly}}
- RUN npm ci --only=production
- {{else}}
- RUN npm ci
- {{end}}
- {{end}}
- # Copy source code
- COPY . .
- {{if .HasBuildScript}}
- # Build the application
- {{if eq .PackageManager "yarn"}}
- RUN yarn build
- {{else if eq .PackageManager "pnpm"}}
- RUN pnpm build
- {{else}}
- RUN npm run build
- {{end}}
- {{end}}
- {{if .PruneDevDeps}}
- # Remove development dependencies after build
- {{if eq .PackageManager "yarn"}}
- RUN yarn install --frozen-lockfile --production && yarn cache clean
- {{else if eq .PackageManager "pnpm"}}
- RUN pnpm prune --prod
- {{else}}
- RUN npm prune --production
- {{end}}
- {{end}}
- # Create non-root user for security
- RUN addgroup -g 1001 -S nodejs && \
- adduser -S nodeuser -u 1001 && \
- chown -R nodeuser:nodejs /app
- # Switch to non-root user
- USER nodeuser
- # Expose port
- EXPOSE {{.Port}}
- {{if .HealthCheckEndpoint}}
- # Add health check
- HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
- CMD wget --no-verbose --tries=1 --spider http://localhost:{{.Port}}{{.HealthCheckEndpoint}} || exit 1
- {{end}}
- # Start the application
- CMD {{.StartCommand | toJSON}}
|