infra: add Docker Compose setup for local development
- Configure PostgreSQL 18 and Valkey 9.1 services - Create multi-stage Dockerfiles for API and Web apps - Set up pnpm workspace support in container builds - Configure hot reload via volume mounts for both services - Add healthchecks for service orchestration - Support dev/production stage targets (tsx watch vs compiled)
This commit is contained in:
parent
671d542d2d
commit
2ebf0d0a83
13 changed files with 174 additions and 7 deletions
42
apps/api/Dockerfile
Normal file
42
apps/api/Dockerfile
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# 1. select image and install pnpm
|
||||
FROM node:24-alpine AS base
|
||||
RUN npm install -g pnpm
|
||||
|
||||
# 2. dependencies
|
||||
FROM base AS deps
|
||||
WORKDIR /app
|
||||
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
|
||||
COPY apps/api/package.json ./apps/api/
|
||||
COPY packages/shared/package.json ./packages/shared/
|
||||
COPY packages/db/package.json ./packages/db/
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
# 3. Development (only stage used)
|
||||
FROM base AS dev
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . ./
|
||||
EXPOSE 3000
|
||||
CMD ["pnpm", "--filter", "api", "dev"]
|
||||
|
||||
# 4. build
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
RUN pnpm install
|
||||
RUN pnpm --filter shared build
|
||||
RUN pnpm --filter db build
|
||||
RUN pnpm --filter api build
|
||||
|
||||
# 5. run
|
||||
FROM base AS runner
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY --from=deps /app/packages/shared/package.json /app/packages/shared/package.json
|
||||
COPY --from=deps /app/packages/db/package.json /app/packages/db/package.json
|
||||
COPY --from=builder /app/apps/api/dist ./dist
|
||||
COPY --from=builder /app/packages/shared/dist /app/packages/shared/dist
|
||||
COPY --from=builder /app/packages/db/dist /app/packages/db/dist
|
||||
EXPOSE 3000
|
||||
CMD ["node", "dist/server.js"]
|
||||
19
apps/web/Dockerfile
Normal file
19
apps/web/Dockerfile
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# 1. Base
|
||||
FROM node:24-alpine AS base
|
||||
RUN npm install -g pnpm
|
||||
|
||||
# 2. Deps
|
||||
FROM base AS deps
|
||||
WORKDIR /app
|
||||
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
|
||||
COPY apps/web/package.json ./apps/web/
|
||||
COPY packages/shared/package.json ./packages/shared/
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
# 3. Dev
|
||||
FROM base AS dev
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . ./
|
||||
EXPOSE 5173
|
||||
CMD ["pnpm", "--filter", "web", "dev", "--host"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue