Frontend no longer has any wizard flow. Backend URL is baked into the bundle at build time via VITE_HF_BACKEND_BASE_URL (forwarded as a Dockerfile ARG from compose). - src/App.tsx: drop SetupWizardPage import + appState='setup' fallback + HF_WIZARD_PORT-via-localStorage probe. getApiBase() now reads import.meta.env.VITE_HF_BACKEND_BASE_URL with localStorage as an escape hatch for dev. When /config/status reports no admin yet, show a card prompting the operator to run `docker exec hf_backend hf-cli admin create-user ...`. - src/pages/SetupWizardPage.tsx: deleted (~250 lines) - src/index.css: drop .setup-wizard + .setup-* styles (~36 lines) - src/vite-env.d.ts: add VITE_HF_BACKEND_BASE_URL to ImportMetaEnv - Dockerfile: ARG VITE_HF_BACKEND_BASE_URL → ENV → npm run build Build the prod image with: docker build --build-arg VITE_HF_BACKEND_BASE_URL=https://hf-api.hangman-lab.top \ -t git.hangman-lab.top/zhi/harborforge-frontend:latest . Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
1.6 KiB
Docker
39 lines
1.6 KiB
Docker
# Build stage
|
|
FROM node:20-alpine AS build
|
|
WORKDIR /app
|
|
|
|
# Build-time backend URL — Vite inlines this into the bundle. Passed as
|
|
# `--build-arg VITE_HF_BACKEND_BASE_URL=https://hf-api.example.com` in
|
|
# the compose file. Without it the bundle calls relative paths (only
|
|
# works in dev with the Vite proxy).
|
|
ARG VITE_HF_BACKEND_BASE_URL=""
|
|
ENV VITE_HF_BACKEND_BASE_URL=${VITE_HF_BACKEND_BASE_URL}
|
|
|
|
COPY package.json package-lock.json* ./
|
|
RUN npm install
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# Runtime stage
|
|
FROM node:20-alpine
|
|
RUN npm install -g serve@14
|
|
WORKDIR /app
|
|
COPY --from=build /app ./
|
|
ENV FRONTEND_DEV_MODE=0
|
|
# OIDC-only mode flag. Injected into the SPA at container start as
|
|
# /runtime-config.js so the setup wizard knows it before the backend
|
|
# exists; /auth/config remains authoritative once the backend is up.
|
|
ARG HARBORFORGE_OIDC_ONLY=false
|
|
ENV HARBORFORGE_OIDC_ONLY=${HARBORFORGE_OIDC_ONLY}
|
|
# Optional deploy-time branding override: a URL the SPA uses for the
|
|
# logo + favicon. Empty → bundled /logo.svg default.
|
|
ARG HARBORFORGE_LOGO_URL=
|
|
ENV HARBORFORGE_LOGO_URL=${HARBORFORGE_LOGO_URL}
|
|
EXPOSE 3000
|
|
CMD ["sh", "-c", "\
|
|
if [ \"$HARBORFORGE_OIDC_ONLY\" = \"true\" ]; then OO=true; else OO=false; fi; \
|
|
CFG=\"window.__HF_RUNTIME__={\\\"oidc_only\\\":$OO,\\\"logo_url\\\":\\\"$HARBORFORGE_LOGO_URL\\\"};\"; \
|
|
mkdir -p public; printf '%s' \"$CFG\" > public/runtime-config.js; \
|
|
[ -d dist ] && printf '%s' \"$CFG\" > dist/runtime-config.js; \
|
|
if [ \"$FRONTEND_DEV_MODE\" = \"1\" ]; then npm run dev -- --host 0.0.0.0 --port 3000 --strictPort; else serve -s dist -l 3000; fi"]
|