FROM node:20-slim AS build WORKDIR /app COPY package*.json ./ # `npm ci` instaluje presne to, co je v lockfile. `npm install` by ho mohl # prepsat a build by pak jel na jinych verzich nez vyvoj. RUN npm ci COPY . . # Zbuilduje server (tsc -> dist) i web (vite -> dist/public) RUN npm run build FROM node:20-slim WORKDIR /app ENV NODE_ENV=production ENV PORT=3000 EXPOSE 3000 COPY package*.json ./ RUN npm ci --omit=dev COPY --from=build /app/dist ./dist # Skripty konektoru jsou obycejny JavaScript, nekompiluji se. Musi se ale # dostat do image, jinak by konektory nemely zadnou vykonnou cast. COPY --from=build /app/scripts ./scripts # Migrace jsou .sql, ktere tsc do dist nekopiruje. Bez nich by se schema # nevytvorilo, aplikace by spadla na migracich a jela dal v pameti - tedy presne # to, co ma databaze resit. Cesta musi odpovidat dist/db/migrations, protoze # odtud si je hleda src/db/migrate.ts. COPY --from=build /app/src/db/migrations ./dist/db/migrations CMD ["npm", "start"]