Portal-dias-rota/Dockerfile

76 lines
2.0 KiB
Docker

# Etapa 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
# Instalar dependências necessárias para Oracle Instant Client
RUN apk add --no-cache libaio libnsl libc6-compat curl unzip
# Baixar e instalar Oracle Instant Client
RUN mkdir -p /opt/oracle && \
cd /opt/oracle && \
curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/2340000/instantclient-basiclite-linux.x64-23.4.0.24.05.zip && \
unzip instantclient-basiclite.zip && \
rm -f instantclient-basiclite.zip && \
cd instantclient_23_4 && \
rm -f *jdbc* *occi* *mysql* *jar uidrvci genezi adrci && \
echo /opt/oracle/instantclient_23_4 > /etc/ld.so.conf.d/oracle-instantclient.conf && \
ldconfig
# Configurar variáveis de ambiente do Oracle
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_23_4:$LD_LIBRARY_PATH
# Copiar arquivos de dependências
COPY package*.json ./
# Instalar dependências
RUN npm ci
# Copiar código fonte
COPY . .
# Build da aplicação Next.js
RUN npm run build
# Etapa 2: Runtime
FROM node:20-alpine AS runner
WORKDIR /app
# Instalar dependências necessárias para Oracle Instant Client
RUN apk add --no-cache libaio libnsl libc6-compat
# Copiar Oracle Instant Client do builder
COPY --from=builder /opt/oracle/instantclient_23_4 /opt/oracle/instantclient_23_4
# Configurar LD_LIBRARY_PATH
RUN echo /opt/oracle/instantclient_23_4 > /etc/ld.so.conf.d/oracle-instantclient.conf && \
ldconfig
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_23_4:$LD_LIBRARY_PATH
# 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
# Definir permissões
RUN chown -R nextjs:nodejs /app
# Mudar para usuário não-root
USER nextjs
# Expor porta
EXPOSE 3003
# Variáveis de ambiente
ENV NODE_ENV=production
ENV PORT=3003
# Comando de inicialização
CMD ["node", "server.js"]