67 lines
1.6 KiB
Docker
67 lines
1.6 KiB
Docker
# 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"] |