Files
projectbrain-Public/backend/Dockerfile
T

32 lines
1.3 KiB
Docker

FROM node:24-alpine
WORKDIR /app
ENV CI=true
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
ENV npm_config_fetch_warn_timeout=60000
ENV PRISMA_SKIP_POSTINSTALL_GENERATE=true
# Prisma engines require OpenSSL at runtime. Alpine images do not always
# include it, which makes prisma migrate deploy fail with schema-engine JSON
# parse errors such as: Error loading shared library libssl.
RUN apk add --no-cache openssl libc6-compat ca-certificates
RUN corepack enable
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY backend/package.json backend/package.json
COPY packages/contracts/package.json packages/contracts/package.json
RUN pnpm install --frozen-lockfile --filter projectbrain-api... > /tmp/pnpm-install.log 2>&1 || (cat /tmp/pnpm-install.log; exit 1); awk 'index($0, "[W" "ARN] Request took") == 0 { print }' /tmp/pnpm-install.log
COPY --chown=node:node packages/contracts packages/contracts
COPY --chown=node:node backend backend
WORKDIR /app/backend
RUN pnpm run prisma:generate && pnpm run build && chmod +x scripts/docker-entrypoint.sh
EXPOSE 4000
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=10 CMD node -e "fetch('http://127.0.0.1:4000/api/system/readiness').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
USER node
CMD ["sh", "scripts/docker-entrypoint.sh"]