Dockerfile 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. FROM node:20-alpine AS base
  2. RUN apk add --no-cache openssl openssl-dev && \
  3. corepack enable && corepack prepare pnpm@9.15.4 --activate
  4. ENV PRISMA_QUERY_ENGINE_BINARY_TARGETS="linux-musl-arm64-openssl-3.0.x,linux-musl-openssl-3.0.x"
  5. WORKDIR /app
  6. # --- Install dependencies ---
  7. FROM base AS deps
  8. COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
  9. COPY packages/core/package.json packages/core/
  10. COPY packages/weather-engine/package.json packages/weather-engine/
  11. COPY packages/market-engine/package.json packages/market-engine/
  12. COPY packages/strategy/package.json packages/strategy/
  13. COPY packages/trading-engine/package.json packages/trading-engine/
  14. COPY packages/dashboard/package.json packages/dashboard/
  15. RUN pnpm install --frozen-lockfile
  16. # --- Copy source and generate Prisma client ---
  17. FROM deps AS source
  18. COPY . .
  19. RUN pnpm db:generate
  20. # --- Bot: build TS packages (no DB needed) ---
  21. FROM source AS bot-build
  22. RUN pnpm --filter @poly-weather/core build && \
  23. pnpm --filter @poly-weather/weather-engine build && \
  24. pnpm --filter @poly-weather/market-engine build && \
  25. pnpm --filter @poly-weather/strategy build && \
  26. pnpm --filter @poly-weather/trading-engine build
  27. # --- Bot runtime ---
  28. FROM bot-build AS bot
  29. ENV NODE_ENV=production
  30. EXPOSE 3001
  31. 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"]
  32. # --- Dashboard: build Next.js (all pages are force-dynamic, no DB needed at build) ---
  33. FROM source AS dashboard-build
  34. RUN pnpm --filter @poly-weather/core build && \
  35. pnpm --filter @poly-weather/dashboard build
  36. # --- Dashboard runtime ---
  37. FROM dashboard-build AS dashboard
  38. ENV NODE_ENV=production
  39. EXPOSE 3000
  40. CMD ["pnpm", "--filter", "@poly-weather/dashboard", "start"]