gohorsejobs/backoffice/Dockerfile
2026-01-31 10:36:39 -03:00

72 lines
No EOL
2.5 KiB
Docker

# =============================================================================
# GoHorse Backoffice - Ultra-Optimized Dockerfile
# =============================================================================
FROM mirror.gcr.io/library/node:20-alpine AS base
# Configurações básicas e pnpm com Mirror fix para evitar travamentos
RUN sed -i 's/dl-cdn.alpinelinux.org/mirror.leaseweb.com/g' /etc/apk/repositories && \
apk add --no-cache libc6-compat
RUN corepack enable && corepack prepare pnpm@latest --activate
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
# -----------------------------------------------------------------------------
# Stage 1: Dependencies
# -----------------------------------------------------------------------------
FROM base AS deps
WORKDIR /app
# Copia apenas os arquivos de definição
COPY package.json pnpm-lock.yaml ./
# Configura timeout e retry para o pnpm não travar em redes instáveis
RUN pnpm config set fetch-retries 5 && \
pnpm config set fetch-retry-maxtimeout 600000 && \
pnpm install --frozen-lockfile
# -----------------------------------------------------------------------------
# Stage 2: Builder
# -----------------------------------------------------------------------------
FROM base AS builder
WORKDIR /app
ENV NODE_OPTIONS="--max-old-space-size=2048"
# Copia os módulos instalados no estágio anterior
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Build e limpeza de cache local do build
RUN pnpm build && \
rm -rf node_modules/.cache
# Remove dependências de desenvolvimento
RUN pnpm prune --prod
# -----------------------------------------------------------------------------
# Stage 3: Production (Imagem Final Leve)
# -----------------------------------------------------------------------------
FROM mirror.gcr.io/library/node:20-alpine AS runner
# Mirror fix também na imagem final (boa prática para auditorias ou instalações extras)
RUN sed -i 's/dl-cdn.alpinelinux.org/mirror.leaseweb.com/g' /etc/apk/repositories && \
addgroup -g 1001 -S nodejs && \
adduser -S nestjs -u 1001 -G nodejs
WORKDIR /app
# Copia apenas o necessário do estágio de build
COPY --from=builder --chown=nestjs:nodejs /app/dist ./dist
COPY --from=builder --chown=nestjs:nodejs /app/node_modules ./node_modules
COPY --from=builder --chown=nestjs:nodejs /app/package.json ./
ENV NODE_ENV=production \
BACKOFFICE_PORT=3001 \
BACKOFFICE_HOST=0.0.0.0
USER nestjs
EXPOSE 3001
CMD ["node", "dist/main.js"]