- Add new milestone for field bootstrap test port readiness - Archive completed ollama field validation follow-up milestone - Update PHASE.md, current.md, project rules, and deploy docs
6.9 KiB
Reboot Handoff: Field Bootstrap UX와 테스트 포트 정비
주입용 요약
다음 세션은 /config/workspace/iop에서 AGENTS.md의 필수 규칙을 먼저 읽고, 이어서 이 파일을 읽은 뒤 작업을 계속한다.
현재 활성 Milestone은 agent-ops/roadmap/phase/serving-routing-optimization/milestones/field-bootstrap-test-port-readiness.md다.
목표는 code-server field 테스트 환경을 Jenkins agent 연결처럼 만들고, 사용자가 Apple Silicon Mac에서 한 줄 bootstrap 명령으로 Node 다운로드, config 생성, Edge 접속까지 끝내게 하는 것이다.
현재 상태
- 이전 Milestone
Ollama 실테스트와 후속 안정화는[완료]처리 후agent-ops/roadmap/archive/phase/serving-routing-optimization/milestones/ollama-field-validation-follow-up.md로 이동했다. current.md는 새 활성 MilestoneField Bootstrap UX와 테스트 포트 정비를 가리킨다.agent-ops/rules/project/rules.md는 field 테스트 환경과 one-line bootstrap 작업을docs/deploy-dev.md와 활성 Milestone으로 라우팅하도록 갱신됐다.docs/deploy-dev.md에는Field 테스트 환경 라우팅섹션이 추가됐다.- 원격
ssh toki@toki-labs.com의~/docker/services/code-server/compose/docker-compose.yml에는 field 테스트 포트 매핑이 반영됐다. - 재부팅/재생성 타이밍은 사용자가 잡기로 했고, 작업자는 사용자가 명시하기 전 code-server 컨테이너를 재시작하지 않는다.
원격 code-server 포트 의도
원격 compose 원본:
ssh toki@toki-labs.com
~/docker/services/code-server/compose/docker-compose.yml
기준 포트:
13000-13099 -> 3000-3099 web/dev app preview range
18080 -> 18080 IOP field artifact/bootstrap HTTP
18081 -> 8080 Edge OpenAI-compatible HTTP
19080 -> 19080 Portal/Control Plane wire test endpoint
19090 -> 9090 Edge-Node TCP transport
19092 -> 9092 Edge metrics
19190 -> 9190 OTO/specialized agent field transport reserve
검증 완료:
ssh toki@toki-labs.com 'cd ~/docker/services/code-server/compose && /usr/local/bin/docker compose config --quiet'
주의: Docker port mapping은 단순 프로세스 재시작이 아니라 컨테이너 recreate가 필요할 수 있다. 재부팅 뒤에도 docker ps에 새 포트가 보이지 않으면 사용자가 정한 타이밍에 compose recreate가 필요하다.
재부팅 후 첫 확인
원격에서 code-server 컨테이너 포트가 실제 적용됐는지 확인한다.
ssh toki@toki-labs.com '/usr/local/bin/docker ps --format "{{.Names}} {{.Ports}}" | grep "^code-server "'
기대: 18080, 18081, 19090, 19092, 19190이 code-server 포트 목록에 보인다.
컨테이너 내부에서 포트가 열리는지는 서비스 기동 후 확인한다.
curl -fsS http://127.0.0.1:18080/healthz
curl -fsS http://127.0.0.1:18081/healthz
18080은 아직 artifact/bootstrap HTTP 서버를 직접 띄워야 응답한다.
바로 이어갈 작업 순서
-
edge servelifecycle 문제를 먼저 확인/수정한다.- 관찰된 현상:
edge serve로 실행하면 node/openai listener가 내려가고 metrics만 남았다. - 추정 원인: Fx
OnStartstartup context를 long-running server lifetime context로 넘겨,OnStart반환 뒤 context cancellation이 listener shutdown으로 이어지는 구조. - 후보 수정:
apps/edge/internal/bootstrap.Runtime이 자체 runtime context/cancel을 소유하고Stop()에서 cancel하도록 한다.Start(ctx)의ctx는 startup timeout 용도로만 사용한다. - 검증:
edge serve --config <field-config>실행 후9090,8080,9092listener가 유지되고 Node registration과/v1/models가 통과한다.
- 관찰된 현상:
-
field Edge config를 준비한다.
- Edge listen은 컨테이너 내부 포트 기준으로 둔다.
- Node는 Mac에서 실행되므로 Ollama base URL은 Node 관점의
http://127.0.0.1:11434가 맞다.
edge:
id: "edge-field-bootstrap"
name: "Field Bootstrap Edge"
server:
listen: "0.0.0.0:9090"
openai:
enabled: true
listen: "0.0.0.0:8080"
node: "node-silicon-ollama"
adapter: "ollama"
target: ""
models:
- "gemma4:26b"
session_id: "openai-field"
timeout_sec: 300
metrics:
port: 9092
nodes:
- id: "node-silicon-ollama"
alias: "silicon-ollama"
token: "CHANGE_ME_FIELD_TOKEN"
adapters:
ollama:
enabled: true
base_url: "http://127.0.0.1:11434"
context_size: 262144
- Apple Silicon Node artifact layout를 고정한다.
- Apple Silicon은
darwin/arm64다. linux/arm64는 Mac 실행 대상이 아니다.- 기존 build entrypoint:
- Apple Silicon은
VERSION=<field-version> APPS=node TARGETS="darwin/arm64" DIST_DIR=dist/field ./bin/build/field-binaries.sh
- artifact/bootstrap HTTP를
18080에 띄우고 URL 규칙을 정한다.- 임시 시작점 후보:
python3 -m http.server 18080 --bind 0.0.0.0 -d dist/field/<field-version>
- 외부 URL 후보:
http://toki-labs.com:18080/darwin-arm64/iop-node
http://toki-labs.com:18080/bootstrap/node-darwin-arm64.sh
- one-line Node bootstrap을 만든다.
- 목표 UX:
curl -fsSL http://toki-labs.com:18080/bootstrap/node-darwin-arm64.sh | bash
- 스크립트 책임:
~/iop-field생성darwin-arm64/iop-node다운로드- 가능하면 checksum 확인
chmod +x- macOS quarantine xattr 제거
node.yaml생성./iop-node serve --config ./node.yaml실행
- Edge에서 테스트한다.
- Node registration 확인
/v1/models- non-streaming
/v1/chat/completions - streaming SSE와
data: [DONE] /api/tagspassthroughthink:false와optionspassthrough
Milestone 체크 상태
현재 완료:
[compose-ports][runbook]
남은 항목:
[artifact-layout][one-line-node][serve-lifecycle]
관련 파일
agent-ops/rules/project/rules.mddocs/deploy-dev.mdagent-ops/roadmap/current.mdagent-ops/roadmap/phase/serving-routing-optimization/PHASE.mdagent-ops/roadmap/phase/serving-routing-optimization/milestones/field-bootstrap-test-port-readiness.mdapps/edge/cmd/edge/main.goapps/edge/internal/bootstrap/runtime.gobin/build/field-binaries.sh- 원격:
ssh toki@toki-labs.com:~/docker/services/code-server/compose/docker-compose.yml
다음 세션에 붙여넣을 한 줄
/config/workspace/iop의 AGENTS.md 필수 규칙을 읽고, agent-task/m-field-bootstrap-test-port-readiness/reboot-handoff.md를 읽은 뒤 Field Bootstrap UX와 테스트 포트 정비 작업을 이어가. 우선 재부팅 후 code-server 포트 적용 여부를 확인하고, edge serve lifecycle 문제를 수정한 다음 Apple Silicon one-line Node bootstrap 테스트로 들어가.