Deploy prep: Dockerfiles for admin (Next standalone) + scheduler (Bun)

admin/Dockerfile: 2-stage monorepo Next.js standalone (outputFileTracingRoot added to next.config so the bundle traces workspace deps). scheduler/Dockerfile: single-stage Bun runtime, validated by a local docker build. .dockerignore excludes node_modules/.next/.turbo/.git. Build context = monorepo root; runtime env DATABASE_URL + REDIS_URL.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Angelo B. J. Luidens
2026-06-03 16:22:15 -04:00
parent b9be5578f9
commit de3d355c80
4 changed files with 46 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
**/node_modules
**/.next
**/.turbo
.git
**/dist
**/coverage
docs
*.md
infra/docker-compose.yml
+21
View File
@@ -0,0 +1,21 @@
# Stargue Publishing Engine — admin dashboard (Next.js standalone, monorepo).
# Build context: the monorepo ROOT. Build: docker build -f apps/admin/Dockerfile .
FROM oven/bun:1 AS builder
WORKDIR /app
COPY package.json bun.lock turbo.json tsconfig.json ./
COPY packages ./packages
COPY apps ./apps
RUN bun install --frozen-lockfile
RUN bun --filter @stargue/admin run build
FROM oven/bun:1-slim AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3002
# Next standalone (outputFileTracingRoot = repo root) emits apps/admin/server.js
# plus a traced node_modules under .next/standalone.
COPY --from=builder /app/apps/admin/.next/standalone ./
COPY --from=builder /app/apps/admin/.next/static ./apps/admin/.next/static
EXPOSE 3002
CMD ["bun", "apps/admin/server.js"]
+3
View File
@@ -1,8 +1,11 @@
import type { NextConfig } from "next";
import { join } from "node:path";
const config: NextConfig = {
output: "standalone",
reactStrictMode: true,
// Trace workspace deps from the monorepo root so the standalone bundle is self-contained.
outputFileTracingRoot: join(import.meta.dirname, "../../"),
// The admin app is server-rendered (DB-backed, auth-gated); never statically exported.
transpilePackages: ["@stargue/schema", "@stargue/sanitize", "@stargue/observability"],
};
+13
View File
@@ -0,0 +1,13 @@
# Stargue Publishing Engine — scheduler (BullMQ worker, runs on Bun, no build step).
# Build context: the monorepo ROOT. Build: docker build -f apps/scheduler/Dockerfile .
FROM oven/bun:1-slim
WORKDIR /app
ENV NODE_ENV=production
COPY package.json bun.lock turbo.json ./
COPY packages ./packages
COPY apps ./apps
COPY db ./db
RUN bun install --frozen-lockfile
# Env required at runtime: DATABASE_URL, REDIS_URL
CMD ["bun", "apps/scheduler/src/main.ts"]