feat(arch): unify frontend and backend into single Go backend server with static export

- Configure Next.js static export (output: 'export') with client-side dynamic fetching
- Implement Go static serving with SPA fallback in backend/internal/router/router.go
- Unify multi-stage build in backend/Dockerfile (Node -> Go -> minimal Alpine runtime)
- Simplify root docker-compose.yml to single anl-app service on port 8080
- Update REQUIREMENTS.md DM-03 and AC-17 normative contracts to v3.0 Unified Go Backend
- Restore strict regression verification in Gate 9 (AC-35/36/37) and unittest suite
- All Go unit tests, TypeScript type checks, ESLint, and E2E gates passed clean
This commit is contained in:
2026-08-25 12:54:39 +09:00
parent 5f87631530
commit 9bdc9bdd9a
27 changed files with 597 additions and 812 deletions
+7 -39
View File
@@ -1,14 +1,16 @@
version: "3.8"
services:
anl-backend:
anl-app:
build:
context: ./backend
dockerfile: Dockerfile
container_name: anl-backend-api
context: .
dockerfile: backend/Dockerfile
args:
- NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL:-}
container_name: anl-app
restart: unless-stopped
ports:
- "${BACKEND_PORT:-8080}:8080"
- "${APP_PORT:-8080}:8080"
environment:
- HOST=0.0.0.0
- PORT=8080
@@ -19,8 +21,6 @@ services:
- ADMIN_TOKEN=${ADMIN_TOKEN:?ADMIN_TOKEN must be set -- see .env.example}
volumes:
- anl-db-data:/app/data
networks:
- anl-net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/api/v1/health"]
interval: 15s
@@ -28,38 +28,6 @@ services:
retries: 3
start_period: 5s
anl-frontend:
build:
context: ./refer_landing_page
dockerfile: Dockerfile
args:
- NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL:-http://localhost:8080/api/v1}
container_name: anl-frontend-app
restart: unless-stopped
ports:
- "${FRONTEND_PORT:-3000}:3000"
environment:
- NODE_ENV=production
- PORT=3000
- HOSTNAME=0.0.0.0
- API_BASE_URL=http://anl-backend:8080/api/v1
depends_on:
anl-backend:
condition: service_healthy
networks:
- anl-net
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/"]
interval: 20s
timeout: 5s
retries: 3
start_period: 10s
volumes:
anl-db-data:
name: anl-sqlite-storage
networks:
anl-net:
name: anl-network
driver: bridge