PostHog loads after the page is idle through a same-origin /ingest proxy and follows the signed-in Convex user. Plausible uses the per-site script through a /pa proxy. Sentry keeps errors and traces only. Pages load only the @spoon/ui modules they import, and client code reads public env from publicEnv.ts so zod stays out of the browser. Both analytics integrations stay off until their env is set in Infisical prod.
68 lines
2.0 KiB
Docker
68 lines
2.0 KiB
Docker
# syntax=docker/dockerfile:1
|
|
FROM docker.io/oven/bun:1.3.10-alpine AS base
|
|
|
|
# Builder stage
|
|
FROM base AS builder
|
|
RUN apk add --no-cache libc6-compat
|
|
WORKDIR /app
|
|
|
|
ARG SENTRY_AUTH_TOKEN
|
|
ARG SENTRY_DISABLE_AUTO_UPLOAD=false
|
|
ARG NEXT_PUBLIC_SITE_URL
|
|
ARG NEXT_PUBLIC_CONVEX_URL
|
|
ARG NEXT_PUBLIC_PLAUSIBLE_SRC
|
|
ARG NEXT_PUBLIC_POSTHOG_KEY
|
|
ARG NEXT_PUBLIC_POSTHOG_HOST
|
|
ARG NEXT_PUBLIC_SENTRY_DSN
|
|
ARG NEXT_PUBLIC_SENTRY_URL
|
|
ARG NEXT_PUBLIC_SENTRY_ORG
|
|
ARG NEXT_PUBLIC_SENTRY_PROJECT_NAME
|
|
ARG NEXT_PUBLIC_SPOON_AGENT_WORKER_WS_URL
|
|
|
|
ENV SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN
|
|
ENV SENTRY_DISABLE_AUTO_UPLOAD=$SENTRY_DISABLE_AUTO_UPLOAD
|
|
ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL
|
|
ENV NEXT_PUBLIC_CONVEX_URL=$NEXT_PUBLIC_CONVEX_URL
|
|
ENV NEXT_PUBLIC_PLAUSIBLE_SRC=$NEXT_PUBLIC_PLAUSIBLE_SRC
|
|
ENV NEXT_PUBLIC_POSTHOG_KEY=$NEXT_PUBLIC_POSTHOG_KEY
|
|
ENV NEXT_PUBLIC_POSTHOG_HOST=$NEXT_PUBLIC_POSTHOG_HOST
|
|
ENV NEXT_PUBLIC_SENTRY_DSN=$NEXT_PUBLIC_SENTRY_DSN
|
|
ENV NEXT_PUBLIC_SENTRY_URL=$NEXT_PUBLIC_SENTRY_URL
|
|
ENV NEXT_PUBLIC_SENTRY_ORG=$NEXT_PUBLIC_SENTRY_ORG
|
|
ENV NEXT_PUBLIC_SENTRY_PROJECT_NAME=$NEXT_PUBLIC_SENTRY_PROJECT_NAME
|
|
ENV NEXT_PUBLIC_SPOON_AGENT_WORKER_WS_URL=$NEXT_PUBLIC_SPOON_AGENT_WORKER_WS_URL
|
|
|
|
# Copy source code (node_modules excluded via .dockerignore)
|
|
COPY . .
|
|
|
|
# Install all dependencies
|
|
ENV HUSKY=0
|
|
RUN bun install --frozen-lockfile
|
|
|
|
# Build with proper environment
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
ENV NODE_ENV=production
|
|
RUN cd apps/next && bun run build:docker
|
|
|
|
# Runner stage
|
|
FROM docker.io/library/node:22-alpine AS runner
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
|
|
RUN addgroup --system --gid 1001 nodejs && \
|
|
adduser --system --uid 1001 nextjs
|
|
|
|
# Copy built application
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/.next/standalone ./
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/.next/static ./apps/next/.next/static
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/public ./apps/next/public
|
|
|
|
USER nextjs
|
|
EXPOSE 3000
|
|
ENV PORT=3000
|
|
ENV HOSTNAME="0.0.0.0"
|
|
|
|
CMD ["node", "apps/next/server.js"]
|