- Ініціалізація Next.js 15.4.11 + Payload CMS 3.x (PostgreSQL/Drizzle) - Docker Compose: PostgreSQL, Twenty CRM, Umami, Metabase - Tailwind CSS 4 з brand кольорами (green/orange/blue/purple/yellow) - Шрифти: Montserrat Alternates + Rubik через next/font/google - shadcn/ui компоненти: Button, Input, Label, Textarea, Badge, Card, Separator - Payload колекції: Users (ролі SUPER_ADMIN/ADMIN/EDITOR), Media (upload з sizes) - Access control: isAdmin, isEditor, isSuperAdmin, isAdminOrPublished - .env.example з усіма змінними середовища - Dockerfile (multi-stage, output: standalone) - Білд успішно проходить перевірку TypeScript Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
50 lines
1.6 KiB
Docker
50 lines
1.6 KiB
Docker
# ─── Stage 1: Dependencies ───────────────────────────────────────
|
|
FROM node:20-alpine AS deps
|
|
RUN corepack enable && corepack prepare pnpm@latest --activate
|
|
WORKDIR /app
|
|
|
|
COPY package.json pnpm-lock.yaml* .npmrc ./
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
# ─── Stage 2: Builder ─────────────────────────────────────────────
|
|
FROM node:20-alpine AS builder
|
|
RUN corepack enable && corepack prepare pnpm@latest --activate
|
|
WORKDIR /app
|
|
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY . .
|
|
|
|
# Генерація Payload типів та importMap перед білдом
|
|
RUN pnpm payload generate:importmap
|
|
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
ENV NODE_ENV=production
|
|
|
|
RUN pnpm build
|
|
|
|
# ─── Stage 3: Runner ──────────────────────────────────────────────
|
|
FROM node:20-alpine AS runner
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
|
|
RUN addgroup --system --gid 1001 nodejs && \
|
|
adduser --system --uid 1001 nextjs
|
|
|
|
# Копіюємо standalone build
|
|
COPY --from=builder /app/public ./public
|
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|
|
|
# Папка для медіафайлів
|
|
RUN mkdir -p media && chown nextjs:nodejs media
|
|
|
|
USER nextjs
|
|
|
|
EXPOSE 3000
|
|
|
|
ENV PORT=3000
|
|
ENV HOSTNAME="0.0.0.0"
|
|
|
|
CMD ["node", "server.js"]
|