Synology๐Ÿณ + OpenClaw๐Ÿฆž

"์˜คํ”ˆํด๋กœ๋ฅผ ์‹œ๋†€๋กœ์ง€์— ์„ค์น˜ํ•ด์„œ API์™€ Discord๊นŒ์ง€ ์—ฐ๋™ํ•˜๊ธฐ" ์ž…๋‹ˆ๋‹ค ๐Ÿ˜„

์‹œ๋†€๋กœ์ง€๋Š” ๋กœ์ปฌ llm์„ ๋Œ๋ฆฌ๊ธฐ์—” HW ์‚ฌ์–‘์ด ๋ถ€์กฑํ•˜๊ธฐ์— ์˜ˆ์ œ๋กœ Gemini API๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ OpenClaw๋ฅผ ๋™์ž‘ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


์ปจํ…Œ์ด๋„ˆ ๋งค๋‹ˆ์ € - ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ธฐ๋ณธ ์„ค์น˜

1. ์‹œ๋†€๋กœ์ง€ - ์ปจํ…Œ์ด๋„ˆ ๋งค๋‹ˆ์ € - ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

2. OpenClaw ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ

๊ฒ€์ƒ‰์ฐฝ์—์„œ OpenClaw๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋งŽ์€ ์ด๋ฏธ์ง€๋“ค์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋ณ„ํ‘œ๊ฐ€ ๋งŽ์€ alpine/openclaw๋ฅผ ๋‹ค์šด ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค.

3. ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ

์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ -> ์ƒ์„ฑ ๋ฒ„ํŠผ ํด๋ฆญ

๋ฆฌ์†Œ์Šค ์ œํ•œ์€ ์‹œ๋†€๋กœ์ง€ ์‚ฌ์–‘ ๋ฐ ์˜คํ”ˆํด๋กœ ์šฉ๋„์— ๋งž๊ฒŒ ์ ์ ˆํžˆ ์„ ํƒํ•ด์ค๋‹ˆ๋‹ค.

OpenClaw๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 18789 ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ(18789)๋ฅผ ๋งž์ถฐ์ค๋‹ˆ๋‹ค.

๋‹ค์šด ๋ฐ›์€ alpine/openclaw์˜ ๊ฒฝ์šฐ /home/node๋ฅผ ์‹œ๋†€๋กœ์ง€์—์„œ ์ƒ์„ฑํ•œ /docker/openclaw ํด๋”์™€ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ PUID(1026), GUI(100)๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

4. OpenClaw ์„ค์ • ํŽธ์ง‘

์•„์ง OpenClaw ์„ค์ •์ด ๋งˆ์ณ์ง„ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋นŒ๋“œ ํ›„ ์‹คํ–‰ ์‹œ, ๊ฐ•์ œ์ข…๋ฃŒ ๋ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด, ์‹œ๋†€๋กœ์ง€ ํ„ฐ๋ฏธ๋„์„ ์‹คํ–‰ํ•˜๊ณ  SSH์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

sudo -i
cd /volume1/docker/openclaw/.openclaw/
vim openclaw.json

openclaw.json์€ OpenClaw์˜ ์™ธ๋ถ€ ์ ‘์† ๊ด€๋ จํ•˜์—ฌ ์„ค์ •์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

vim์—์„œ iํ‚ค๋กœ ํŽธ์ง‘๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์„ค์ •์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

{
  "gateway": {
    "auth": {
      "mode": "token",
      "token": "{OpenClaw Token}"
    },
    "mode":"local",
    "bind":"lan",

    "controlUi": {
      "allowedOrigins": [
        "http://localhost:18789",
        "http://127.0.0.1:18789",
        "https://{URL}:18789"
        ]
    }
  },
  "meta": {
    "lastTouchedVersion": "2026.5.4",
    "lastTouchedAt": "2026-05-06T08:11:39.681Z"
  }
}                         

