From 5a890ac253ad9663dcc3d99301fe994ac238c434 Mon Sep 17 00:00:00 2001 From: Vladimir nett00n Budylnikov Date: Tue, 16 Sep 2025 17:12:14 +0400 Subject: [PATCH] 2025-09-16 17:12:14+04:00 --- .dockerignore | 6 ++++++ Dockerfile | 51 ++++++++++++++++++++++++++++++++++----------------- 2 files changed, 40 insertions(+), 17 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..54b5021 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +.git +.next +dist +*.log +.env.local diff --git a/Dockerfile b/Dockerfile index fa7abae..3b1e296 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,10 +3,19 @@ FROM node:20-alpine AS deps WORKDIR /app RUN npm install -g pnpm@9.0.0 -# Copy dependency files first for better caching -COPY package.json pnpm-lock.yaml turbo.json ./ +# Copy all package.json files for proper dependency resolution +COPY package.json pnpm-lock.yaml turbo.json pnpm-workspace.yaml ./ COPY apps/web/package.json ./apps/web/ -# Add other app package.json files as needed +COPY apps/pocketbase/package.json ./apps/pocketbase/ +COPY packages/*/package.json ./packages/ + +# Create the directory structure that might be missing +RUN mkdir -p packages/ui packages/eslint-config packages/typescript-config + +# Copy package.json files to their correct locations +COPY packages/ui/package.json ./packages/ui/ +COPY packages/eslint-config/package.json ./packages/eslint-config/ +COPY packages/typescript-config/package.json ./packages/typescript-config/ RUN pnpm install --frozen-lockfile @@ -15,39 +24,47 @@ FROM node:20-alpine AS builder WORKDIR /app RUN npm install -g pnpm@9.0.0 -# Copy dependencies from previous stage +# Copy dependencies and source COPY --from=deps /app/node_modules ./node_modules -COPY --from=deps /app/package.json /app/pnpm-lock.yaml /app/turbo.json ./ - -# Copy source code +COPY --from=deps /app/pnpm-lock.yaml ./ COPY . . -# Build the application -RUN pnpm build +# Build only the web app +RUN pnpm turbo build --filter=web # Stage 3: Runtime FROM node:20-alpine AS runtime WORKDIR /app -# Install pnpm for production RUN npm install -g pnpm@9.0.0 -# Copy package files +# Copy package files for production install COPY package.json pnpm-lock.yaml turbo.json ./ COPY apps/web/package.json ./apps/web/ +COPY packages/*/package.json ./packages/ # Install only production dependencies RUN pnpm install --prod --frozen-lockfile -# Copy built application from builder -COPY --from=builder /app/apps/web/dist ./apps/web/dist -COPY --from=builder /app/apps/web/server.js ./apps/web/ -# Copy other necessary runtime files +# Copy built Next.js application +COPY --from=builder /app/apps/web/.next ./apps/web/.next +COPY --from=builder /app/apps/web/public ./apps/web/public +COPY --from=builder /app/apps/web/next.config.js ./apps/web/ +COPY --from=builder /app/apps/web/package.json ./apps/web/ -# Create non-root user for security +# Copy other necessary files +COPY --from=builder /app/apps/web/lib ./apps/web/lib +COPY --from=builder /app/apps/web/messages ./apps/web/messages + +# Create non-root user RUN addgroup -g 1001 -S nodejs && \ adduser -S nextjs -u 1001 + +# Change ownership of the app directory +RUN chown -R nextjs:nodejs /app USER nextjs EXPOSE 3000 -CMD ["node", "apps/web/server.js"] + +# Use Next.js start command +CMD ["pnpm", "--filter=web", "start"]