# syntax=docker/dockerfile:1
# Backend Medusa + dashboard admin. Contesto di build: cartella medusa/.
#   docker build -t iti-technology/medusa medusa
# `medusa build` produce apps/backend/.medusa/server (backend compilato + dashboard in public/admin) ma senza
# lockfile: nel runtime si riusano i node_modules del monorepo Medusa (installati con il lockfile e poi
# ripuliti dalle devDependencies), che Node trova risalendo le cartelle.
# All'avvio: `medusa db:migrate` (idempotente), poi `medusa start`.

ARG NODE_IMAGE=node:24-bookworm-slim

FROM ${NODE_IMAGE} AS build
WORKDIR /app
COPY package.json package-lock.json turbo.json ./
COPY apps/backend/package.json apps/backend/
RUN npm ci --no-audit --no-fund
COPY apps/backend apps/backend
# Il dashboard usa l'origine del browser come URL del backend (admin.backendUrl non impostato):
# la stessa immagine vale per qualunque dominio.
RUN cd apps/backend && npx medusa build \
  && cd /app && npm prune --omit=dev --no-audit --no-fund \
  && npm cache clean --force

FROM ${NODE_IMAGE} AS runtime
ENV NODE_ENV=production PATH=/app/node_modules/.bin:$PATH
# --chown: `medusa db:migrate` crea cartelle migrations/ vuote nei moduli che non ne hanno
COPY --from=build --chown=node:node /app/node_modules /app/node_modules
COPY --from=build /app/package.json /app/package.json
COPY --from=build /app/apps/backend/package.json /app/apps/backend/package.json
COPY --from=build /app/apps/backend/.medusa/server /app/apps/backend/.medusa/server
# Volume dei file caricati dal dashboard (immagini prodotto), serviti da Caddy su media.<dominio>/shop/
RUN mkdir -p /data/medusa-files && chown -R node:node /data/medusa-files /app/apps/backend/.medusa/server
USER node
WORKDIR /app/apps/backend/.medusa/server
EXPOSE 9000
HEALTHCHECK --interval=15s --timeout=5s --start-period=90s --retries=10 \
  CMD ["node", "-e", "fetch('http://127.0.0.1:9000/health').then(r=>process.exit(r.ok?0:1),()=>process.exit(1))"]
CMD ["sh", "-c", "medusa db:migrate && exec medusa start"]
