# Multi-stage Dockerfile para Backend (API + Worker) FROM node:20-alpine AS base # Instalar dependencias del sistema RUN apk add --no-cache \ python3 \ make \ g++ \ curl \ wget WORKDIR /app # Copiar archivos de dependencias COPY package*.json ./ # Instalar dependencias RUN npm install --omit=dev && \ npm cache clean --force # Copiar código fuente COPY . . # ================================ # Stage para API # ================================ FROM base AS api ENV NODE_ENV=production ENV PORT=3000 # Crear usuario no-root RUN addgroup -g 1001 -S nodejs && \ adduser -S nodejs -u 1001 USER nodejs EXPOSE 3000 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD wget --quiet --tries=1 --spider http://localhost:3000/health || exit 1 CMD ["node", "src/api/server.js"] # ================================ # Stage para Worker # ================================ FROM base AS worker ENV NODE_ENV=production # Crear usuario no-root RUN addgroup -g 1001 -S nodejs && \ adduser -S nodejs -u 1001 USER nodejs # Health check para worker (verifica que el proceso esté corriendo) HEALTHCHECK --interval=60s --timeout=10s --start-period=40s --retries=3 \ CMD pgrep -f "node.*worker" || exit 1 CMD ["node", "src/worker/gtfs-poller.js"] # ================================ # Stage de desarrollo (opcional) # ================================ FROM node:20-alpine AS development RUN apk add --no-cache \ python3 \ make \ g++ \ curl \ wget WORKDIR /app COPY package*.json ./ RUN npm install COPY . . ENV NODE_ENV=development CMD ["npm", "run", "dev"]