68 lines
1.7 KiB
Text
68 lines
1.7 KiB
Text
|
|
# Production image for Ponder indexer service
|
||
|
|
# Used in CI for E2E testing - contains all code baked in
|
||
|
|
|
||
|
|
FROM node:20-alpine AS builder
|
||
|
|
|
||
|
|
RUN apk add --no-cache git bash
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# Copy package files first for better caching
|
||
|
|
COPY package.json package-lock.json ./
|
||
|
|
COPY kraiken-lib/package.json kraiken-lib/package-lock.json ./kraiken-lib/
|
||
|
|
COPY services/ponder/package.json services/ponder/package-lock.json ./services/ponder/
|
||
|
|
|
||
|
|
# Copy ABI files needed by kraiken-lib
|
||
|
|
COPY onchain/out/Kraiken.sol/Kraiken.json ./onchain/out/Kraiken.sol/
|
||
|
|
COPY onchain/out/Stake.sol/Stake.json ./onchain/out/Stake.sol/
|
||
|
|
|
||
|
|
# Install kraiken-lib dependencies and build
|
||
|
|
WORKDIR /app/kraiken-lib
|
||
|
|
RUN npm ci --ignore-scripts
|
||
|
|
COPY kraiken-lib/ ./
|
||
|
|
RUN ./node_modules/.bin/tsc
|
||
|
|
|
||
|
|
# Install ponder dependencies
|
||
|
|
WORKDIR /app/services/ponder
|
||
|
|
RUN npm ci
|
||
|
|
|
||
|
|
# Copy ponder source
|
||
|
|
COPY services/ponder/ ./
|
||
|
|
|
||
|
|
# Copy shared config files needed by ponder
|
||
|
|
WORKDIR /app
|
||
|
|
COPY onchain/deployments*.json ./onchain/
|
||
|
|
|
||
|
|
# Production image
|
||
|
|
FROM node:20-alpine
|
||
|
|
|
||
|
|
RUN apk add --no-cache dumb-init wget postgresql-client bash
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# Copy kraiken-lib with full structure (needed for node_modules symlink resolution)
|
||
|
|
COPY --from=builder /app/kraiken-lib ./kraiken-lib
|
||
|
|
|
||
|
|
# Copy ponder with all node_modules
|
||
|
|
COPY --from=builder /app/services/ponder ./services/ponder
|
||
|
|
|
||
|
|
# Copy onchain artifacts
|
||
|
|
COPY --from=builder /app/onchain ./onchain
|
||
|
|
|
||
|
|
# Copy entrypoint
|
||
|
|
COPY docker/ci-entrypoints/ponder-ci-entrypoint.sh /entrypoint.sh
|
||
|
|
RUN chmod +x /entrypoint.sh
|
||
|
|
|
||
|
|
WORKDIR /app/services/ponder
|
||
|
|
|
||
|
|
ENV NODE_ENV=production
|
||
|
|
ENV HOST=0.0.0.0
|
||
|
|
ENV PORT=42069
|
||
|
|
|
||
|
|
EXPOSE 42069
|
||
|
|
|
||
|
|
HEALTHCHECK --interval=5s --timeout=3s --retries=12 --start-period=20s \
|
||
|
|
CMD wget --spider -q http://127.0.0.1:42069/ || exit 1
|
||
|
|
|
||
|
|
ENTRYPOINT ["dumb-init", "--", "/entrypoint.sh"]
|