diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..52ed545 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +# syntax=docker/dockerfile:1.7 + +FROM oven/bun:1.3 AS deps +WORKDIR /app +COPY package.json bun.lock ./ +COPY apps/backend/package.json apps/backend/ +COPY apps/frontend/package.json apps/frontend/ +COPY packages/api-contract/package.json packages/api-contract/ +RUN bun install --frozen-lockfile + +FROM deps AS build +WORKDIR /app +COPY . . + +ARG VITE_API_BASE_URL +ARG VITE_SUPABASE_URL +ARG VITE_SUPABASE_ANON_KEY +ENV VITE_API_BASE_URL=${VITE_API_BASE_URL} +ENV VITE_SUPABASE_URL=${VITE_SUPABASE_URL} +ENV VITE_SUPABASE_ANON_KEY=${VITE_SUPABASE_ANON_KEY} + +ARG DATABASE_URL=postgresql://placeholder:placeholder@placeholder:5432/placeholder +ENV DATABASE_URL=${DATABASE_URL} + +RUN bun run build:frontend +RUN bun --cwd apps/backend prisma generate + +FROM deps AS runner +WORKDIR /app +ENV NODE_ENV=production HOST=0.0.0.0 PORT=3000 + +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/apps/backend ./apps/backend +COPY --from=build /app/packages ./packages +COPY package.json ./ + +WORKDIR /app/apps/backend +EXPOSE 3000 +CMD ["sh", "-lc", "bun run prisma migrate deploy && bun src/server.ts"] diff --git a/apps/backend/Dockerfile b/apps/backend/Dockerfile deleted file mode 100644 index e14cfc3..0000000 --- a/apps/backend/Dockerfile +++ /dev/null @@ -1,70 +0,0 @@ -# syntax=docker/dockerfile:1.7 - -# Stage 1: Install backend dependencies (cached unless backend deps change) -FROM oven/bun:1.3 AS backend-deps -WORKDIR /app -COPY package.json ./ -COPY apps/backend/package.json apps/backend/ -COPY packages/api-contract packages/api-contract/ -RUN bun install --frozen-lockfile - -# Stage 2: Install frontend dependencies (cached unless frontend deps change) -FROM oven/bun:1.3 AS frontend-deps -WORKDIR /app -COPY package.json ./ -COPY apps/frontend/package.json apps/frontend/ -COPY packages/api-contract packages/api-contract/ -RUN bun install --frozen-lockfile - -# Stage 3: Build stage -FROM backend-deps AS build -WORKDIR /app - -# Copy frontend deps for building -COPY --from=frontend-deps /app/node_modules ./frontend_node_modules - -# Copy source code -COPY apps/backend apps/backend -COPY apps/frontend apps/frontend -COPY packages/api-contract packages/api-contract - -# Build-time variables for Vite. -ARG VITE_API_BASE_URL -ARG VITE_SUPABASE_URL -ARG VITE_SUPABASE_ANON_KEY -ENV VITE_API_BASE_URL=${VITE_API_BASE_URL} -ENV VITE_SUPABASE_URL=${VITE_SUPABASE_URL} -ENV VITE_SUPABASE_ANON_KEY=${VITE_SUPABASE_ANON_KEY} - -# Prisma 7 config resolves DATABASE_URL at generate time. -ARG DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres -ENV DATABASE_URL=${DATABASE_URL} - -# Build frontend with its own node_modules -RUN cp -R frontend_node_modules apps/frontend/node_modules -RUN bun --cwd apps/frontend run build - -# Copy frontend build output to backend public folder -RUN mkdir -p apps/backend/public && cp -R apps/frontend/dist/. apps/backend/public/ - -# Generate Prisma client -RUN bun --cwd apps/backend run prisma:generate - -# Stage 4: Runner -FROM oven/bun:1.3-slim AS runner -WORKDIR /app - -ENV NODE_ENV=production -ENV HOST=0.0.0.0 -ENV PORT=3000 - -# Copy only backend deps and built artifacts -COPY --from=backend-deps /app/node_modules ./node_modules -COPY --from=build /app/apps/backend ./apps/backend -COPY --from=build /app/packages ./packages -COPY package.json ./ - -WORKDIR /app/apps/backend -EXPOSE 3000 - -CMD ["sh", "-lc", "bun run prisma:migrate:deploy && bun run start"]