92 lines
2.1 KiB
Docker
92 lines
2.1 KiB
Docker
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/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/RequestTypes.ts ./types/
|
|
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" ] |