# Barev Club — образы для продакшена. # app — Node: API + воркер + боты (один процесс) и лендинг Next.js (тот же образ) # web — nginx: статика Mini App и админки + прокси /trpc и /files на API FROM node:22-alpine AS deps RUN corepack enable WORKDIR /repo COPY . . RUN pnpm install --frozen-lockfile FROM deps AS build # адреса, которые зашиваются в клиентский код при сборке ARG LANDING_URL ARG API_PUBLIC_URL ARG CLIENT_BOT_USERNAME=barevclub_bot ENV VITE_LANDING_URL=$LANDING_URL NEXT_PUBLIC_API_URL=$API_PUBLIC_URL CLIENT_BOT_USERNAME=$CLIENT_BOT_USERNAME NEXT_TELEMETRY_DISABLED=1 RUN pnpm --filter @barev/miniapp-client build \ && pnpm --filter @barev/miniapp-pro build \ && pnpm --filter @barev/admin build \ && pnpm --filter @barev/landing build FROM nginx:alpine AS web COPY --from=build /repo/apps/miniapp-client/dist /srv/client COPY --from=build /repo/apps/miniapp-pro/dist /srv/pro COPY --from=build /repo/apps/admin/dist /srv/admin COPY infra/prod/nginx.conf /etc/nginx/conf.d/default.conf FROM node:22-alpine AS app RUN corepack enable WORKDIR /repo ENV NODE_ENV=production TZ=Asia/Yerevan COPY --from=deps /repo /repo # лендинг: standalone-сборка со своими node_modules COPY --from=build /repo/apps/landing/.next/standalone /landing COPY --from=build /repo/apps/landing/.next/static /landing/apps/landing/.next/static EXPOSE 4000 3000 # при старте: миграции и синхронизация каталога, затем API + воркер + боты CMD ["sh", "-c", "cd packages/db && ./node_modules/.bin/prisma migrate deploy && ./node_modules/.bin/tsx src/scripts/sync-catalog.ts && cd /repo && exec apps/runtime/node_modules/.bin/tsx apps/runtime/index.ts"]