OpenClaw๋Š” ๋ณด์•ˆ ๋•Œ๋ฌธ์— ์™ธ๋ถ€์ ‘๊ทผ์— ๋Œ€ํ•ด ๋งค์šฐ ์—„๊ฒฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” localhost์™€ https๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ๋งŒ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ๋‚ด๋ถ€๋ง์—์„œ http๋กœ ์ ‘๊ทผ ์‹œ์—๋Š”

OpenClaw Gateway์— HTTP API๋ฅผ ์—ด์–ด์ฃผ๋Š” ์„ค์ •์ธ

"http": {
  "endpoints": {
    "chatCompletions": { "enabled": true },
    "responses": { "enabled": true }
  }
}
"dangerouslyDisableDeviceAuth": true
"allowInsecureAuth": true

๋ฅผ ์ ์šฉํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‘ ์ ์šฉํ•œ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
  "gateway": {
    "auth": {
      "mode": "token",
      "token": "{OpenClaw Token}"
    },
    "mode":"local",
    "bind":"lan",

    "http": {
      "endpoints": {
        "chatCompletions": {
          "enabled": true
          },
        "responses": {
          "enabled": true
        }
      }
    },

    "controlUi": {
      "dangerouslyDisableDeviceAuth": true,
      "dangerouslyAllowHostHeaderOriginFallback": true,
      "allowedOrigins": [
        "http://localhost:18789",
        "http://127.0.0.1:18789",
        "http://{IP}:18789",
        "http://{URL}:18789"
        ]
    }
  },
  "meta": {
    "lastTouchedVersion": "2026.5.4",
    "lastTouchedAt": "2026-05-06T08:11:39.681Z"
  }
}                         

๋ณธ์ธ์˜ ๋„คํŠธ์›Œํฌ ์„ค์ •์— ๋งž๊ฒŒ ๊ตฌ์„ฑํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

vim์—์„œ ์ €์žฅ ํ›„ ๋‚˜๊ฐ€๊ธฐ๋Š”

:qw

์ž…๋‹ˆ๋‹ค.

chown -R 1000:1000 /volume1/docker/openclaw

์ตœ์ข…์ ์œผ๋กœ ํด๋” ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.


Docker-Compose ํ•œ๋ฐฉ์…‹ ์„ค์น˜ํ•˜๊ธฐ

1. NAS์— ํด๋” ๋งŒ๋“ค๊ธฐ

File Station์ด๋‚˜ SSH์— ์ ‘์†ํ•˜์—ฌ /volume1/docker์— openclaw ํด๋”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

/volume1
โ””โ”€โ”€ docker
    โ””โ”€โ”€ openclaw
        โ”œโ”€โ”€ config
        โ”œโ”€โ”€ workspace
        โ””โ”€โ”€ auth-secrets
mkdir -p /volume1/docker/openclaw/config
mkdir -p /volume1/docker/openclaw/workspace
mkdir -p /volume1/docker/openclaw/auth-secrets

OpenClaw ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ node ์‚ฌ์šฉ์ž, uid 1000์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•ด์ค๋‹ˆ๋‹ค.

(๊ณต์‹ ๋ฌธ์„œ๋„ bind mount ๊ถŒํ•œ ๋ฌธ์ œ ์‹œ uid 1000 ์†Œ์œ ๊ถŒ์„ ๋งž์ถ”๋ผ๊ณ  ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.)

Docker ยท OpenClaw
Optional Docker-based setup and onboarding for OpenClaw
chown -R 1000:1000 /volume1/docker/openclaw

2. /volume1/docker/openclaw/.env ๋งŒ๋“ค๊ธฐ

OpenClaw ํด๋”์— .env ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Docker-Compose ์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„์ž…๋‹ˆ๋‹ค.

๋จผ์ € OpenClaw์— ์‚ฌ์šฉํ•  ํ† ํฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ์€ ๊ณ ์œ ์ •๋ณด์ด๋‹ˆ ์ ˆ๋Œ€ ๊นŒ๋จน๊ฑฐ๋‚˜ ํƒ€์ธ์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค! ๐Ÿšจ

