-
-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathDockerfile.web
More file actions
67 lines (51 loc) · 2.2 KB
/
Dockerfile.web
File metadata and controls
67 lines (51 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
FROM node:24-alpine AS builder
WORKDIR /app
# Increase Node.js heap size to avoid "JavaScript heap out of memory" in CI
ENV NODE_OPTIONS="--max-old-space-size=8192"
RUN npm install -g pnpm@9
# Copy workspace files
COPY src/Web/package.json src/Web/pnpm-lock.yaml src/Web/pnpm-workspace.yaml ./
COPY src/Web/supportedLocales.json ./
COPY src/Web/locales ./locales
COPY src/Web/packages ./packages
# Install dependencies
RUN pnpm install --frozen-lockfile
# Build workspace packages required by app
RUN pnpm --filter @nocturne/bridge run build
RUN pnpm --filter @nocturne/bot run build
# Set default build-time environment variables for SvelteKit
ENV PUBLIC_API_URL=http://localhost:1612
ENV PUBLIC_WEBSOCKET_RECONNECT_ATTEMPTS=5
ENV PUBLIC_WEBSOCKET_RECONNECT_DELAY=1000
ENV PUBLIC_WEBSOCKET_MAX_RECONNECT_DELAY=30000
ENV PUBLIC_WEBSOCKET_PING_TIMEOUT=15000
ENV PUBLIC_WEBSOCKET_PING_INTERVAL=20000
# Build the app
RUN pnpm --filter @nocturne/app run build
FROM node:24-alpine
WORKDIR /app
RUN npm install -g pnpm@9
# Copy workspace structure
COPY --from=builder /app/package.json ./
COPY --from=builder /app/pnpm-lock.yaml ./
COPY --from=builder /app/pnpm-workspace.yaml ./
COPY --from=builder /app/packages/app/package.json ./packages/app/
COPY --from=builder /app/packages/bridge/package.json ./packages/bridge/
COPY --from=builder /app/packages/bridge/dist ./packages/bridge/dist
# Install only runtime dependencies required by the app workspace package.
# This ensures server-side imports (e.g. zod) are installed in packages/app/node_modules
# where the adapter-node build resolves modules at runtime.
RUN pnpm install --prod --frozen-lockfile --filter @nocturne/app...
# Run from the app package directory so Node resolves dependencies from
# /app/packages/app/node_modules instead of relying on root hoisting.
WORKDIR /app/packages/app
# Copy built artifacts
COPY --from=builder /app/packages/app/build ./build
# Copy custom server that integrates WebSocket bridge
COPY --from=builder /app/packages/app/server.js ./server.js
# Smoke test critical runtime imports used by SvelteKit server chunks.
RUN node -e "import('zod'); import('@nocturne/bridge')"
ENV NODE_ENV=production
ENV PORT=5173
EXPOSE 5173
CMD ["node", "server.js"]