Repository navigation
Expand file tree
/
Copy pathDockerfile.web
More file actions
80 lines (67 loc) · 3.89 KB
/
Copy pathDockerfile.web
File metadata and controls
80 lines (67 loc) · 3.89 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
68
69
70
71
72
73
74
75
76
77
78
79
80
FROM node:22-slim AS deps
WORKDIR /app
# Install dependencies before copying the full source so Docker can cache them.
# npm ci installs exactly from the lockfile (reproducible); legacy-peer-deps
# matches how the lock is generated.
COPY signalpilot/web/package.json signalpilot/web/package-lock.json signalpilot/web/.npmrc signalpilot/web/
RUN cd signalpilot/web && npm ci --legacy-peer-deps
RUN cd signalpilot/web && \
case "$(uname -m)" in \
aarch64) npm install --legacy-peer-deps --no-save lightningcss-linux-arm64-gnu@1.32.0 @tailwindcss/oxide-linux-arm64-gnu@4.2.4 ;; \
x86_64) npm install --legacy-peer-deps --no-save lightningcss-linux-x64-gnu@1.32.0 @tailwindcss/oxide-linux-x64-gnu@4.2.4 ;; \
esac
FROM deps AS dev
WORKDIR /app/signalpilot/web
ENV NODE_ENV=development
ENV NEXT_TELEMETRY_DISABLED=1
ENV NEXT_PUBLIC_DEPLOYMENT_MODE=local
ENV NEXT_PUBLIC_GATEWAY_URL=http://localhost:3300
ENV SP_GATEWAY_INTERNAL_URL=http://gateway:3300
EXPOSE 3200
CMD ["npm", "run", "dev", "--", "--hostname", "0.0.0.0"]
FROM deps AS builder
WORKDIR /app
ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
ARG NEXT_PUBLIC_DEPLOYMENT_MODE=local
ARG NEXT_PUBLIC_GATEWAY_URL=http://localhost:3300
ARG NEXT_PUBLIC_CHAT_TELEMETRY_ENABLED=false
# Every NEXT_PUBLIC_* the app reads is inlined into the bundle at build time,
# so each one must arrive here as a build arg. Runtime env cannot repair it.
# Empty defaults let the code fall back to its own defaults (or fail loudly).
ARG NEXT_PUBLIC_BACKEND_URL=
ARG NEXT_PUBLIC_NOTEBOOK_PROXY_URL=
ARG NEXT_PUBLIC_MCP_URL=
ARG NEXT_PUBLIC_EVAL_UPLOADS_S3_ORIGIN=
ARG NEXT_PUBLIC_SP_VERSION=
ARG SP_GATEWAY_INTERNAL_URL=http://gateway:3300
ENV NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=$NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
ENV NEXT_PUBLIC_DEPLOYMENT_MODE=$NEXT_PUBLIC_DEPLOYMENT_MODE
ENV NEXT_PUBLIC_GATEWAY_URL=$NEXT_PUBLIC_GATEWAY_URL
ENV NEXT_PUBLIC_CHAT_TELEMETRY_ENABLED=$NEXT_PUBLIC_CHAT_TELEMETRY_ENABLED
ENV NEXT_PUBLIC_BACKEND_URL=$NEXT_PUBLIC_BACKEND_URL
ENV NEXT_PUBLIC_NOTEBOOK_PROXY_URL=$NEXT_PUBLIC_NOTEBOOK_PROXY_URL
ENV NEXT_PUBLIC_MCP_URL=$NEXT_PUBLIC_MCP_URL
ENV NEXT_PUBLIC_EVAL_UPLOADS_S3_ORIGIN=$NEXT_PUBLIC_EVAL_UPLOADS_S3_ORIGIN
ENV NEXT_PUBLIC_SP_VERSION=$NEXT_PUBLIC_SP_VERSION
ENV SP_GATEWAY_INTERNAL_URL=$SP_GATEWAY_INTERNAL_URL
# Copy web app source
COPY signalpilot/web/ signalpilot/web/
# Build (standalone output bundles everything needed to run)
RUN cd signalpilot/web && npm run build -- --webpack
# ── Production runner ─────────────────────────────────────────────
FROM node:22-slim AS runner
WORKDIR /app
ENV NODE_ENV=production
ARG SP_GATEWAY_INTERNAL_URL=http://gateway:3300
ENV SP_GATEWAY_INTERNAL_URL=$SP_GATEWAY_INTERNAL_URL
# Copy standalone server (includes node_modules + server.js)
COPY --from=builder /app/signalpilot/web/.next/standalone/ ./
# Copy static assets into the paths used by the standalone server.
COPY --from=builder /app/signalpilot/web/.next/static ./.next/static
COPY --from=builder /app/signalpilot/web/public ./public
# Entrypoint: wait for local API key, then start standalone server
RUN printf '#!/bin/sh\ni=0\nwhile [ ! -f /shared/local_api_key ] && [ "$i" -lt 30 ]; do\n sleep 1\n i=$((i+1))\ndone\nif [ -f /shared/local_api_key ]; then\n export SP_LOCAL_API_KEY="$(cat /shared/local_api_key)"\nfi\nnode server.js &\nSERVER_PID=$!\ntrap "kill -TERM $SERVER_PID 2>/dev/null" TERM INT\nsleep 4\necho ""\necho " ============================================================"\necho " SignalPilot is ready!"\necho ""\necho " Open your dashboard: http://localhost:3200"\necho ""\necho " (Ctrl+click the link above, or paste it into your browser)"\necho " ============================================================"\necho ""\nwait $SERVER_PID\n' > /app/entrypoint.sh && chmod +x /app/entrypoint.sh
ENV PORT=3200
ENV HOSTNAME=0.0.0.0
EXPOSE 3200
CMD ["/app/entrypoint.sh"]