# visionA — 一鍵開發環境(dev all-in-one) # # 對應:.autoflow/04-architecture/oidc-tdd.md §12 # # 服務拓撲: # # browser ──(3000)──▶ frontend (host: pnpm dev,不在 compose 內) # │ # ▼ /api/*(fetch with cookie) # browser ──(3721)──▶ visiona-api ──(internal:3801)──▶ visiona-proxy # │ ▲ # │ OIDC redirect / token │ # ▼ │ # member-center ──(5432)──▶ postgres │ # │ │ # (member-center-init) │ # local-agent (host: ./local-tool) # │ # ▼ # WS 3800 → visiona-proxy # # 使用流程(詳見 docs/DEV-SETUP.md): # # 1. 確認 ../member_center 與本 repo 同一層 # 2. 複製 .env.dev.example 成 .env.dev,視需要調整 # 3. docker compose -f docker-compose.dev.yml up -d --build # 4. 等所有 service healthy(docker compose ps) # 5. 首次啟動完成後,依 docs/DEV-SETUP.md 「OAuth Client 註冊」一節, # 手動建立 visionA OAuth client(MC admin API) # 6. 把產出的 client_id / client_secret 寫回 .env.dev → docker compose up -d 重啟 visiona-api # 7. 另開 terminal: cd visionA-frontend && pnpm dev # 8. 開瀏覽器 http://localhost:3000 → 點登入 # # 一鍵清乾淨:docker compose -f docker-compose.dev.yml down -v # # ⚠️ 此檔案僅供 dev 用,不要拿去 production。production 走 visionA-backend/docker/docker-compose.yml + IaC。 name: visiona-dev services: # ────────────────────────────────────────────────────────── # PostgreSQL — 給 Member Center 用 # ────────────────────────────────────────────────────────── postgres: image: postgres:15-alpine container_name: visiona-dev-postgres restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: membercenter ports: - "${POSTGRES_PORT:-5432}:5432" volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d membercenter"] interval: 5s timeout: 5s retries: 20 start_period: 5s networks: - visiona-dev-net # ────────────────────────────────────────────────────────── # Member Center — Innovedus SSO(OIDC provider) # # ⚠️ build context 預設 ../member_center;可用 MEMBER_CENTER_PATH 環境變數覆寫 # ────────────────────────────────────────────────────────── member-center: build: context: ${MEMBER_CENTER_PATH:-../member_center} dockerfile: src/MemberCenter.Api/Dockerfile image: visiona/member-center-api:dev container_name: visiona-dev-member-center restart: unless-stopped environment: # Connection string(雙底線 = ASP.NET Core 慣例的 nested key) ConnectionStrings__Default: "Host=postgres;Port=5432;Database=membercenter;Username=postgres;Password=postgres" ASPNETCORE_ENVIRONMENT: Development ASPNETCORE_URLS: "http://+:5050" # OIDC issuer:visionA-backend 從 container 內以 http://member-center:5050 連, # 但 browser 走 localhost。Issuer 必須跟 browser 看到的一致才能驗 id_token。 # 這裡用 http://localhost:5050 → discovery 與 id_token iss 都是這個值, # 而 visionA-backend 改 hosts 指 /etc/hosts member-center → 127.0.0.1(見下方 extra_hosts), # 即可從 container 內也用 http://localhost:5050。 Auth__Issuer: "http://localhost:5050/" Auth__AllowInsecureHttp: "true" # dev only — 允許 OIDC 跑 HTTP Auth__MemberCenterAudience: "member_center_api" Auth__SendEngineAudience: "send_engine_api" ports: - "${MEMBER_CENTER_PORT:-5050}:5050" depends_on: postgres: condition: service_healthy healthcheck: # MC image (debian-slim) 沒裝 curl/wget,改用 bash + /dev/tcp 測 TCP 連得上即可 # (能 connect 5050 即視為 alive;HTTP 200 驗證留給 caller 端做) test: - "CMD" - "bash" - "-c" - "