ํ† ํฐ ์ƒ์„ฑ์„ ์œ„ํ•ด์„œ ์‹œ๋†€๋กœ์ง€ ์ œ์–ดํŒ์—์„œ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์ฃผ๊ณ  SSH์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  SSH์—์„œ openssl ๋‚œ์ˆ˜ ์ƒ์„ฑ์„ ์ด์šฉํ•ด ํ† ํฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

cd /volume1/docker/openclaw
openssl rand -hex 32

๋‚˜์˜จ ๊ฐ’์„ .env ํŒŒ์ผ์˜ OPENCLAW_GATEWAY_TOKEN์— ๋„ฃ์–ด ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

OPENCLAW_GATEWAY_TOKEN=์—ฌ๊ธฐ์—_๋žœ๋ค_ํ† ํฐ_๋ถ™์—ฌ๋„ฃ๊ธฐ
OPENCLAW_TZ=Asia/Seoul
OPENCLAW_DISABLE_BONJOUR=1
OPENCLAW_GATEWAY_BIND=lan

(OpenClaw ๊ณต์‹ Docker ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด Docker ์„ค์น˜์—์„œ๋Š” .env์— Gateway ํ† ํฐ์„ ์“ฐ๊ณ , OPENCLAW_DISABLE_BONJOUR ๊ฐ™์€ Docker์šฉ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.)

3. Container Manager์—์„œ Project ์ƒ์„ฑ

DSM์—์„œ Container Manger ์•ฑ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Container Manager โ†’ Project โ†’ Create

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„, ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ณ  Docker-Compose(YAML)๋Š” ์ง์ ‘ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Project name: openclaw
Path: /volume1/docker/openclaw
Source: Create docker-compose.yml

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ compose๋ฅผ ํŽธ์ง‘์ฐฝ์— ๋ณต์‚ฌํ•ด์ค๋‹ˆ๋‹ค.๐Ÿ”ฐ

์ด compose๋Š” ๊ณต์‹ compose์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ๋งŒ Synology์šฉ์œผ๋กœ ์ค„์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณต์‹ compose์€ ghcr.io/openclaw/openclaw:latest ๊ฐ™์€ pre-built ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , config/workspace/auth secret ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ OpenClaw ๊ฒฝ๋กœ๋กœ bind mount, 18789, 18790 ํฌํŠธ๋ฅผ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ฐ‘์— ์˜ˆ์‹œ๋Š” ๋„์ปค image๋Š” alpine/openclaw:latest๋กœ ์„ ํƒํ–ˆ๋Š”๋ฐ ๋‹ค๋ฅธ ๊ณต์‹์ด๋‚˜ ์‹œ๋†€๋กœ์ง€์— ๋งž๋Š” ์˜คํ”ˆํด๋กœ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ”๊พธ์…”๋„ ๊ดœ์ฐฎ์„ ๊ฒ๋‹ˆ๋‹ค.?

services:
  openclaw:
    #image: ghcr.io/openclaw/openclaw:latest
    image: alpine/openclaw:latest
    env_file:
      - .env

    environment:
      HOME: /home/node
      OPENCLAW_HOME: /home/node
      TERM: xterm-256color

      OPENCLAW_STATE_DIR: /home/node/.openclaw
      OPENCLAW_CONFIG_PATH: /home/node/.openclaw/openclaw.json
      OPENCLAW_CONFIG_DIR: /home/node/.openclaw
      OPENCLAW_WORKSPACE_DIR: /home/node/.openclaw/workspace

      OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
      OPENCLAW_DISABLE_BONJOUR: ${OPENCLAW_DISABLE_BONJOUR:-1}
      TZ: ${OPENCLAW_TZ:-Asia/Seoul}

    volumes:
      - /volume1/docker/openclaw/config:/home/node/.openclaw
      - /volume1/docker/openclaw/workspace:/home/node/.openclaw/workspace
      - /volume1/docker/openclaw/auth-secrets:/home/node/.config/openclaw

    ports:
      - "127.0.0.1:18789:18789"
      - "127.0.0.1:18790:18790"

    extra_hosts:
      - "host.docker.internal:host-gateway"

    cap_drop:
      - NET_RAW
      - NET_ADMIN

    security_opt:
      - no-new-privileges:true

    init: true
    restart: unless-stopped

    command:
      [
        "node",
        "dist/index.js",
        "gateway",
        "--bind",
        "lan",
        "--port",
        "18789"
      ]

    healthcheck:
      test:
        [
          "CMD",
          "node",
          "-e",
          "fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
        ]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 20s

