# Multi-stage build para OpenVidu Meet FROM node:20-alpine AS builder # Instalar pnpm RUN npm install -g pnpm # Copiar archivos del workspace WORKDIR /app COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ COPY meet-ce/backend/package.json ./meet-ce/backend/ COPY meet-ce/frontend/package.json ./meet-ce/frontend/ COPY meet-ce/frontend/projects/shared-meet-components/package.json ./meet-ce/frontend/projects/shared-meet-components/ # Instalar dependencias RUN pnpm install --frozen-lockfile # Copiar código fuente COPY . . # Build backend WORKDIR /app/meet-ce/backend RUN pnpm run build # Build frontend WORKDIR /app/meet-ce/frontend RUN pnpm run build:prod # Imagen de producción FROM node:20-alpine AS production # Instalar pnpm RUN npm install -g pnpm # Crear usuario no-root RUN addgroup -g 1001 -S nodejs && \ adduser -S openvidu -u 1001 WORKDIR /app # Copiar package.json y dependencias COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ COPY meet-ce/backend/package.json ./meet-ce/backend/ # Instalar solo dependencias de producción RUN pnpm install --prod --frozen-lockfile # Copiar archivos compilados COPY --from=builder /app/meet-ce/backend/dist ./meet-ce/backend/dist COPY --from=builder /app/meet-ce/backend/public ./meet-ce/backend/public # Cambiar propietario RUN chown -R openvidu:nodejs /app USER openvidu # Variables de entorno por defecto ENV NODE_ENV=production ENV PORT=6080 ENV MEET_BLOB_STORAGE_MODE=memory ENV MEET_LOG_LEVEL=info # Exponer puerto EXPOSE 6080 # Comando de inicio WORKDIR /app/meet-ce/backend CMD ["node", "dist/src/server.js"]