-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5049621
commit 6d16962
Showing
1 changed file
with
58 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,76 +1,86 @@ | ||
# Estágio de build | ||
FROM node:20-alpine AS builder | ||
|
||
# Definir o build argument | ||
# Definir argumentos e variáveis de ambiente no início | ||
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" | ||
|
||
# Instalar OpenSSL e outras dependências necessárias | ||
RUN apk add --no-cache openssl openssl-dev | ||
|
||
# Configurar diretório de trabalho | ||
WORKDIR /app | ||
|
||
# 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 ./ | ||
# Instalar dependências do sistema em uma única camada | ||
RUN apk add --no-cache openssl openssl-dev && \ | ||
corepack enable && \ | ||
corepack prepare pnpm@latest --activate | ||
|
||
# Copiar pacotes compartilhados | ||
# Copiar apenas arquivos necessários para instalação de dependências | ||
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./ | ||
COPY packages/ ./packages/ | ||
COPY config/ ./config/ | ||
COPY apps/api/package.json ./apps/api/ | ||
|
||
# Copiar código da API | ||
COPY apps/api/ ./apps/api/ | ||
|
||
# Instalar dependências | ||
RUN pnpm install --frozen-lockfile | ||
# Instalar dependências em uma única camada | ||
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ | ||
pnpm install --frozen-lockfile | ||
|
||
# Atualizar @prisma/client para mesma versão do prisma | ||
RUN cd apps/api && pnpm add @prisma/[email protected] | ||
|
||
# Gerar Prisma Client | ||
RUN cd apps/api && pnpm prisma generate | ||
# Copiar código fonte após instalação de dependências | ||
COPY apps/api/ ./apps/api/ | ||
|
||
# Build | ||
RUN pnpm --filter @chat/api build | ||
# Gerar Prisma Client e fazer build | ||
RUN cd apps/api && \ | ||
pnpm add @prisma/[email protected] && \ | ||
pnpm prisma generate && \ | ||
pnpm build | ||
|
||
# Imagem de produção | ||
# Estágio de produção | ||
FROM node:20-alpine | ||
|
||
RUN addgroup -S appgroup && adduser -S appuser -G appgroup | ||
# Definir variáveis de ambiente | ||
ENV NODE_ENV="production" | ||
ENV PNPM_HOME="/pnpm" | ||
ENV PATH="$PNPM_HOME:$PATH" | ||
|
||
# Instalar OpenSSL na imagem de produção também | ||
RUN apk add --no-cache openssl | ||
# 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 | ||
|
||
# Configurar diretório de trabalho | ||
WORKDIR /app | ||
|
||
RUN corepack enable && corepack prepare pnpm@latest --activate | ||
|
||
# Copiar arquivos necessários do builder | ||
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 | ||
|
||
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 | ||
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 | ||
|
||
# Comando de inicialização | ||
CMD ["pnpm", "start"] |