4. ํ”„๋กœ์ ํŠธ๋Š” ์ผ๋‹จ ๋งŒ๋“ค๊ณ , ์‹คํ–‰๋์œผ๋ฉด ์ค‘์ง€

Container Manager๊ฐ€ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๋ฉด ๋ฐ”๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰๋๋‹ค๋ฉด ๋ฐ”๋กœ ์ค‘์ง€ํ•ด์ค๋‹ˆ๋‹ค.

Container Manager โ†’ Project โ†’ openclaw โ†’ Stop

OpenClaw๋Š” ์ดˆ๊ธฐ Onboard๋ผ๋Š” ์„ธํŒ…์ž‘์—…์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์‹คํ–‰ํ•ด๋„ ์ •์ƒ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒ๋‹ˆ๋‹ค.๐Ÿ’ฆ

SSH๋ฅผ ์ด์šฉํ•ด์„œ Docker-Compose ์ด๋ฏธ์ง€๋ฅผ ๋จผ์ € ๋ฐ›์Šต๋‹ˆ๋‹ค.

cd /volume1/docker/openclaw/
docker compose pull

Compose๋ฅผ ์‹คํ–‰ํ•˜์—ฌ OpenClaw ๋ช…๋ น์–ด๋กœ Onboard๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

docker compose run --rm --no-deps --entrypoint node openclaw \
  dist/index.js onboard --mode local --no-install-daemon

๊ทธ๋‹ค์Œ Gateway ๊ธฐ๋ณธ ์„ค์ •์„ ํ•ฉ๋‹ˆ๋‹ค.

docker compose run --rm --no-deps --entrypoint node openclaw \
  dist/index.js config set --batch-json '[{"path":"gateway.mode","value":"local"},{"path":"gateway.bind","value":"lan"},{"path":"gateway.controlUi.allowedOrigins","value":["http://localhost:18789","http://127.0.0.1:18789","https://OpenClaw ๋Œ€์‹œ๋ณด๋“œ URL:18789"]}]'

OpenClaw๋Š” ๋ณด์•ˆ์— ๋•Œ๋ฌธ์— Gateway ์ ‘๊ทผ์ด ๋งค์šฐ ์—„๊ฒฉ? ํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € ์—ฌ๊ธฐ์„œ NAS_IP๋Š” ์‹ค์ œ NAS IP ํ˜น์€ URL๋Š” ์‹ค์ œ ssl URL ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

docker compose run --rm --no-deps --entrypoint node openclaw \
  dist/index.js config set --batch-json '[{"path":"gateway.mode","value":"local"},{"path":"gateway.bind","value":"lan"},{"path":"gateway.controlUi.allowedOrigins","value":["http://localhost:18789","http://127.0.0.1:18789","https://synoclaw.pinblog.me"]}]'

๋Œ€์‹œ๋ณด๋“œ ํ™”๋ฉด ๊ฒฐ๊ณผ

