Fix admin URL baking: bake NEXT_PUBLIC_API_URL at Docker build time

Next.js bakes NEXT_PUBLIC_* vars into the client JS bundle at build
time, not runtime. The admin image was being built with
admin/.env.local containing NEXT_PUBLIC_API_URL=http://localhost:8000,
hardcoding localhost into the browser bundle. The runtime configMap
value had no effect on the already-compiled JS, causing prod admin
login to throw CORS errors hitting localhost.

Fix:
- Dockerfile: admin-builder stage accepts ARG NEXT_PUBLIC_API_URL and
  strips any committed .env.local/.env.development.local before
  npm run build.
- .dockerignore: explicitly exclude admin/.env.* (root-level .env.*
  pattern doesn't match nested paths), so a local dev .env.local can
  never sneak into the build context again.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-04-24 10:10:53 -05:00
parent 6d39875ef2
commit 082b5fd3cd
2 changed files with 15 additions and 1 deletions
+6 -1
View File
@@ -11,10 +11,15 @@ deploy/secrets/*.txt
deploy/secrets/*.p8
deploy/scripts/
# Local env files
# Local env files — dockerignore patterns apply from the context root, so
# the explicit admin/ line is needed to catch admin/.env.local (which would
# otherwise bake NEXT_PUBLIC_API_URL=http://localhost:8000 into the bundle).
.env
.env.*
admin/.env
admin/.env.*
!.env.example
!admin/.env.example
# Node (admin)
admin/node_modules