Skip to content

OpenClaw

Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

Install

curl -fsSL https://openclaw.ai/install.sh | bash

μ˜¨λ³΄λ”© λ§ˆλ²•μ‚¬ μ‹€ν–‰

openclaw onboard --install-daemon

Pi

Docker 둜 μ‹œμž‘ν•˜κΈ°

WARNING

ν˜Ήμ‹œλΌλ„ νŒ¨ν‚· ν•„ν„° κ΄€λ ¨ λ¬Έμ œκ°€ μžˆλ‹€λ©΄ iptables#Docker νŠΈλž˜ν”½ μ œμ–΄ ν•­λͺ© 을 μ°Έμ‘°

dockerλ₯Ό μ„€μΉ˜ν•œ ν›„:

git clone https://github.com/openclaw/openclaw
./docker-setup.sh

이 μŠ€ν¬λ¦½νŠΈκ°€ ν•˜λŠ” 일:

  • κ²Œμ΄νŠΈμ›¨μ΄ 이미지 λΉŒλ“œ
  • μ˜¨λ³΄λ”© λ§ˆλ²•μ‚¬λ₯Ό μ‹€ν–‰
  • 선택적 κ³΅κΈ‰μž μ„€μ •
  • Docker Compose λ₯Ό 톡해 κ²Œμ΄νŠΈμ›¨μ΄ μ‹œμž‘.
  • κ²Œμ΄νŠΈμ›¨μ΄ 토큰을 μƒμ„±ν•˜κ³  에 κΈ°λ‘ν•©λ‹ˆλ‹€. .env

선택적 ν™˜κ²½ λ³€μˆ˜:

  • OPENCLAW_DOCKER_APT_PACKAGES - λΉŒλ“œ 쀑에 μΆ”κ°€ apt νŒ¨ν‚€μ§€ μ„€μΉ˜
  • OPENCLAW_EXTRA_MOUNTS - μΆ”κ°€ 호슀트 바인딩 마운트 μΆ”κ°€
  • OPENCLAW_HOME_VOLUME - /home/node μ΄λ¦„μ˜ λ³Όλ₯¨ 지속성.

그것이 λλ‚œ 후에:

  • λΈŒλΌμš°μ €μ—μ„œ http://127.0.0.1:18789/ 접속.
  • 토큰 μ»¨νŠΈλ‘€μ„ UI(μ„€μ • β†’ 토큰)에 λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€.
  • URL이 λ‹€μ‹œ ν•„μš”ν•˜μ‹ κ°€μš”? docker compose run --rm openclaw-cli dashboard --no-open

ν˜ΈμŠ€νŠΈμ— config/workspaceλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€:

  • ~/.openclaw/ - ꡬ성 λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” κ²°κ΅­ OpenClaw λ©”λͺ¨λ¦¬, ꡬ성, 타사 API ν‚€ 등이 ν¬ν•¨λ©λ‹ˆλ‹€.
  • ~/.openclaw/workspace - μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ 싀행될 λ•Œ μ—μ΄μ „νŠΈκ°€ 직접 μ‚¬μš©ν•  수 μžˆλŠ” 파일이 가득 μ°¬ μž‘μ—… μ˜μ—­ λ””λ ‰ν„°λ¦¬μž…λ‹ˆλ‹€. μ—μ΄μ „νŠΈκ°€ λ§Œλ“  νŒŒμΌλ„ 여기에 μ €μž₯λ©λ‹ˆλ‹€.

μˆ˜λ™μœΌλ‘œ μž‘μ—…μ„ μ§„ν–‰ν•˜κ³  μ‹Άλ‹€λ©΄

docker build -t openclaw:local -f Dockerfile .
docker compose run --rm openclaw-cli onboard
docker compose up -d openclaw-gateway

λ§Œμ•½ unauthorized λ˜λŠ” disconnected (1008): pairing required κ°€ 좜λ ₯ λœλ‹€λ©΄ λŒ€μ‹œ λ³΄λ“œ 링크 및 λΈŒλΌμš°μ € μž₯치λ₯Ό μŠΉμΈν•΄μ•Ό ν•œλ‹€:

# λŒ€μ‹œλ³΄λ“œ 링크 μž¬μƒμ„±
docker compose run --rm openclaw-cli dashboard --no-open

# 승인 λŒ€κΈ° 쀑인 λ””λ°”μ΄μŠ€ 확인
docker compose run --rm openclaw-cli devices list

# λ””λ°”μ΄μŠ€ 승인 (좜λ ₯된 requestId μ‚¬μš©)
docker compose run --rm openclaw-cli devices approve <requestId>

접속 방법

κ·Έλƒ₯ μ ‘μ†ν•˜λ©΄ λŒ€μ‹œλ³΄λ“œμ—μ„œ λ‹€μŒκ³Ό 같이 좜λ ₯λœλ‹€:

disconnected (1008): control ui requires HTTPS or localhost (secure context)

