feat: Streamlit 운영 대시보드 NAS 배포 (#44) #48

Merged
xhh merged 1 commit from issue-44-streamlit-nas into main 2026-04-23 02:13:27 +09:00
Owner

Summary

Streamlit 운영 대시보드 공개 조회 + Tailscale 컨트롤 하이브리드 배포.

  • frontend/streamlit/Dockerfile 멀티스테이지
  • docker-compose.ymlstreamlit 서비스 (depends_on api healthy, Traefik stock-admin.xhhan.com)
  • utils/api.pyDEFAULT_READ_API_KEY 폴백 (공개 조회 UX)
  • .env.example 에 관련 env 섹션 추가
  • README 에 배포 섹션 + 공개/Tailscale/로컬 3개 접근 시나리오

운영자 작업 (머지 후)

  • read-only 키 발급 → Secrets DEFAULT_READ_API_KEY
  • Cloudflare Tunnel 에 stock-admin.xhhan.com 매핑
  • DNS 에 stock-admin CNAME

Test plan

  • docker compose config 파싱
  • ruff clean
  • 80 tests pass
  • (머지 후 NAS) 공개 URL 로 조회 2페이지 자동 로드 확인
  • (머지 후 NAS) Tailscale on 상태에서 Manual Trigger / API Keys 활성 확인

Closes #44

## Summary Streamlit 운영 대시보드 공개 조회 + Tailscale 컨트롤 하이브리드 배포. - `frontend/streamlit/Dockerfile` 멀티스테이지 - `docker-compose.yml` 에 `streamlit` 서비스 (depends_on api healthy, Traefik `stock-admin.xhhan.com`) - `utils/api.py` 에 `DEFAULT_READ_API_KEY` 폴백 (공개 조회 UX) - `.env.example` 에 관련 env 섹션 추가 - README 에 배포 섹션 + 공개/Tailscale/로컬 3개 접근 시나리오 ## 운영자 작업 (머지 후) - read-only 키 발급 → Secrets `DEFAULT_READ_API_KEY` - Cloudflare Tunnel 에 `stock-admin.xhhan.com` 매핑 - DNS 에 `stock-admin` CNAME ## Test plan - [x] `docker compose config` 파싱 - [x] ruff clean - [x] 80 tests pass - [ ] (머지 후 NAS) 공개 URL 로 조회 2페이지 자동 로드 확인 - [ ] (머지 후 NAS) Tailscale on 상태에서 Manual Trigger / API Keys 활성 확인 Closes #44
feat: Streamlit 운영 대시보드 NAS 배포 (#44)
All checks were successful
Tests (PR) / pytest (pull_request) Successful in 25s
8c0b1c15aa
공개 조회 + Tailscale 컨트롤 하이브리드 배포 인프라.

추가
----
- `frontend/streamlit/Dockerfile` — 멀티스테이지. builder 에서 uv sync 로
  의존성 캐시, runtime 은 python:3.13-slim + streamlit 기본 env 설정
  (headless, 0.0.0.0 바인딩). healthcheck: `/_stcore/health`.
- `docker-compose.yml` 에 `streamlit` 서비스:
  - `depends_on: api (service_healthy)` — API 준비된 뒤 기동
  - `API_URL=http://api:8000` (compose 네트워크 내부 DNS)
  - `DEFAULT_READ_API_KEY` / `ADMIN_FORCE_ON` env 전달
  - Traefik 라벨: `Host(\`stock-admin.xhhan.com\`)`
  - `traefik-public` 네트워크 공유
- `frontend/streamlit/utils/api.py` — `_api_key()` 가 세션 state → API_KEY
  → DEFAULT_READ_API_KEY 순서로 폴백. 공개 조회 UX 확보.
- `.env.example` — `STREAMLIT_PORT`, `DEFAULT_READ_API_KEY`, `ADMIN_FORCE_ON`
  섹션 추가 + 주석.
- README — "Streamlit 운영 대시보드 (Docker Compose)" 섹션:
  기동/빌드/로그, 최초 배포 (read-only 키 발급 → .env 주입 → Cloudflare
  Tunnel 매핑 → DNS), 공개/Tailscale/로컬 3개 접근 시나리오.

검증
----
- `docker compose config` 파싱 OK
- ruff clean, 80 tests pass

운영자 작업 (이 PR 머지 후)
-------------------------
- NAS Secrets 에 `DEFAULT_READ_API_KEY` 추가 (read-only 키 발급 후)
- Cloudflare Tunnel 에 `stock-admin.xhhan.com` 서비스 매핑 추가
- DNS 에 `stock-admin` CNAME 등록

Closes #44

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
xhh merged commit 6789b4df77 into main 2026-04-23 02:13:27 +09:00
xhh deleted branch issue-44-streamlit-nas 2026-04-23 02:13:27 +09:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
xhh/financial-data-platform!48
No description provided.