ARG NODE_VERSION="node:22-alpine" # Builder FROM ${NODE_VERSION} AS builder WORKDIR /build # Zkopírování závislostí - OpenAPI generátor COPY types/package.json ./types/ COPY types/yarn.lock ./types/ COPY types/api.yml ./types/ COPY types/schemas ./types/schemas/ COPY types/paths ./types/paths/ COPY types/openapi-ts.config.ts ./types/ # Zkopírování závislostí - server COPY server/package.json ./server/ COPY server/yarn.lock ./server/ # Zkopírování závislostí - klient COPY client/package.json ./client/ COPY client/yarn.lock ./client/ # Instalace závislostí - OpenAPI generátor WORKDIR /build/types RUN yarn install --frozen-lockfile # Instalace závislostí - server WORKDIR /build/server RUN yarn install --frozen-lockfile # Instalace závislostí - klient WORKDIR /build/client RUN yarn install --frozen-lockfile WORKDIR /build # Zkopírování build závislostí - server COPY server/tsconfig.json ./server/ COPY server/src ./server/src/ # Zkopírování build závislostí - klient COPY client/tsconfig.json ./client/ COPY client/vite.config.ts ./client/ COPY client/vite-env.d.ts ./client/ COPY client/index.html ./client/ COPY client/src ./client/src COPY client/public ./client/public # Zkopírování společných typů COPY types/index.ts ./types/ # Vygenerování společných typů z OpenAPI WORKDIR /build/types RUN yarn openapi-ts # Sestavení serveru WORKDIR /build/server RUN yarn build # Sestavení klienta WORKDIR /build/client RUN yarn build # Runner FROM ${NODE_VERSION} RUN apk add --no-cache tzdata ENV TZ=Europe/Prague \ LC_ALL=cs_CZ.UTF-8 \ NODE_ENV=production WORKDIR /app # Vykopírování sestaveného serveru COPY --from=builder /build/server/node_modules ./server/node_modules COPY --from=builder /build/server/dist ./ # Vykopírování sestaveného klienta COPY --from=builder /build/client/dist ./public # Zkopírování produkčních .env serveru COPY /server/.env.production ./server/src # Zkopírování konfigurace easter eggů RUN if [ -f /server/.easter-eggs.json ]; then cp /server/.easter-eggs.json ./server/; fi # Export /data/db.json do složky /data VOLUME ["/data"] EXPOSE 3000 CMD [ "node", "./server/src/index.js" ]