Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
38 lines
1.8 KiB
Docker
38 lines
1.8 KiB
Docker
# 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"]
|