Files
octto-engenharia/frontend/Dockerfile

67 lines
1.5 KiB
Docker

# Build stage
FROM node:20-alpine AS builder
# Install OpenSSL for Prisma
RUN apk add --no-cache libc6-compat openssl
WORKDIR /app
# Copiar arquivos de dependências
COPY package*.json ./
COPY prisma ./prisma/
# Instalar dependências
RUN npm ci
# Copiar código fonte
COPY . .
# Gerar Prisma Client
RUN npx prisma generate
# Build da aplicação
RUN npm run build
# Production stage
FROM node:20-alpine AS runner
# Install OpenSSL for Prisma
RUN apk add --no-cache libc6-compat openssl
WORKDIR /app
# Criar usuário não-root
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# Copiar arquivos necessários do builder
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma
COPY --from=builder /app/node_modules/prisma ./node_modules/prisma
COPY --from=builder /app/node_modules/.bin ./node_modules/.bin
COPY --from=builder /app/package.json ./package.json
# Copiar script de inicialização
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
# Configurar permissões
RUN chown -R nextjs:nodejs /app
# Mudar para usuário não-root
USER nextjs
# Expor porta
EXPOSE 3000
# Definir variável de ambiente
ENV PORT=3000
ENV NODE_ENV=production
# Comando de inicialização
CMD ["/app/start.sh"]