28 lines
886 B
Docker
28 lines
886 B
Docker
# syntax=docker/dockerfile:1
|
|||
|
|
# Imagen única: construye el front (Vite) y lo sirve desde el servidor (Fastify + Socket.IO).
|
||
|
|
|
||
|
|
# ---- build del front ----
|
||
|
|
FROM node:22-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:22-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"]
|