feat(cli): make connect-url --relay a full anywhere pairing link

- --relay links now carry both routes: direct LAN plus relay fallback,
  matching the UI's Anywhere pairing; devices prefer the direct route
- pairing sessions created by the CLI are marked with usesRelay, and the
  server reconciles relay demand on a timer, so a headless instance
  brings the relay up on its own after connect-url --relay
- warn with LAN_UNREACHABLE when the link's direct route points at
  loopback and other devices cannot use it
- document the --relay flow and the --lan binding caveat in Connect a
  Device and Remote Instances across all locales
This commit is contained in:
Bohdan Triapitsyn
2026-07-10 18:29:15 +03:00
parent de92b8fef4
commit 6ec1797583
21 changed files with 182 additions and 87 deletions
@@ -40,13 +40,25 @@ description: 일회용 QR 코드로 휴대폰, 데스크톱, 다른 브라우저
## 명령줄에서 연결하기
서버가 headless(UI가 열려 있지 않음)로 실행 중이면 그 컴퓨터의 터미널에서 연결 링크를 만드세요:
서버가 headless(UI가 열려 있지 않음)로 실행 중이면 그 컴퓨터의 터미널에서 연결 링크를 만드세요.
같은 네트워크의 기기라면:
```bash
openchamber connect-url --port 3000 --qr
```
출력된 링크와 QR 코드는 설정 대화 상자에서 만든 것과 똑같이 작동합니다.
**어디서든** 연결해야 하는 기기라면(대화 상자에서 **어디서나**를 선택하는 것과 동일):
```bash
openchamber connect-url --relay --qr
```
`--relay` 링크에는 대화 상자와 마찬가지로 두 경로가 모두 들어 있습니다. 기기가 서버에 도달할 수 있으면 로컬 네트워크로 직접 연결하고, 밖에 있으면 [Private Relay](/ko/private-relay/)로 대체합니다. 릴레이는 스스로 시작됩니다. 실행 중인 인스턴스는 1분 안에 링크를 인식하고, 멈춰 있는 인스턴스는 다음 실행 시 인식합니다.
> 직접 경로는 서버가 실제로 네트워크에서 수신 대기할 때만 작동합니다. 기본적으로 OpenChamber는 그 컴퓨터 자체에서만 수신 대기하므로, Wi-Fi에서 접근할 수 있게 하려면 `--lan`으로 시작하세요. 링크의 직접 경로를 다른 기기에서 사용할 수 없는 경우 명령이 경고(`[LAN_UNREACHABLE]`)를 표시합니다. 이때도 `--relay` 링크는 여전히 작동하며, 항상 릴레이를 통해 연결될 뿐입니다.
출력된 링크와 QR 코드는 설정 대화 상자에서 만든 것과 똑같이 작동합니다. 일회용이고, 만료되며, 해지할 수 있습니다.
## 관련 항목
@@ -36,7 +36,7 @@ SSH 및 UI 비밀번호를 저장할지, 매번 입력할지 결정합니다.
openchamber connect-url --port 3000 --server http://your-host:3000 --qr
```
해당 포트에 서버가 없으면 `connect-url`이 먼저 서버를 시작합니다. Headless 서버에는 `--api-only`, 시작 시 LAN에 바인딩하려면 `--lan`, 브라우저 접근 보호에는 `--ui-password`, 저장된 연결 이름에는 `--name`을 사용하세요.
해당 포트에 서버가 없으면 `connect-url`이 먼저 서버를 시작합니다. Headless 서버에는 `--api-only`, 시작 시 LAN에 바인딩하려면 `--lan`, 브라우저 접근 보호에는 `--ui-password`, 저장된 연결 이름에는 `--name`을 사용하세요. 로컬 네트워크 밖에서도 작동하는 링크가 필요하면 `--relay`를 추가하세요. 기기는 도달 가능할 때 직접 연결을 우선하고, 밖에서는 [Private Relay](/ko/private-relay/)로 대체합니다. 인스턴스가 릴레이를 알아서 올립니다.
생성된 링크에는 일회용 페어링 시크릿이 들어 있습니다. 한 번 가져오면 기기는 브라우저 UI 비밀번호와 별개인 고유 client token을 갖게 되며, 발급한 서버에서 해지하기 전까지 서버 재시작 후에도 유지됩니다.