From 39deb471d976d863d2ec803f908025a2366f1486 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 6 Dec 2025 19:06:33 +0900 Subject: build(server): add Dockerfiles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add build pipeline with esbuild for production bundling. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- docker/server/Dockerfile | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docker/server/Dockerfile (limited to 'docker/server/Dockerfile') diff --git a/docker/server/Dockerfile b/docker/server/Dockerfile new file mode 100644 index 0000000..ffb2c29 --- /dev/null +++ b/docker/server/Dockerfile @@ -0,0 +1,51 @@ +# Build stage +FROM node:22-slim AS builder + +WORKDIR /app + +# Enable corepack for pnpm +RUN corepack enable && corepack prepare pnpm@10.23.0 --activate + +# Copy package files +COPY package.json pnpm-lock.yaml ./ + +# Install all dependencies (including devDependencies for build) +RUN pnpm install --frozen-lockfile + +# Copy source files +COPY tsconfig.json esbuild.mjs ./ +COPY src/server ./src/server + +# Build the server +RUN pnpm build:server + +# Production stage +FROM node:22-slim AS production + +WORKDIR /app + +# Enable corepack for pnpm +RUN corepack enable && corepack prepare pnpm@10.23.0 --activate + +# Copy package files +COPY package.json pnpm-lock.yaml ./ + +# Install production dependencies only +RUN pnpm install --frozen-lockfile --prod + +# Copy built server from builder stage +COPY --from=builder /app/dist/server ./dist/server + +# Copy drizzle migrations for database setup +COPY drizzle ./drizzle +COPY drizzle.config.ts ./ + +# Expose the port +EXPOSE 3000 + +# Set environment variables +ENV NODE_ENV=production +ENV PORT=3000 + +# Run migrations and start the server +CMD ["sh", "-c", "pnpm db:migrate && node dist/server/index.js"] -- cgit v1.2.3-70-g09d2