λ³΄μ•ˆμ˜ 문제둜 인해 localhost 도메인 λ˜λŠ” https:// μŠ€ν‚€λ§ˆλ‘œ 접속 κ°€λŠ₯ν•˜λ‹€.

λ”°λΌμ„œ 둜컬 PC ν„°λ―Έλ„μ—μ„œ SSH ν„°λ„λ§μœΌλ‘œ 접속해야 ν•œλ‹€:

ssh -N -L 18789:127.0.0.1:18789 user@<원격PC_IP>

이후 http://localhost:18789 으둜 μ ‘μ†ν•˜λ©΄ λœλ‹€.

ν…”λ ˆκ·Έλž¨ 등둝

ν•΄λ‹Ή 챗봇이 μžˆλŠ” μ±„νŒ…λ°©μ— μ•„λ¬΄κ±°λ‚˜ μž…λ ₯ν•˜λ©΄ λ‹€μŒκ³Ό 같이 좜λ ₯λœλ‹€:

OpenClaw: access not configured.

Your Telegram user id: NNNNNNNN

Pairing code: XXXXXXXX

Ask the bot owner to approve with:
openclaw pairing approve telegram <code>

λ‚˜μ™€μžˆλŠ” μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ…령을 μ‹€ν–‰ν•˜μž.

openclaw pairing approve telegram XXXXXXXX

λ§Œμ•½ Docker μ»¨ν…Œμ΄λ„ˆμ—μ„œ 직접 μ‹€ν–‰ν•œλ‹€λ©΄ λ‹€μŒ λͺ…λ ΉμœΌλ‘œ μ‹€ν–‰ν•˜μž:

docker compose exec openclaw-gateway node dist/index.js pairing approve telegram XXXXXXXX

wakeMode

OpenClaw cron job의 μ‹€ν–‰ 방식을 κ²°μ •ν•˜λŠ” μ„€μ •. λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ next-heartbeatκ°€ κΈ°λ³Έκ°’.

κ°’

κ°’

μ„€λͺ…

μ‚¬μš© 사둀

now

μŠ€μΌ€μ€„ μ‹œκ°„μ— μ¦‰μ‹œ μ‹€ν–‰

μ •μ‹œ μ•Œλ¦Ό, μ •ν™•ν•œ 타이밍 ν•„μš” μ‹œ

next-heartbeat

μŠ€μΌ€μ€„ μ‹œκ°„ 이후 λ‹€μŒ heartbeatμ—μ„œ μ‹€ν–‰

배터리/λ¦¬μ†ŒμŠ€ μ ˆμ•½, λŠμŠ¨ν•œ 타이밍 ν—ˆμš© μ‹œ

λ™μž‘ 방식

now

  • μŠ€μΌ€μ€„λœ μ‹œκ°„(예: 08:00)에 κ²Œμ΄νŠΈμ›¨μ΄κ°€ 직접 job μ‹€ν–‰
  • κ²Œμ΄νŠΈμ›¨μ΄ ν”„λ‘œμ„ΈμŠ€κ°€ 타이머λ₯Ό 관리
  • μ •ν™•ν•œ μ‹€ν–‰ μ‹œκ°„ 보μž₯

next-heartbeat

  • μŠ€μΌ€μ€„ μ‹œκ°„μ΄ μ§€λ‚˜λ„ λ°”λ‘œ μ‹€ν–‰ν•˜μ§€ μ•ŠμŒ
  • λ‹€μŒ heartbeat poll이 올 λ•ŒκΉŒμ§€ λŒ€κΈ°
  • heartbeat 주기에 따라 μ§€μ—° λ°œμƒ κ°€λŠ₯
  • heartbeatκ°€ λΉ„ν™œμ„±ν™”λ˜μ–΄ 있으면 μ˜μ›νžˆ μ‹€ν–‰ μ•ˆ 됨

μ£Όμ˜μ‚¬ν•­

  • next-heartbeatλŠ” heartbeat polling이 ν™œμ„±ν™”λ˜μ–΄ μžˆμ–΄μ•Ό 함
  • heartbeat 간격이 κΈΈλ©΄ μ•Œλ¦Ό μ§€μ—° λ°œμƒ
  • μ •μ‹œ μ•Œλ¦Όμ΄ ν•„μš”ν•˜λ©΄ λ°˜λ“œμ‹œ now μ‚¬μš©

μ˜ˆμ‹œ

{
  "name": "μ•„μΉ¨ μ•Œλ¦Ό",
  "schedule": { "kind": "cron", "expr": "0 22 * * *", "tz": "UTC" },
  "wakeMode": "now",
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "message": "μ•Œλ¦Ό λ‚΄μš©"
  }
}

Troubleshooting

gateway closed (1006 abnormal closure (no close frame)): no close reason

λ””λ°”μ΄μŠ€ 등둝을 λ‹€μŒκ³Ό 같이 μ§„ν–‰ν–ˆμ„ λ•Œ:

docker compose run --rm openclaw-cli devices list

λ₯Ό 치면 λ‹€μŒ μ—λŸ¬κ°€ 좜λ ₯됨:

