5f903797f1
CI / Generate TypeScript types (push) Successful in 1m8s
CI / Server unit tests (push) Successful in 34s
CI / Build server (push) Successful in 1m39s
CI / Build client (push) Successful in 17m30s
CI / Playwright E2E tests (push) Successful in 15m25s
CI / Build and push Docker image (push) Successful in 12m57s
CI / Notify (push) Successful in 11s
122 lines
4.0 KiB
Docker
122 lines
4.0 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/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 base ──────────────────────────────────────────────────────────────
|
||
# Společný základ pro oba runner targety – nastaví prostředí a metadata běhu.
|
||
FROM ${NODE_VERSION} AS runner-base
|
||
|
||
RUN apk add --no-cache tzdata
|
||
ENV TZ=Europe/Prague \
|
||
LC_ALL=cs_CZ.UTF-8 \
|
||
NODE_ENV=production
|
||
|
||
WORKDIR /app
|
||
|
||
# Export /data/db.json do složky /data
|
||
VOLUME ["/data"]
|
||
|
||
EXPOSE 3000
|
||
|
||
CMD [ "node", "./server/src/index.js" ]
|
||
|
||
# ─── Runner (default) ─────────────────────────────────────────────────────────
|
||
# Použití: docker build . (lokální sestavení – vše se buildí uvnitř image)
|
||
FROM runner-base AS runner
|
||
|
||
# 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
|
||
|
||
# Zkopírování changelogů (seznamu novinek)
|
||
COPY /server/changelogs ./server/changelogs
|
||
|
||
# Zkopírování konfigurace easter eggů
|
||
RUN if [ -f ./server/.easter-eggs.json ]; then cp ./server/.easter-eggs.json ./server/; fi
|
||
|
||
# ─── Runner (prebuilt) ────────────────────────────────────────────────────────
|
||
# Použití: docker build --target runner-prebuilt .
|
||
# Očekává předem sestavené artefakty v build kontextu (server/dist,
|
||
# client/dist, server/node_modules) – využívá Gitea Actions, kde se
|
||
# server i klient buildí v separátních jobech a sem se jen kopírují.
|
||
FROM runner-base AS runner-prebuilt
|
||
|
||
# Vykopírování sestaveného serveru
|
||
COPY ./server/node_modules ./server/node_modules
|
||
COPY ./server/dist ./
|
||
|
||
# Vykopírování sestaveného klienta
|
||
COPY ./client/dist ./public
|
||
|
||
# Zkopírování changelogů (seznamu novinek)
|
||
COPY ./server/changelogs ./server/changelogs
|
||
|
||
# Zkopírování konfigurace easter eggů
|
||
RUN if [ -f ./server/.easter-eggs.json ]; then cp ./server/.easter-eggs.json ./server/; fi
|