# exdev.co.kr 서브도메인 분리 — stock / chatbot | 서비스 | URL | |--------|-----| | **GoldenChart** | https://stock.exdev.co.kr | | **Chatbot** | https://chatbot.exdev.co.kr/chatbot/* | | **Legacy apex** | https://exdev.co.kr → stock 또는 chatbot으로 301 | ## 1. DNS (Gabia 등) | 호스트 | 타입 | 값 | |--------|------|-----| | `stock` | A | 서버 공인 IP | | `chatbot` | A | 서버 공인 IP | ## 2. SSL 인증서 (exAIChatbot2.0 서버) ```bash cd /path/to/exAIChatbot2.0 # env: STOCK_DOMAIN, CHATBOT_DOMAIN (env.exdev 참고) bash scripts/exdev/obtain-cert-exdev.sh # exdev + stock + chatbot SAN bash scripts/exdev/start-https-caddy.sh ``` Caddyfile: `docker/caddy/Caddyfile.exdev` ## 3. GoldenChart 서버 `.env`: ```env GC_DESKTOP_APP_PUBLIC_BASE_URL=https://stock.exdev.co.kr GC_MOBILE_APP_PUBLIC_BASE_URL=https://stock.exdev.co.kr ``` Desktop updater / Jenkins: ```bash export DESKTOP_UPDATE_BASE_URL=https://stock.exdev.co.kr/desktop/updates ``` 검증: ```bash curl -sS https://stock.exdev.co.kr/ | head DESKTOP_UPDATE_BASE_URL=https://stock.exdev.co.kr/desktop/updates ./scripts/verify-desktop-updater-endpoint.sh ``` ## 4. Chatbot `.env` (env.exdev): ```env PUBLIC_BASE_URL=https://chatbot.exdev.co.kr CHATBOT_DOMAIN=chatbot.exdev.co.kr ``` 카카오 스킬 URL 예: - Q&A: `https://chatbot.exdev.co.kr/chatbot/kakao/skill` - 챗봇홈: `https://chatbot.exdev.co.kr/chatbot/app/` 검증: ```bash curl -sS https://chatbot.exdev.co.kr/chatbot/health curl -sS https://chatbot.exdev.co.kr/chatbot/app/ | head ``` ## 5. SSH / git remote 서버 SSH·배포 스크립트의 `REMOTE_HOST=exdev.co.kr` 는 **그대로** 둡니다 (서버 내부·스크립트용). ## 6. 서버(Mac Studio) 안에서 브라우저·데스크톱 앱 접속 원격에서는 `https://stock.exdev.co.kr` 이 정상이어도, **서버 본체 브라우저**는 공인 IP로 다시 들어오는 **NAT hairpin** 이 막혀 `stock` 서브도메인만 타임아웃될 수 있습니다. | URL | 서버 내부 (hosts 미설정) | 조치 후 | |-----|--------------------------|---------| | `http://exdev.co.kr` | ✅ (`/etc/hosts` → 127.0.0.1) | — | | `https://exdev.co.kr` | ✅ (Caddy가 직접 프록시) | — | | `https://stock.exdev.co.kr` | ❌ 타임아웃 | hosts에 `stock` 추가 | **1회 설정 (서버 콘솔 또는 SSH에서 sudo):** ```bash sudo bash /path/to/goldenChart/scripts/setup-server-local-hosts.sh ``` 또는 서버 바탕화면 `Setup-GoldenChart-Hosts.command` 더블클릭 → 관리자 암호 입력. 추가되는 항목: ```text 127.0.0.1 exdev.co.kr 127.0.0.1 stock.exdev.co.kr 127.0.0.1 chatbot.exdev.co.kr ``` **검증:** ```bash curl -sS -o /dev/null -w "stock %{http_code}\n" https://stock.exdev.co.kr/ curl -sS https://stock.exdev.co.kr/desktop/updates/latest.json | head ``` **데스크톱 앱 자동 업데이트:** 기본 엔드포인트는 `stock.exdev.co.kr` 이므로 위 hosts 설정이 필요합니다. 신규 빌드부터는 `https://exdev.co.kr/desktop/updates/latest.json` 을 **두 번째 fallback** 으로 포함합니다 (`desktop/src-tauri/tauri.conf.json`). **주의:** `networksetup -setdnsservers Ethernet 127.0.0.1` 처럼 DNS를 127.0.0.1 로 바꾸지 마세요 (로컬 DNS 서버가 없으면 전체 DNS가 깨집니다). 복구: `networksetup -setdnsservers Ethernet Empty` ## 7. SSH / git remote (로컬 Mac) **로컬 Mac에서 `git push` 시 `Could not resolve hostname exdev.co.kr`** 일부 네트워크(회사·VPN·ISP)에서는 apex `exdev.co.kr` DNS만 실패하고 `stock.exdev.co.kr` 은 정상입니다. 같은 서버이므로 **git remote 만** 서브도메인으로 바꿉니다: ```bash git remote set-url origin ssh://aidev@stock.exdev.co.kr/Volumes/ADATA/git/goldenChart.git git push origin main ``` 또는 `/etc/hosts` 에 `125.244.198.119 exdev.co.kr` 추가. `~/.ssh/config` 예: ``` Host exdev exdev.co.kr stock.exdev.co.kr HostName stock.exdev.co.kr User aidev ```