| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- FROM node:20-alpine AS base
- RUN apk add --no-cache openssl openssl-dev && \
- corepack enable && corepack prepare pnpm@9.15.4 --activate
- ENV PRISMA_QUERY_ENGINE_BINARY_TARGETS="linux-musl-arm64-openssl-3.0.x,linux-musl-openssl-3.0.x"
- WORKDIR /app
- # --- Install dependencies ---
- FROM base AS deps
- COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
- COPY packages/core/package.json packages/core/
- COPY packages/weather-engine/package.json packages/weather-engine/
- COPY packages/market-engine/package.json packages/market-engine/
- COPY packages/strategy/package.json packages/strategy/
- COPY packages/trading-engine/package.json packages/trading-engine/
- COPY packages/dashboard/package.json packages/dashboard/
- RUN pnpm install --frozen-lockfile
- # --- Copy source and generate Prisma client ---
- FROM deps AS source
- COPY . .
- RUN pnpm db:generate
- # --- Bot: build TS packages (no DB needed) ---
- FROM source AS bot-build
- RUN pnpm --filter @poly-weather/core build && \
- pnpm --filter @poly-weather/weather-engine build && \
- pnpm --filter @poly-weather/market-engine build && \
- pnpm --filter @poly-weather/strategy build && \
- pnpm --filter @poly-weather/trading-engine build
- # --- Bot runtime ---
- FROM bot-build AS bot
- ENV NODE_ENV=production
- EXPOSE 3001
- CMD ["sh", "-c", "pnpm --filter @poly-weather/core exec prisma db push --schema=prisma/schema.prisma --accept-data-loss && node packages/trading-engine/dist/main.js"]
- # --- Dashboard: build Next.js (all pages are force-dynamic, no DB needed at build) ---
- FROM source AS dashboard-build
- RUN pnpm --filter @poly-weather/core build && \
- pnpm --filter @poly-weather/dashboard build
- # --- Dashboard runtime ---
- FROM dashboard-build AS dashboard
- ENV NODE_ENV=production
- EXPOSE 3000
- CMD ["pnpm", "--filter", "@poly-weather/dashboard", "start"]
|