openclaw.json ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด, ์ปจํ…Œ์ด๋„ˆ ๋งค๋‹ˆ์ €์—์„œ ๋‹ค์‹œ openclaw ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ด์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๋†€๋กœ์ง€ IP(๋‚ด๋ถ€๋ง) or URL(https) ์ž…๋ ฅํ•˜์—ฌ ๋Œ€์‹œ๋ณด๋“œ์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ .env์— ์ €์žฅํ–ˆ๋˜ Gateway ํ† ํฐ์„ ์ž…๋ ฅํ•˜๊ณ  ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ์œ„์ฒ˜๋Ÿผ https, localhost๋ฅผ ์—ฐ๊ฒฐํ•˜๋ผ๊ณ  ๋‚˜์˜จ๋‹ค๋ฉด OpenClaw์—์„œ ๋ณด์•ˆ๋ฌธ์ œ๋กœ ๋ง‰๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์•ž์„œ openclaw.json ์„ค์ •์„ ํ™•์ธํ•˜๊ณ  ํ˜„์žฌ ๋„คํŠธ์›Œํฌ๋ง ์ƒํƒœ์— ๋งž๊ฒŒ ์„ค์ •ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ฐ„ํŽธํ•œ ๋ฐฉ๋ฒ•์€ OpenClaw ๋ฉ”์‹œ์ง€์ฒ˜๋Ÿผ localhost๋‚˜ https์—์„œ์˜ ์ ‘์†์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ณต์žกํ•˜์ง€๋งŒ, OpenClaw ๊ณต์‹ ๋ฌธ์„œ๋„ ์ˆ˜๋™ ์„ค์น˜ ํ๋ฆ„์—์„œ openclaw์— --entrypoint node๋ฅผ ์ค˜์„œ onboarding๊ณผ config set์„ ๋จผ์ € ์‹คํ–‰ํ•œ ๋’ค gateway๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ์‹์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

์ •์ƒ์ ์œผ๋กœ ์ ‘๊ทผํ•˜์˜€๋‹ค๋ฉด,

์ด์ฒ˜๋Ÿผ device ํŽ˜์–ด๋ง์„ ํ•˜๋ผ๋Š” ์•Œ๋žŒ์ฐฝ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ OpenClaw์— ๋“ฑ๋ก๋˜์ง€ ์•Š์€ Device (์ ‘์†ํ•œ ์›น ๋ธŒ๋ผ์šฐ์ €, PC, ์Šค๋งˆํŠธํฐ, ํƒœ๋ธ”๋ฆฟ ๋“ฑ)์—์„œ๋Š” ํŽ˜์–ด๋ง์„ ํ•ด์•ผ๋œ๋‹ค๋Š” ์—๋Ÿฌ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.๐Ÿ˜ฅ

์ด๋•Œ, ๋‚˜ํƒ€๋‚˜๋Š” RequiredID๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ OpenClaw์— ์ ‘์†ํ•œ Device์— ๋Œ€ํ•œ ์‹๋ณ„ID์ž…๋‹ˆ๋‹ค.

์•Œ๋žŒ์ฐฝ์—์„œ ์•ˆ๋‚ดํ•˜๋Š” ํŽ˜์–ด๋ง ๋ฐฉ๋ฒ•์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ํŽ˜์–ด๋ง์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” Docker-Compose ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

SSH์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ˜„์žฌ OpenClaw์— ๋“ฑ๋ก/๋Œ€๊ธฐ ์ค‘์ธ Device ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

docker compose exec openclaw openclaw devices list

๋Œ€๊ธฐ์ค‘์ธ Device๊ฐ€ ํ˜„์žฌ ๋Œ€์‹œ๋ณด๋“œ์— ์ ‘์†ํ•œ ์žฅ์น˜๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‹œ๋ณด๋“œ ์•Œ๋žŒ์ฐฝ์— RequiredID๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ๐Ÿšจ

docker compose exec openclaw openclaw devices approve [Required ID]

๋ฅผ ์ž…๋ ฅํ•ด์„œ OpenClaw๊ฐ€ ์Šน์ธํ–ˆ๋‹ค๋Š” ๋กœ๊ทธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค!

