Ka-Note/ka-note/Dockerfile

53 lines
1.4 KiB
Docker

# Stage 1: Install dependencies
FROM node:22-slim AS base
WORKDIR /app
COPY package.json package-lock.json ./
COPY shared/package.json shared/
COPY client/package.json client/
COPY server/package.json server/
RUN npm ci
# Stage 2: Build shared
FROM base AS shared-build
COPY shared/ shared/
RUN npm run build -w shared
# Stage 3: Build client
FROM shared-build AS client-build
ARG VITE_AZURE_CLIENT_ID
ARG VITE_AZURE_TENANT_ID
COPY client/ client/
RUN npm run build -w client
# Stage 4: Build server + generate migrations
FROM shared-build AS server-build
COPY server/ server/
RUN npm run build -w server
# Stage 5: Production runtime
FROM node:22-slim AS runtime
WORKDIR /app
COPY package.json package-lock.json ./
COPY shared/package.json shared/
COPY server/package.json server/
RUN npm ci --omit=dev
# Copy built artifacts
COPY --from=shared-build /app/shared/dist/ shared/dist/
COPY --from=shared-build /app/shared/src/ shared/src/
COPY --from=shared-build /app/shared/package.json shared/
COPY --from=server-build /app/server/dist/ server/dist/
COPY --from=server-build /app/server/drizzle/ server/drizzle/
COPY --from=client-build /app/client/build/ public/
ARG APP_VERSION=dev
RUN echo "{\"version\":\"$APP_VERSION\"}" > public/version.json
ENV NODE_ENV=production
ENV PORT=3001
ENV DATABASE_PATH=/home/data/ka-note.db
EXPOSE 3001
CMD ["node", "--max-http-header-size=65536", "server/dist/index.js"]