# syntax=docker/dockerfile:1 # Imagen única: construye el front (Vite) y lo sirve desde el servidor (Fastify + Socket.IO). # ---- build del front ---- FROM node:24-alpine AS web WORKDIR /web COPY web/package.json web/package-lock.json* ./ RUN npm install COPY web/ ./ RUN npm run build # -> /web/dist # ---- producción ---- FROM node:24-alpine AS production WORKDIR /app # deps del servidor (incluye tsx y drizzle-kit; NODE_ENV se fija DESPUÉS para no # saltarse las devDependencies durante la instalación) COPY server/package.json server/package-lock.json* ./ RUN npm install # código del servidor y front compilado COPY server/ ./ COPY --from=web /web/dist ./public ENV NODE_ENV=production ENV WEB_DIST=/app/public ENV PORT=3001 EXPOSE 3001 # aplica el esquema (drizzle-kit push) y arranca el servidor CMD ["sh", "-c", "npx drizzle-kit push --force && npx tsx src/index.ts"]