๋‹ค์‹œ ํ•œ๋ฒˆ,

docker compose exec openclaw openclaw devices list

๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋ฉด ๋Œ€๊ธฐ ์ค‘์ด๋˜ Device๊ฐ€ ์Šน์ธ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋ธŒ๋ผ์šฐ์ €์— ์ ‘์†ํ•ด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ OpenClaw ๋Œ€์‹œ๋ณด๋“œ์— ์ ‘์†๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜‰

์ด์ œ Device ํŽ˜์–ด๋ง์€ ๋๋‚ฌ์œผ๋‹ˆ Onboard๋ฅผ ํ†ตํ•ด OpenClaw์˜ ๊ธฐ๋ณธ ์„ค์ •๋งŒ ๋งˆ์น˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! :)


5. OpenClaw Onboard

์—ฌ๊ธฐ๋ถ€ํ„ฐ๋Š” ssh ํ„ฐ๋ฏธ๋„์— ์ ‘์†ํ•ด์„œ ์ข€ ์ˆ˜์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

OpenClaw์˜ ์ดˆ๊ธฐํ™”์ž‘์—…์ธ onboard ๋ช…๋ น์–ด๋กœ ์„ค์ •์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•1. ์ปจํ…Œ์ด๋„ˆ ๋งค๋‹ˆ์ €์˜ ํ„ฐ๋ฏธ๋„ ์‚ฌ์šฉ

์ปจํ…Œ์ด๋„ˆ ๋งค๋‹ˆ์ €์—์„œ OpenClaw ์ปจํ…Œ์ด๋„ˆ์˜ ์ž‘์—…๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์ค๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„ ์ฐฝ์—์„œ ์ƒ์„ฑ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ bash๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

openclaw onboard

OpenClaw์˜ Onboard ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•2. SSH๋กœ Docker/Docker-Compose์—์„œ ์‹คํ–‰

์‹œ๋†€๋กœ์ง€ SSH๋กœ ์ ‘์†ํ•˜์—ฌ /docker/openclaw ๋งตํ•‘ ํด๋”๋กœ ์ด๋™ํ•˜์—ฌ ๋„์ปค์—์„œ openclaw onboard ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ) Docker-Compose๋กœ ์ง„ํ–‰ํ•œ ๊ฒฝ์šฐ,

sudo -i
cd /volume1/docker/openclaw
docker compose exec openclaw openclaw onboard

์ด๋ ‡๊ฒŒ OpenClaw setup ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚œ๋‹ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.


6. Onboard ์„ธํŒ…

๐Ÿ–ฅ๏ธUnraid + ๐Ÿฆ€OpenClaw(๐Ÿ‹Docker) + ๐Ÿฆ™Ollama(๐Ÿค–Local Model)
Unraid ์‹œ์Šคํ…œ์—์„œ Ollama์˜ Locam LLM ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ OpenClaw๋ฅผ ๋™์ž‘์‹œ์ผœ๋ด…์‹œ๋‹ค. * Ollama๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์„œ๋น„์Šค ์ค‘์ธ ๊ฒƒ์„ ์ „์ œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. * ์™ธ๋ถ€ ์ ‘๊ทผ(์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ๋“ฑ)์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค. OpenClaw ์ปจํ…Œ์ด๋„ˆ ์„ค์น˜ํ•˜๊ธฐ Apps์—์„œ OpenClaw๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ Official ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค ์„ค์ •์€ ๊ธฐ๋ณธ๊ฐ’์—์„œ ๋ช‡๊ฐ€์ง€ ๊ฑด๋“œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ฒ„์ „์€ ๊ธฐ๋ณธ๊ฐ’์ด latest ์ตœ์‹ ๋ฒ„์ „์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ดํ›„ OpenClaw Onboard ์„ค์ • ๋ฐฉ๋ฒ•์€ ์œ„ ๊ฒŒ์‹œ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :)

root@cyberpunk:~#