From 8e37beb76bb6a66747a2b8f322d3e0babf2af778 Mon Sep 17 00:00:00 2001 From: yiekheng Date: Sat, 9 May 2026 22:48:48 +0800 Subject: [PATCH] chore: add web Dockerfile and dev compose service --- docker-compose.base.yml | 15 +++++++++++++++ docker-compose.dev.yml | 25 +++++++++++++++++++++++++ docker/web.Dockerfile | 34 ++++++++++++++++++++++++++++++++-- 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/docker-compose.base.yml b/docker-compose.base.yml index cd659bc..8ccbb80 100644 --- a/docker-compose.base.yml +++ b/docker-compose.base.yml @@ -24,6 +24,21 @@ services: networks: - cmbot + web: + build: + context: . + dockerfile: docker/web.Dockerfile + image: cm-whatsapp-web:local + container_name: cmbot-web + restart: unless-stopped + environment: + DATABASE_URL: ${DATABASE_URL} + DATA_DIR: ${DATA_DIR} + MEDIA_DIR: ${MEDIA_DIR} + WEB_PORT: ${WEB_PORT} + networks: + - cmbot + networks: cmbot: driver: bridge diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index a8308ae..65ab7de 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -33,3 +33,28 @@ services: - cmbot depends_on: - tools + + web: + build: + context: . + dockerfile: docker/web.Dockerfile + target: build + image: cm-whatsapp-web:dev + container_name: cmbot-web + user: "${HOST_UID:-1000}:${HOST_GID:-1000}" + working_dir: /app + command: ["pnpm", "--filter", "@cmbot/web", "dev"] + restart: unless-stopped + volumes: + - .:/app + - ./dev-data:/data + ports: + - "127.0.0.1:3000:3000" + environment: + NODE_ENV: development + DATABASE_URL: ${DATABASE_URL} + DATA_DIR: ${DATA_DIR} + MEDIA_DIR: ${MEDIA_DIR} + WEB_PORT: ${WEB_PORT} + depends_on: + - tools diff --git a/docker/web.Dockerfile b/docker/web.Dockerfile index ff78c4c..b05ece1 100644 --- a/docker/web.Dockerfile +++ b/docker/web.Dockerfile @@ -1,3 +1,33 @@ -FROM node:22-alpine +FROM node:22-alpine AS base +RUN npm install -g pnpm@9.12.0 WORKDIR /app -CMD ["echo", "web service: not yet implemented (see plan 3)"] + +FROM base AS deps +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ +COPY apps/web/package.json apps/web/ +COPY packages/db/package.json packages/db/ +COPY packages/shared/package.json packages/shared/ +RUN pnpm install --frozen-lockfile + +FROM base AS build +COPY --from=deps /app/node_modules /app/node_modules +COPY --from=deps /app/apps/web/node_modules /app/apps/web/node_modules +COPY --from=deps /app/packages/db/node_modules /app/packages/db/node_modules +COPY --from=deps /app/packages/shared/node_modules /app/packages/shared/node_modules +COPY tsconfig.base.json turbo.json ./ +COPY apps/web apps/web +COPY packages/db packages/db +COPY packages/shared packages/shared +RUN pnpm --filter @cmbot/shared build && \ + pnpm --filter @cmbot/db build && \ + pnpm --filter @cmbot/web build + +FROM base AS runtime +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOSTNAME=0.0.0.0 +COPY --from=build /app/apps/web/.next/standalone ./ +COPY --from=build /app/apps/web/.next/static ./apps/web/.next/static +COPY --from=build /app/apps/web/public ./apps/web/public +EXPOSE 3000 +CMD ["node", "apps/web/server.js"]