Skip to content

Commit

Permalink
chore: fix dockerfile
Browse files Browse the repository at this point in the history
  • Loading branch information
DiegoPorfirio01 committed Jan 1, 2025
1 parent 6d16962 commit 22009eb
Showing 1 changed file with 46 additions and 51 deletions.
97 changes: 46 additions & 51 deletions apps/api/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,84 +1,79 @@
# Estágio de build
FROM node:20-alpine AS builder

# Definir argumentos e variáveis de ambiente no início
# Definir o build argument
ARG DATABASE_URL

# Passar o build argument para variável de ambiente
ENV DATABASE_URL=${DATABASE_URL}
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
ENV NODE_ENV="production"

# Configurar diretório de trabalho
# Instalar OpenSSL e outras dependências necessárias
RUN apk add --no-cache openssl openssl-dev

WORKDIR /app

# Instalar dependências do sistema em uma única camada
RUN apk add --no-cache openssl openssl-dev && \
corepack enable && \
corepack prepare pnpm@latest --activate
# Instalar pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate

# Copiar arquivos do workspace
COPY pnpm-workspace.yaml ./
COPY package.json ./
COPY pnpm-lock.yaml ./

# Copiar apenas arquivos necessários para instalação de dependências
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./
# Copiar pacotes compartilhados
COPY packages/ ./packages/
COPY config/ ./config/
COPY apps/api/package.json ./apps/api/

# Instalar dependências em uma única camada
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm install --frozen-lockfile

# Copiar código fonte após instalação de dependências
# Copiar código da API
COPY apps/api/ ./apps/api/

# Gerar Prisma Client e fazer build
# Instalar dependências
RUN pnpm install --frozen-lockfile

# Atualizar @prisma/client e instalar prisma CLI
RUN cd apps/api && \
pnpm add @prisma/[email protected] && \
pnpm prisma generate && \
pnpm add -D [email protected]

# Gerar Prisma Client e fazer build
RUN cd apps/api && \
pnpm exec prisma generate && \
pnpm build

# Estágio de produção
# Imagem de produção
FROM node:20-alpine

# Definir variáveis de ambiente
ENV NODE_ENV="production"
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# Criar usuário não-root
RUN addgroup -S appgroup && \
adduser -S appuser -G appgroup && \
apk add --no-cache openssl && \
corepack enable && \
corepack prepare pnpm@latest --activate
# Instalar OpenSSL na imagem de produção também
RUN apk add --no-cache openssl

# Configurar diretório de trabalho
WORKDIR /app

RUN corepack enable && corepack prepare pnpm@latest --activate

# Copiar arquivos necessários do builder
COPY --chown=appuser:appgroup --from=builder /app/package.json ./
COPY --chown=appuser:appgroup --from=builder /app/pnpm-workspace.yaml ./
COPY --chown=appuser:appgroup --from=builder /app/pnpm-lock.yaml ./
COPY --chown=appuser:appgroup --from=builder /app/apps/api/package.json ./apps/api/
COPY --chown=appuser:appgroup --from=builder /app/apps/api/dist ./apps/api/dist
COPY --chown=appuser:appgroup --from=builder /app/packages ./packages
COPY --chown=appuser:appgroup --from=builder /app/config ./config
COPY --chown=appuser:appgroup --from=builder /app/node_modules ./node_modules
COPY --chown=appuser:appgroup --from=builder /app/apps/api/node_modules ./apps/api/node_modules
COPY --chown=appuser:appgroup --from=builder /app/apps/api/prisma ./apps/api/prisma

# Instalar apenas dependências de produção
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm install --prod --frozen-lockfile

# Mudar para usuário não-root
COPY --from=builder /app/package.json ./
COPY --from=builder /app/pnpm-workspace.yaml ./
COPY --from=builder /app/pnpm-lock.yaml ./
COPY --from=builder /app/apps/api/package.json ./apps/api/
COPY --from=builder /app/apps/api/dist ./apps/api/dist
COPY --from=builder /app/packages ./packages
COPY --from=builder /app/config ./config

# Copiar node_modules e garantir que o Prisma seja instalado corretamente
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/apps/api/node_modules ./apps/api/node_modules
COPY --from=builder /app/apps/api/prisma ./apps/api/prisma

# Instalar apenas as dependências de produção
RUN pnpm install --prod --frozen-lockfile

USER appuser

# Configurar diretório de trabalho final
WORKDIR /app/apps/api

# Expor porta
EXPOSE 3333

# Definir healthcheck
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget --no-verbose --tries=1 --spider http://localhost:3333/health || exit 1

Expand Down

0 comments on commit 22009eb

Please sign in to comment.