Skip to content

Commit ae7ee2a

Browse files
committed
fix(backend): Dockerfile workspace dep + local build/run targets
Dockerfile.bun: - Preserve packages/email-templates when flattening so workspace:* resolves - Add workspaces to package.json and re-run bun install after flatten (fixes 'Workspace dependency @docs.plus/email-templates not found') - Remove lockfile before second install (reduced workspace layout) Makefile + override: - build-backend-prod: build only rest-api, hocuspocus-server, worker (stub env) - run-backend-prod-local: run backend + redis locally with .env.local - docker-compose.backend-local.override.yml: publish 4000/4001/4002 for local Made-with: Cursor
1 parent 8260cfd commit ae7ee2a

3 files changed

Lines changed: 47 additions & 7 deletions

File tree

Makefile

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Manages: Hocuspocus Server + Webapp + Infrastructure
44
# =============================================================================
55

6-
.PHONY: help build build-dev validate-prod-build up-prod up-dev up-local infra-up infra-down infra-logs dev-local dev-backend dev-webapp dev-admin dev-rest dev-ws dev-worker down logs logs-webapp logs-backend restart clean scale scale-webapp scale-hocuspocus ps stats supabase-start supabase-stop supabase-status deploy-prod rollback-prod status-prod logs-traefik
6+
.PHONY: help build build-dev validate-prod-build build-backend-prod run-backend-prod-local up-prod up-dev up-local infra-up infra-down infra-logs dev-local dev-backend dev-webapp dev-admin dev-rest dev-ws dev-worker down logs logs-webapp logs-backend restart clean scale scale-webapp scale-hocuspocus ps stats supabase-start supabase-stop supabase-status deploy-prod rollback-prod status-prod logs-traefik
77

88
help:
99
@echo "Docsplus Full Stack Docker Commands"
@@ -12,6 +12,8 @@ help:
1212
@echo " make build - Build all services (production)"
1313
@echo " make build-dev - Build all services (development)"
1414
@echo " make validate-prod-build - Build prod images with stub env (no .env.production needed)"
15+
@echo " make build-backend-prod - Build only backend prod images (rest-api, hocuspocus, worker)"
16+
@echo " make run-backend-prod-local - Run backend prod images locally (needs .env.local)"
1517
@echo ""
1618
@echo "Running:"
1719
@echo " make up-prod - Start all services (production)"
@@ -75,6 +77,23 @@ validate-prod-build:
7577
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose -f docker-compose.prod.yml --env-file scripts/env.production.build-stub build --parallel
7678
@echo "✅ Production build validation passed"
7779

80+
# Build only backend (rest-api, hocuspocus-server, hocuspocus-worker) prod images. Same image, 3 services.
81+
# Use before pushing to verify backend Dockerfile builds; then run with run-backend-prod-local.
82+
build-backend-prod:
83+
@echo "🏗️ Building backend production images (rest-api, hocuspocus-server, hocuspocus-worker)..."
84+
@test -f scripts/env.production.build-stub || (echo "❌ scripts/env.production.build-stub missing"; exit 1)
85+
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose -f docker-compose.prod.yml --env-file scripts/env.production.build-stub build rest-api hocuspocus-server hocuspocus-worker
86+
@echo "✅ Backend production images built"
87+
88+
# Run backend prod images locally: Redis + rest-api + hocuspocus-server + hocuspocus-worker (1 replica each).
89+
# Uses .env.local for DATABASE_URL and secrets. No Traefik; override publishes 4000/4001/4002.
90+
run-backend-prod-local: build-backend-prod
91+
@test -f .env.local || (echo "❌ .env.local required (DATABASE_URL, SUPABASE_*, JWT_SECRET, etc.)"; exit 1)
92+
@echo "🚀 Starting backend (prod images) + Redis locally..."
93+
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose -f docker-compose.prod.yml -f docker-compose.backend-local.override.yml --env-file .env.local up -d redis rest-api hocuspocus-server hocuspocus-worker
94+
@echo "✅ Backend running. REST: http://localhost:4000 WS: ws://localhost:4001 Health: http://localhost:4000/health"
95+
@echo " make logs-backend - view logs"
96+
7897
build-dev:
7998
@echo "🏗️ Building all services (development)..."
8099
@docker compose -f docker-compose.dev.yml --env-file .env.development build
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Override for running backend prod images locally (no Traefik).
2+
# Use: docker compose -f docker-compose.prod.yml -f docker-compose.backend-local.override.yml --env-file .env.local up -d redis rest-api hocuspocus-server hocuspocus-worker
3+
# Then: REST http://localhost:4000 WS ws://localhost:4001 Worker health localhost:4002
4+
5+
name: docsplus
6+
7+
services:
8+
rest-api:
9+
ports:
10+
- '4000:4000'
11+
hocuspocus-server:
12+
ports:
13+
- '4001:4001'
14+
hocuspocus-worker:
15+
ports:
16+
- '4002:4002'

packages/hocuspocus.server/docker/Dockerfile.bun

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,20 @@ RUN cd packages/hocuspocus.server && bunx prisma@6 generate
8080
COPY --from=base /app/packages/hocuspocus.server/scripts/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
8181
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
8282

83-
# Flat layout for runtime: /app/src, /app/prisma, /app/node_modules, /app/package.json
83+
# Flat layout: keep packages/email-templates (workspace dep), rest at /app
8484
RUN mv packages/hocuspocus.server/src . && \
8585
mv packages/hocuspocus.server/prisma . && \
8686
cp packages/hocuspocus.server/package.json . && \
87-
rm -rf packages
88-
89-
# Re-install so node_modules is for /app only (no symlinks into deleted packages/)
90-
# Otherwise hono etc. are only in packages/.../node_modules and break after rm -rf packages
91-
RUN bun install --frozen-lockfile --production --ignore-scripts
87+
mv packages/email-templates /tmp/email-templates && \
88+
rm -rf packages && \
89+
mkdir -p packages && \
90+
mv /tmp/email-templates packages/email-templates
91+
92+
# Add workspaces so "workspace:*" @docs.plus/email-templates resolves; then re-install
93+
# so node_modules is for /app only (no symlinks into deleted packages/) and hono is found.
94+
# Remove root lockfile so Bun resolves only this workspace (hocuspocus + email-templates).
95+
RUN bun -e "const p=require('./package.json'); p.workspaces=['packages']; require('fs').writeFileSync('package.json', JSON.stringify(p,null,2));"
96+
RUN rm -f bun.lock bun.lockb && bun install --production --ignore-scripts
9297

9398
# Pre-download Prisma CLI for migrations (pin 6.19.0)
9499
RUN bunx --bun prisma@6.19.0 --version || true

0 commit comments

Comments
 (0)