93 lines
2.5 KiB
Docker
93 lines
2.5 KiB
Docker
|
|
# ============================================
|
||
|
|
# Stage 1: Dependencies
|
||
|
|
# ============================================
|
||
|
|
FROM node:24-bookworm-slim AS dependencies
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
COPY package*.json ./
|
||
|
|
|
||
|
|
RUN npm ci --only=production --ignore-scripts && \
|
||
|
|
npm cache clean --force
|
||
|
|
|
||
|
|
# ============================================
|
||
|
|
# Stage 2: Builder
|
||
|
|
# ============================================
|
||
|
|
FROM node:24-bookworm-slim AS builder
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
COPY package*.json ./
|
||
|
|
|
||
|
|
RUN npm ci --ignore-scripts && \
|
||
|
|
npm cache clean --force
|
||
|
|
|
||
|
|
COPY . .
|
||
|
|
|
||
|
|
RUN npm run build
|
||
|
|
|
||
|
|
# ============================================
|
||
|
|
# Stage 3: Oracle Instant Client
|
||
|
|
# ============================================
|
||
|
|
FROM node:24-bookworm-slim AS oracle-client
|
||
|
|
|
||
|
|
RUN apt-get update && \
|
||
|
|
apt-get install -y --no-install-recommends \
|
||
|
|
libaio1 \
|
||
|
|
wget \
|
||
|
|
unzip \
|
||
|
|
ca-certificates && \
|
||
|
|
rm -rf /var/lib/apt/lists/*
|
||
|
|
|
||
|
|
RUN mkdir -p /opt/oracle && \
|
||
|
|
wget --progress=dot:giga \
|
||
|
|
https://download.oracle.com/otn_software/linux/instantclient/2360000/instantclient-basic-linux.x64-23.6.0.24.10.zip \
|
||
|
|
-O /tmp/instantclient.zip && \
|
||
|
|
unzip -q /tmp/instantclient.zip -d /opt/oracle && \
|
||
|
|
rm /tmp/instantclient.zip && \
|
||
|
|
mv /opt/oracle/instantclient_* /opt/oracle/instantclient
|
||
|
|
|
||
|
|
# ============================================
|
||
|
|
# Stage 4: Production
|
||
|
|
# ============================================
|
||
|
|
FROM node:24-bookworm-slim AS production
|
||
|
|
|
||
|
|
LABEL maintainer="Joelson"
|
||
|
|
LABEL description="API Controle Saída Loja - NestJS + Oracle"
|
||
|
|
LABEL version="1.0"
|
||
|
|
RUN apt-get update && \
|
||
|
|
apt-get install -y --no-install-recommends \
|
||
|
|
libaio1 \
|
||
|
|
dumb-init && \
|
||
|
|
rm -rf /var/lib/apt/lists/* && \
|
||
|
|
apt-get clean
|
||
|
|
|
||
|
|
RUN groupadd -r nodejs && \
|
||
|
|
useradd -r -g nodejs -s /bin/bash -d /home/nodejs nodejs && \
|
||
|
|
mkdir -p /home/nodejs && \
|
||
|
|
chown -R nodejs:nodejs /home/nodejs
|
||
|
|
|
||
|
|
COPY --from=oracle-client /opt/oracle/instantclient /opt/oracle/instantclient
|
||
|
|
|
||
|
|
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient
|
||
|
|
ENV ORACLE_HOME=/opt/oracle/instantclient
|
||
|
|
ENV NODE_ENV=production
|
||
|
|
ENV NPM_CONFIG_LOGLEVEL=warn
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
COPY --from=dependencies --chown=nodejs:nodejs /app/node_modules ./node_modules
|
||
|
|
|
||
|
|
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
|
||
|
|
COPY --chown=nodejs:nodejs package*.json ./
|
||
|
|
|
||
|
|
USER nodejs
|
||
|
|
|
||
|
|
EXPOSE 3001
|
||
|
|
|
||
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
|
||
|
|
CMD node -e "require('http').get('http://localhost:3001/', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
||
|
|
|
||
|
|
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
||
|
|
|
||
|
|
CMD ["node", "dist/main.js"]
|