FROM node:22-bookworm-slim AS base ENV PNPM_HOME=/pnpm ENV PATH=$PNPM_HOME:$PATH RUN corepack enable WORKDIR /app FROM base AS deps COPY package.json pnpm-lock.yaml pnpm-workspace.yaml tsconfig.base.json ./ COPY packages/shared/package.json packages/shared/package.json COPY apps/api/package.json apps/api/package.json COPY apps/web/package.json apps/web/package.json RUN pnpm install --frozen-lockfile FROM deps AS build COPY packages packages COPY apps/api apps/api RUN pnpm --filter @readabook/shared build RUN pnpm --filter @readabook/api build RUN pnpm --filter @readabook/api deploy --prod /prod FROM node:22-bookworm-slim AS runtime ARG OCI_IMAGE_CREATED ARG OCI_IMAGE_REVISION ARG OCI_IMAGE_VERSION=latest LABEL org.opencontainers.image.title="ReadaBook API" \ org.opencontainers.image.description="ReadaBook NestJS API service" \ org.opencontainers.image.source="https://gitea.anthonybouteiller.ovh/blomios/ReadaBook" \ org.opencontainers.image.created="${OCI_IMAGE_CREATED}" \ org.opencontainers.image.revision="${OCI_IMAGE_REVISION}" \ org.opencontainers.image.version="${OCI_IMAGE_VERSION}" ENV NODE_ENV=production ENV HOST=0.0.0.0 ENV PORT=3000 ENV DATABASE_PATH=/data/readabook.sqlite ENV STORAGE_DIR=/data/storage WORKDIR /app COPY --from=build /prod ./ EXPOSE 3000 VOLUME ["/data", "/library"] CMD ["node", "dist/main.js"]