4.7 KiB
4.7 KiB
Tailscale / vnet 런타임 메모 — 2026-06-27
결론
- Tailnet 전용 접속점은
https://alpaca-home.taile93291.ts.net이다. - 현재 머신에서
tailscale serve루트 HTTPS가http://127.0.0.1:5173으로 연결된다. - Tailnet 런타임은 API를
8010에 띄우고, Vite proxy가VITE_API_PROXY_TARGET=http://127.0.0.1:8010을 보도록 분리했다. 기존 8000 reloader 잔류와 충돌하지 않게 하기 위해서다. - Tailnet dev-login은
AUTH_DEV_LOGIN_EXTRA_ORIGINS=["https://alpaca-home.taile93291.ts.net"]가 있을 때만 dev 환경에서 열린다. prod에서는 계속 차단된다. - Tailnet dev-origin에서는 Google OAuth 버튼을 비활성화하고, 직접
/api/auth/login?provider=google을 열어도local_oauth_unavailable안내로 되돌린다. 현재 redirect URI가https://api-vignette.chanpaca.net/auth/callback로 고정되어 있어 Tailnet API가 만든 OAuth state를 public API callback이 검증할 수 없기 때문이다. 원격 수동검증은로컬 테스트 계정으로 계속을 사용한다. - Vite proxy는 원래 프론트
Host/proto를X-Forwarded-Host/X-Forwarded-Proto로 API에 넘긴다. 이 헤더가 없으면 dev OAuth 차단 redirect가 public 로그인으로 새는 회귀가 생긴다. scripts/dev-up.ps1는 API 포트와VITE_API_PROXY_TARGET을 같은 값으로 강제한다. Vite가 8010을 보는데 API가 8000/8002로 떠서/api/auth/config가 500을 내던 회귀를 막기 위한 조치다.
검증
tailscale serve status:https://alpaca-home.taile93291.ts.net→http://127.0.0.1:5173
GET https://alpaca-home.taile93291.ts.net/login→200GET https://alpaca-home.taile93291.ts.net/api/auth/config→dev_login_enabled: truePOST https://alpaca-home.taile93291.ts.net/api/auth/dev-login+ cookie 재사용GET /api/auth/me→200GET https://alpaca-home.taile93291.ts.net/api/auth/login?provider=google&next=%2Flearn→302 https://alpaca-home.taile93291.ts.net/login?oauth=local_oauth_unavailable- Playwright DOM 확인:
https://alpaca-home.taile93291.ts.net/login에로컬 테스트,학습자,교수자,관리자,로컬 테스트 계정으로 계속이 표시된다. - Tailnet auth readiness E2E:
PLAYWRIGHT_BASE_URL=https://alpaca-home.taile93291.ts.net PLAYWRIGHT_SKIP_WEB_SERVER=1 npx playwright test e2e/auth.spec.ts --project=chromium-desktop --grep "shows Google OAuth readiness"→1 passed - Tailnet dev-login E2E:
PLAYWRIGHT_BASE_URL=https://alpaca-home.taile93291.ts.net PLAYWRIGHT_SKIP_WEB_SERVER=1 npx playwright test e2e/auth.spec.ts --project=chromium-desktop --grep "shows Google OAuth readiness|logs in locally"→2 passed - 로컬 리스너:
- gateway
127.0.0.1:9099 - Tailnet API
127.0.0.1:8010 - web
127.0.0.1:5173
- gateway
- 2026-06-27 17:00 KST 재확인: Tailnet
GET /login이403 Blocked request. This host ... is not allowed를 반환하던 원인은 Vite가 stale env로 떠서VITE_ALLOWED_HOSTS=alpaca-home.taile93291.ts.net를 반영하지 못한 상태였다.scripts/start-tailscale-runtime.ps1 -ApiPort 8010 -WebPort 5173 -SkipServeUpdate재기동 후GET /login200,GET /api/healthdev/db/engine true, direct Google start 302local_oauth_unavailable로 복구 확인.
공개 vnet.18ka.net 상태
코드와 스크립트는 vnet.18ka.net / api-vnet.18ka.net을 인식하도록 준비했다.
- backend
FRONTEND_ORIGIN_MAP기본값:api-vignette.chanpaca.net→https://vignette.chanpaca.netapi-vnet.18ka.net→https://vnet.18ka.net
- frontend public API fallback:
vnet.18ka.net→https://api-vnet.18ka.net
scripts/start-public-runtime.ps1는vnet.18ka.netweb preview(5174)와api-vnet.18ka.netAPI(8001) ingress를 생성하도록 갱신했다.
아직 live 완료가 아닌 이유:
- 현재
vnet.18ka.net과api-vnet.18ka.net은 DNS가 없다. - 현재 cloudflared 인증 컨텍스트는
18ka.netzone을 관리하지 못한다.cloudflared tunnel route dns vignette vnet.18ka.net실행 시 원하는18ka.net이 아니라vnet.18ka.net.chanpaca.net레코드를 만들었다. - prod API는 현재
127.0.0.1:8001에서db:true,engine:true로 건강하다. 다만api-vnet.18ka.netDNS가 없어 외부 vnet 도메인으로는 아직 도달할 수 없다. - Google OAuth Console에도
https://api-vnet.18ka.net/auth/callback을 Authorized redirect URI로 추가해야 실제 Google 로그인이 완료된다.
재기동 명령
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\start-tailscale-runtime.ps1
공개 vnet은 DB와 DNS가 준비된 뒤:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\start-public-runtime.ps1