WARN[0000] The "CLAUDE_WEB_COOKIE" variable is not set. Defaulting to a blank string.
WARN[0000] The "CLAUDE_AI_SESSION_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "CLAUDE_WEB_SESSION_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "CLAUDE_WEB_COOKIE" variable is not set. Defaulting to a blank string.
WARN[0000] The "CLAUDE_AI_SESSION_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "CLAUDE_WEB_SESSION_KEY" variable is not set. Defaulting to a blank string.
Container openclaw-openclaw-cli-run-4767ca06b094 Creating
Container openclaw-openclaw-cli-run-4767ca06b094 Created

🦞 OpenClaw 2026.2.3 (unknown) β€” I read logs so you can keep pretending you don't have to.

β”‚
β—‡
[openclaw] CLI failed: Error: gateway closed (1006 abnormal closure (no close frame)): no close reason
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: /home/node/.openclaw/openclaw.json
Bind: lan
    at Object.onClose (file:///app/dist/call-BxBOsbXG.js:262:10)
    at WebSocket.<anonymous> (file:///app/dist/client-i9GLCujO.js:1400:23)
    at WebSocket.emit (node:events:519:28)
    at WebSocket.emitClose (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:263:12)
    at emitErrorAndClose (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1047:13)
    at ClientRequest.<anonymous> (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:886:5)
    at ClientRequest.emit (node:events:519:28)
    at emitErrorEvent (node:_http_client:107:11)
    at Socket.socketErrorListener (node:_http_client:574:5)
    at Socket.emit (node:events:519:28)

이 경우 gateway μ»¨ν…Œμ΄λ„ˆμ—μ„œ 직접 μ‹€ν–‰ν•˜μ„Έμš”:

docker compose exec openclaw-gateway node dist/index.js devices list

unauthorized: gateway token mismatch (set gateway.remote.token to match gateway.auth.token)

λ””λ°”μ΄μŠ€ λ“±λ‘μ‹œ:

docker compose exec openclaw-gateway node dist/index.js devices list

λ‹€μŒκ³Ό 같이 좜λ ₯λœλ‹€λ©΄:

🦞 OpenClaw 2026.2.3 (unknown) β€” I'm not magicβ€”I'm just extremely persistent with retries and coping strategies.

β”‚
gateway connect failed: Error: unauthorized: gateway token mismatch (set gateway.remote.token to match gateway.auth.token)
β—‡
[openclaw] CLI failed: Error: gateway closed (1008): unauthorized: gateway token mismatch (set gateway.remote.token to match gateway.auth.token)
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: /home/node/.openclaw/openclaw.json
Bind: lan
    at Object.onClose (file:///app/dist/call-BxBOsbXG.js:262:10)
    at WebSocket.<anonymous> (file:///app/dist/client-i9GLCujO.js:1400:23)
    at WebSocket.emit (node:events:519:28)
    at WebSocket.emitClose (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:273:10)
    at Socket.socketOnClose (/app/node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1346:15)
    at Socket.emit (node:events:519:28)
    at TCP.<anonymous> (node:net:346:12)

token mismatch라고 λ‚˜μ˜΅λ‹ˆλ‹€. 연결은 λ˜μ§€λ§Œ μΈμ¦μ—μ„œ μ‹€νŒ¨ν•˜λŠ” κ²λ‹ˆλ‹€. μ„€μ • 파일의 토큰을 ν™•μΈν•΄λ³΄μ„Έμš”:

# 1. μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ μ„€μ •
docker compose exec openclaw-gateway cat /home/node/.openclaw/openclaw.json | grep -A2 token

# 2. 호슀트 μ„€μ •
cat ~/.openclaw/openclaw.json | grep -A2 token

# 3. .env 파일
cat .env | grep TOKEN

μœ„μ˜ μ„Έ 토큰이 λͺ¨λ‘ 동일해야 ν•œλ‹€.

λ§Œμ•½ 토큰이 lNXrjBP5su9SUP4spBfNTaEYZy67WmB7b25ex4yYeXAENSDW 일 경우 λ‹€μŒκ³Ό 같이 토큰을 직접 μ§€μ •ν•  수 μžˆλ‹€:

docker compose exec openclaw-gateway node dist/index.js devices list --token "lNXrjBP5su9SUP4spBfNTaEYZy67WmB7b25ex4yYeXAENSDW"

좜λ ₯된 Pending ν…Œμ΄λΈ”μ˜ Request μ»¬λŸΌμ— UUID λ₯Ό μ‚¬μš©ν•˜μ—¬ λ“±λ‘ν•˜λ©΄ λœλ‹€. Request UUID κ°€ 99a9713e-be0d-469f-bca4-25153a12a670 일 경우:

docker compose exec openclaw-gateway node dist/index.js devices approve 99a9713e-be0d-469f-bca4-25153a12a670 --token "lNXrjBP5su9SUP4spBfNTaEYZy67WmB7b25ex4yYeXAENSDW"

See also

Favorite site

Guides