spb/datacenterindex
Public
HTML 53.9%
TypeScript 44.5%
JavaScript 0.6%
SQL 0.5%
1# syntax=docker/dockerfile:1.72# DataCenterIndex — Fastify API image (apps/api, run with tsx like the worker).3# Build context = repo root: docker build -f deploy/docker/Dockerfile.api .4ARG NODE_IMAGE=node:22-bookworm-slim5ARG PNPM_VERSION=11.1.26ARG TSX_VERSION=4.23.1378FROM ${NODE_IMAGE} AS base9ARG PNPM_VERSION10ENV PNPM_HOME=/pnpm \11 PATH=/pnpm:$PATH \12 npm_config_store_dir=/pnpm/store13RUN (corepack enable && corepack prepare "pnpm@${PNPM_VERSION}" --activate) \14 || npm install -g "pnpm@${PNPM_VERSION}" --no-fund --no-audit1516FROM base AS fetch17WORKDIR /app18COPY pnpm-lock.yaml pnpm-workspace.yaml ./19RUN --mount=type=cache,id=dci-pnpm-store,target=/pnpm/store pnpm fetch --prod && rm -rf node_modules2021FROM fetch AS deps22COPY . .23RUN --mount=type=cache,id=dci-pnpm-store,target=/pnpm/store \24 pnpm install --offline --frozen-lockfile --config.dangerously-allow-all-builds=true --config.confirm-modules-purge=false --prod --filter "@dci/api..." \25 && rm -rf apps/web apps/worker scripts2627FROM ${NODE_IMAGE} AS runtime28ARG TSX_VERSION29ENV NODE_ENV=production \30 NODE_OPTIONS=--enable-source-maps \31 DCI_CONFIG_DIR=/app/config/connectors \32 API_PORT=8311 \33 HOST=0.0.0.034RUN apt-get update \35 && apt-get install -y --no-install-recommends tini ca-certificates \36 && rm -rf /var/lib/apt/lists/* \37 && npm install -g "tsx@${TSX_VERSION}" --no-fund --no-audit \38 && npm cache clean --force39WORKDIR /app40COPY --from=deps --chown=node:node /app/package.json /app/pnpm-workspace.yaml /app/tsconfig.base.json ./41COPY --from=deps --chown=node:node /app/node_modules ./node_modules42COPY --from=deps --chown=node:node /app/packages ./packages43COPY --from=deps --chown=node:node /app/apps/api ./apps/api44COPY --from=deps --chown=node:node /app/config ./config45COPY --chmod=755 deploy/docker/entrypoint.sh /usr/local/bin/dci-entrypoint46RUN ln -s /usr/local/lib/node_modules/tsx /app/node_modules/tsx47USER node48EXPOSE 831149HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \50 CMD ["node", "-e", "fetch('http://127.0.0.1:'+(process.env.API_PORT||8311)+'/api/ready').then(r=>process.exit(r.ok?0:1),()=>process.exit(1))"]51ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/dci-entrypoint"]52CMD ["api"]53