Dockerfile 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. FROM node:20-alpine AS base
  2. RUN corepack enable && corepack prepare pnpm@9.15.4 --activate
  3. WORKDIR /app
  4. # --- Install dependencies ---
  5. FROM base AS deps
  6. COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
  7. COPY packages/core/package.json packages/core/
  8. COPY packages/weather-engine/package.json packages/weather-engine/
  9. COPY packages/market-engine/package.json packages/market-engine/
  10. COPY packages/strategy/package.json packages/strategy/
  11. COPY packages/trading-engine/package.json packages/trading-engine/
  12. COPY packages/dashboard/package.json packages/dashboard/
  13. RUN pnpm install --frozen-lockfile
  14. # --- Copy source and generate Prisma client ---
  15. FROM deps AS source
  16. COPY . .
  17. RUN pnpm db:generate
  18. # --- Bot: build TS packages (no DB needed) ---
  19. FROM source AS bot-build
  20. RUN pnpm --filter @poly-weather/core build && \
  21. pnpm --filter @poly-weather/weather-engine build && \
  22. pnpm --filter @poly-weather/market-engine build && \
  23. pnpm --filter @poly-weather/strategy build && \
  24. pnpm --filter @poly-weather/trading-engine build
  25. # --- Bot runtime ---
  26. FROM bot-build AS bot
  27. ENV NODE_ENV=production
  28. EXPOSE 3001
  29. CMD ["node", "packages/trading-engine/dist/main.js"]
  30. # --- Dashboard runtime (builds at startup since it needs DB access) ---
  31. FROM source AS dashboard
  32. ENV NODE_ENV=production
  33. EXPOSE 3000
  34. CMD ["sh", "-c", "pnpm --filter @poly-weather/core build && pnpm --filter @poly-weather/dashboard build && pnpm --filter @poly-weather/dashboard start"]