From 8b9f31c77cf60928636d99952f65ddcfad973786 Mon Sep 17 00:00:00 2001 From: laoboli <1293528695@qq.com> Date: Thu, 23 Jul 2026 12:17:35 +0800 Subject: [PATCH] modify docker-compose.yml --- .dockerignore | 1 + Dockerfile | 96 ++++++++++++++++++++-------------------------- docker-compose.yml | 9 ++++- 3 files changed, 50 insertions(+), 56 deletions(-) diff --git a/.dockerignore b/.dockerignore index 61cb85b98..27a9db1d1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,6 +4,7 @@ Dockerfile .gitignore .DS_Store node_modules +.next .idea .env .env.* diff --git a/Dockerfile b/Dockerfile index d9e967b26..c4bd0d267 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,79 +1,67 @@ -ARG NODE_IMAGE_VERSION="22-alpine" -ARG PNPM_VERSION="10.15.1" -# Keep in sync with the prisma/@prisma/* versions in package.json -ARG PRISMA_VERSION="7.8.0" +ARG NODE_IMAGE_VERSION=22-alpine +ARG PNPM_VERSION=10.15.1 -# Install dependencies only when needed FROM node:${NODE_IMAGE_VERSION} AS deps -# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. -RUN apk add --no-cache libc6-compat +ARG PNPM_VERSION + +RUN apk add --no-cache libc6-compat \ + && npm install --global pnpm@${PNPM_VERSION} + WORKDIR /app -COPY package.json pnpm-lock.yaml ./ -RUN npm install -g pnpm - -RUN printf 'strictDepBuilds: false\n' > pnpm-workspace.yaml +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN pnpm install --frozen-lockfile -# Rebuild the source code only when needed FROM node:${NODE_IMAGE_VERSION} AS builder -WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules -COPY . . -COPY docker/proxy.ts ./src +ARG PNPM_VERSION ARG BASE_PATH -ENV BASE_PATH=$BASE_PATH -ENV NEXT_TELEMETRY_DISABLED=1 -ENV DATABASE_URL="postgresql://user:pass@localhost:5432/dummy" +RUN apk add --no-cache libc6-compat \ + && npm install --global pnpm@${PNPM_VERSION} -RUN npm run build-docker - -# Production image, copy all the files and run next -FROM node:${NODE_IMAGE_VERSION} AS runner WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +ENV BASE_PATH=${BASE_PATH} +ENV NEXT_TELEMETRY_DISABLED=1 +ENV DATABASE_URL=postgresql://user:pass@localhost:5432/dummy +ENV SKIP_DB_CHECK=1 +ENV SKIP_BUILD_GEO=1 + +RUN pnpm build + +FROM node:${NODE_IMAGE_VERSION} AS runner + +ARG PNPM_VERSION ARG NODE_OPTIONS -ARG PRISMA_VERSION + +RUN apk add --no-cache curl libc6-compat \ + && npm install --global pnpm@${PNPM_VERSION} \ + && addgroup --system --gid 1001 nodejs \ + && adduser --system --uid 1001 --ingroup nodejs nextjs + +WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -ENV NODE_OPTIONS=$NODE_OPTIONS - -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs -RUN set -x \ - && apk add --no-cache curl libc6-compat \ - && npm install -g pnpm - -RUN echo {} > package.json - -RUN printf "allowBuilds:\n '@prisma/engines': true\n prisma: false\nverifyDepsBeforeRun: false\n" > pnpm-workspace.yaml - -# Script dependencies -RUN pnpm add npm-run-all dotenv chalk semver \ - prisma@${PRISMA_VERSION} \ - @prisma/client@${PRISMA_VERSION} \ - @prisma/adapter-pg@${PRISMA_VERSION} +ENV NODE_OPTIONS=${NODE_OPTIONS} +ENV HOSTNAME=0.0.0.0 +ENV PORT=3000 +COPY --from=builder --chown=nextjs:nodejs /app/package.json ./package.json +COPY --from=builder --chown=nextjs:nodejs /app/pnpm-lock.yaml ./pnpm-lock.yaml +COPY --from=builder --chown=nextjs:nodejs /app/pnpm-workspace.yaml ./pnpm-workspace.yaml +COPY --from=builder --chown=nextjs:nodejs /app/next.config.ts ./next.config.ts +COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules COPY --from=builder --chown=nextjs:nodejs /app/public ./public -COPY --from=builder /app/prisma ./prisma -COPY --from=builder /app/prisma.config.ts ./prisma.config.ts -COPY --from=builder /app/scripts ./scripts -COPY --from=builder /app/generated ./generated - -# Automatically leverage output traces to reduce image size -# https://nextjs.org/docs/advanced-features/output-file-tracing -COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ -COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next USER nextjs EXPOSE 3000 -ENV HOSTNAME=0.0.0.0 -ENV PORT=3000 - -CMD ["npm", "run", "start-docker"] +CMD ["pnpm", "start"] diff --git a/docker-compose.yml b/docker-compose.yml index 348c294ca..aebdb80ad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,17 @@ --- services: umami: - image: ghcr.io/umami-software/umami:latest + image: umami-local:latest + build: + context: . + dockerfile: Dockerfile ports: - - "3000:3000" + - "3003:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami APP_SECRET: replace-me-with-a-random-string + volumes: + - ./geo/GeoLite2-City.mmdb:/app/geo/GeoLite2-City.mmdb:ro depends_on: db: condition: service_healthy