Scaffold webu na Payload CMS 3 + Next.js nad SQLite
CI / test (push) Failing after 1m42s
CI / build-and-push (push) Has been skipped

Kostra prezentace s vlastní administrací pro Martina Reinera.

Obsah:
- kolekce Products (obrázky, volné parametry, cena, dostupnost, skrytí),
  Media se zmenšeninami, Pages, Users bez veřejné registrace
- veřejná část: výpis nabídky, detail položky, statické stránky
- /api/health pro Docker HEALTHCHECK

Provoz:
- Dockerfile, docker-compose.yml (vývoj) a docker-compose.prod.yml
  (nasazení z Gitea registry)
- CI v Gitea Actions: lint -> testy -> build -> push image
- úvodní migrace databáze

Stránky jsou force-dynamic, aby se úprava položky projevila hned;
schéma se za běhu nedomýšlí (push: false), migrace se commitují.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-30 13:13:23 +02:00
co-authored by Claude Opus 5
parent fedccbee93
commit c8e435139e
49 changed files with 13152 additions and 49 deletions
+38
View File
@@ -0,0 +1,38 @@
# Produkční image. Záměrně BEZ Next `standalone` outputu: image je o pár set
# MB větší, ale Payload CLI (migrace) v něm funguje bez ladění file-tracingu.
# Na tento objem provozu je to správný kompromis.
FROM node:22-alpine AS base
# `corepack enable` jen vytvoří shim; bez `prepare` by si kontejner stahoval
# pnpm z npmjs.com až při startu — a bez internetu by vůbec nenaběhl.
RUN corepack enable && corepack prepare pnpm@11.18.0 --activate
WORKDIR /app
# --- závislosti (cache se zahodí jen při změně manifestů) ---
FROM base AS deps
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN pnpm install --frozen-lockfile
# --- build ---
FROM base AS build
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
# Build jen sestavuje, do databáze nesahá — placeholder stačí a zadává se
# inline, aby nezůstal v ENV vrstvě image.
RUN PAYLOAD_SECRET=build-time-placeholder-nahrazen-za-behu pnpm build
# --- runtime ---
FROM base AS runtime
ENV NODE_ENV=production \
NEXT_TELEMETRY_DISABLED=1
# sqlite jen kvůli zálohám (`.dump`), ~1,5 MB
RUN apk add --no-cache sqlite
COPY --from=build /app ./
RUN mkdir -p /app/data /app/media
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --start-period=30s --retries=3 \
CMD wget -qO- http://127.0.0.1:3000/api/health || exit 1
# Migrace proběhnou při startu, teprve pak naskočí server.
CMD ["sh", "-c", "pnpm payload migrate && pnpm start"]