Files
Nexumi/apps/webui/Dockerfile
smueller 59b3ccb0ca Enhance Dockerfile and Redis configuration for improved build-time handling
- Added environment variables in Dockerfile for build-time placeholders, ensuring proper static analysis during the build process.
- Updated Redis initialization in redis.ts to include lazy connection, preventing network access during module import and improving error handling with a console log for connection errors.
2026-07-22 14:15:52 +02:00

50 lines
2.2 KiB
Docker

FROM node:22-alpine AS base
WORKDIR /app
RUN corepack enable
RUN apk add --no-cache openssl
FROM base AS deps
COPY package.json pnpm-workspace.yaml turbo.json tsconfig.base.json ./
COPY apps/webui/package.json apps/webui/package.json
COPY apps/bot/package.json apps/bot/package.json
COPY packages/shared/package.json packages/shared/package.json
RUN pnpm install --frozen-lockfile=false
FROM deps AS build
COPY apps ./apps
COPY packages ./packages
COPY eslint.config.js .eslintrc.cjs .prettierrc ./
RUN pnpm install --frozen-lockfile=false
RUN pnpm --filter @nexumi/shared build
RUN pnpm --filter @nexumi/webui prisma:generate
# `next build` statically evaluates route/module code while collecting page
# data. Our env schema and Prisma client are validated eagerly at import
# time, so the build needs *some* well-formed values even though no real
# secrets or network access are available at build time. These placeholders
# are only used for that static analysis step and are always overridden by
# the real values from `.env` (via docker-compose `env_file`) at container
# start, since this ENV only applies to this intermediate build stage and is
# never copied into the `runner` stage / final image.
# Note: this intentionally triggers a "SecretsUsedInArgOrEnv" lint warning
# because of the variable names — the values below are non-sensitive
# placeholders, not real secrets.
ENV NODE_ENV=production \
DATABASE_URL=postgresql://build:build@localhost:5432/build \
REDIS_URL=redis://localhost:6379 \
BOT_CLIENT_ID=0000000000000000000 \
BOT_CLIENT_SECRET=build-time-placeholder \
WEBUI_URL=http://localhost:3000 \
SESSION_SECRET=build-time-placeholder-session-secret-32chars \
DEFAULT_LOCALE=de
RUN pnpm --filter @nexumi/webui build
FROM base AS runner
ENV NODE_ENV=production
COPY --from=build /app/apps/webui/.next/standalone ./
COPY --from=build /app/apps/webui/.next/static ./apps/webui/.next/static
COPY --from=build /app/apps/webui/public ./apps/webui/public
EXPOSE 3000
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=5 \
CMD node -e "fetch('http://127.0.0.1:3000/api/health').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
CMD ["node", "apps/webui/server.js"]