공식 문서에는 여러 가지 상세한 설정이 가능한 것으로 보였지만, 전부 읽어보기 귀찮았기에, OpenClaw에게 질문을 했다.
뭐..? 그게 가능해?
공식문서에는 local이라는 profile은 보이지 않았지만, 속는 셈 치고 해 보기로 했다.
역시나 그럴 리 없었다.
빠르게 포기하고, 수동으로 변경을 시도했다.
우선 나는 Docker 환경이고, Ubuntu Server 자체에 크게 중요한 내용은 없었기에, full 권한을 주기로 했다.
$ sudo vi /root/.openclaw/openclaw.json
# 아래처럼 변경
{
...
"tools": {
"profile": "full"
},
...
}
일단 이걸로 설정은 되었을 거라 믿고, 다음을 진행하기로 했다.
2) 컨테이너에 Playwright 브라우저/의존성 설치하기
공식 문서에는 이렇게 적혀있었다.
If your Gateway runs in Docker, avoid npx playwright (npm override conflicts). Use the bundled CLI instead
Gateway가 Docker에서 실행되는 경우 npx playwright(npm 오버라이드 충돌)를 사용하지 말 것. 대신 번들로 제공되는 CLI를 사용할 것
그리고 아래와 같은 명령어가 제시되어 있었다.
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
공식 문서의 명령어 아래에는 이런 문구가 적혀있다.
To persist browser downloads, set PLAYWRIGHT_BROWSERS_PATH (for example, /home/node/.cache/ms-playwright) and make sure /home/node is persisted via OPENCLAW_HOME_VOLUME or a bind mount. See Docker.
브라우저 다운로드를 지속하려면 PLAYWRIGHT_BROWSERS_PATH(예: /home/node/.cache/ms-playwright)를 설정하고, /home/node가 OPENCLAW_HOME_VOLUME 또는 바인드 마운트를 통해 지속되도록 하십시오. Docker를 참조하십시오.
Playwright가 내려받은 브라우저 바이너리를 재사용하기 위한 설정으로, 단순히 실행만 하면, 볼륨 영속화가 되지 않아서, 재시작할 때 사라지는 문제가 발생한다.
Persist Playwright browser downloads: ・Set PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright in docker-compose.yml. ・Ensure /home/node persists via OPENCLAW_HOME_VOLUME, or mount /home/node/.cache/ms-playwright via OPENCLAW_EXTRA_MOUNTS.
Persist Playwright 브라우저 다운로드: ・docker-compose.yml에서 PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright 설정. ・OPENCLAW_HOME_VOLUME을 통해 /home/node가 유지되도록 하거나, OPENCLAW_EXTRA_MOUNTS를 통해 /home/node/.cache/ms-playwright를 마운트 하십시오.
그럼 먼저, docker-compose.yml 파일을 수정하도록 하자.
sudo vi docker-compose.yml
# 아래와 같이 수정
services:
openclaw-gateway:
image: ${OPENCLAW_IMAGE:-openclaw:local}
environment:
...
PLAYWRIGHT_BROWSERS_PATH: /home/node/.cache/ms-playwright # 이 줄을 추가
...
volumes:
...
- ${PLAYWRIGHT_CACHE_DIR}:/home/node/.cache/ms-playwright # 이 줄을 추가
...
openclaw-cli:
environment:
...
PLAYWRIGHT_BROWSERS_PATH: /home/node/.cache/ms-playwright # 이 줄을 추가
volumes:
...
- ${PLAYWRIGHT_CACHE_DIR}:/home/node/.cache/ms-playwright # 이 줄을 추가
...
그리고 .env파일을 수정한다.
sudo vi .env
...
# 마지막 줄에 추가
PLAYWRIGHT_CACHE_DIR=/root/.openclaw/ms-playwright
이 수정으로, 공식문서와는 조금 다르지만, volume으로 연결하여, playwright관련 파일들을 컨테이너 삭제 후에도 유지되도록 할 수 있다.
이후, docker compose down, up으로 완전한 재기동을 해 주고, chromium을 설치하는 명령어를 수행한다.
# docker 재기동
docker compose down
docker compose up -d
# 설치 명령어 수행
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
명령어를 실행했지만, 에러가 발생했다.
기본 entrypoint가 OpenClaw CLI로 되어있기 때문에 해당 문제가 발생하는 것 같다.
Docker Container 내부에서 openclaw browser를 시작하는 명령어를 수행하며, 에러를 확인한다.
$ openclaw browser --browser-profile openclaw start
🦞 OpenClaw 2026.3.3 (unknown)
I keep secrets like a vault... unless you print them in debug logs again.
│
◇
Error: Error: Failed to start Chrome CDP on port 18800 for profile "openclaw".
Chrome stderr:
/home/node/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome:
error while loading shared libraries:
libatk-bridge-2.0.so.0:
cannot open shared object file: No such file or directory
위의 로그에서 어떠한 라이브러리를 로드하다가 에러가 나왔는지 확인할 수 있다.
이걸 반복하면서, 모든 의존성을 설치 해 준다.
사실 검색을 하면 나올 것 같았지만, 최소한의 라이브러리만 설치하고 싶다는 생각이 있었기에, 노가다를 했다.
3) 컨테이너 재기동 후 OpenClaw가 해당 도구를 인식하는지 확인
환경변수들을 적용하기 위해서 컨테이너를 완전 종료 후 기동했다.
그리고, 브라우저 프로필이 기동 되는지 확인한다.
# 컨테이너 재기동
docker compose down
docker compose up -d
# 컨테이너에 접속
docker container ls
docker exec -it [컨테이너ID] sh
# 브라우저 프로필 기동
openclaw browser --browser-profile openclaw start
# 브라우저 프로필 상태 확인
openclaw browser status
의존성 패키지 시행착오는 출근길에 해도 될 것 같았어서, 휴대폰으로 작업을 했었다.
사진처럼 enabled, running이 true라면 문제없이 기동 된 것이다.
이것으로 준비가 완료되었고, OpenClaw가 제시한 4번은 문제가 생기면 늘려줄 예정이다.
동작 확인
Google은 너무 유명하다 보니, 내 블로그 기사 링크를 주고, 제목을 확인할 수 있는지 시켰다.
드디어 OpenClaw가 브라우저 조작이 가능하게 되었다.
한 번씩 브라우저 조작을 시키면, 답장이 돌아오지 않는 현상이 생긴다.
그래서 기본 타임아웃 값이 있는 것 같아서, 물어보고, 수정까지 시켜주었다.
권한을 full로 주니, 시키기만 하면 자기가 알아서 설정까지 다 해줘서 정말 세상 편하다는 걸 느꼈다.
오늘의 잡담
내가 사고 싶었던 가방은 결국 재고가 없는 것 같았다.
어제 직접 알아봤을 때도 재고가 없는 걸 확인했지만, OpenClaw에게 확인사살 당했다.
뜬금없지만, 디스코드로 OpenClaw에게 일을 시키면, 진행 중인 작업에 따라서 이모지를 찍어주는데 한 번씩은 귀엽게 느껴진다.
요즘 AI 툴은 많지만, 대부분은 질문에 답해주는 수준에서 끝나는 경우가 많다. 그런데 OpenClaw는 조금 결이 달랐다. 공식 사이트에서부터 아예 "The AI that actually does things (실제로 일을 하는 AI)"라고 소개하고 있었고, 메일 정리나 캘린더 관리, 각종 채팅 앱 연동까지 지원하는 개인용 AI 어시스턴트라는 점이 흥미로웠다.
그래서 이번에는 내 노트북에 직접 OpenClaw를 설치해 봤다. 사실 처음에는 맥미니에 설치해서 돌려볼까 생각했다. 주변에서 맥미니를 작은 서버처럼 써서 이런 AI 에이전트를 돌리는 사람들이 꽤 있었기 때문이다.
나도 잠깐 맥미니 구매를 고민했지만, 집에 거의 쓰지 않고 굴러다니던 노트북이 하나 떠올랐다. 어차피 테스트 겸 설치해 보는 거라면 새 장비를 사기보다는 이 노트북에 먼저 설치해 보는 게 낫겠다 싶었다.
그래서 결국 이번 실험(?)은 집에 있던 노트북에 OpenClaw를 설치하는 것으로 시작하게 되었다.
설치 환경
CPU
Intel Core i7 10750H
GPU
Intel UHD Graphics + RTX 2060
RAM
32GB
OS
Ubuntu Server 24.04 LTS
설치 시작
OS 설치
먼저 노트북에 OS를 설치하는 것 부터 시작했다. 업무에서 사용하는 것 이외에, 라즈베리파이 같은 미니 PC가 아닌 개인용 노트북에 우분투를 설치하는 것은 처음이었다.
Windows나 Ubuntu같은 GUI 환경을 설치하지 않고, CLI환경을 설치한 이유는 최대한 가벼운 환경으로 구동하고 싶었기 때문이다.
어차피 이 노트북은 모니터와 키보드를 항상 연결해서 사용하는 장비라기보다는, 집 한쪽에 두고 서버처럼 사용할 생각이었기 때문에 꼭 GUI가 필요하지는 않을 것 같았다.
필요한 패키지 (ssh, vim, git 등등) 을 설치 하는 것으로 OS설치를 마무리 했다.
# 1. Clone and build
git clone https://github.com/openclaw/openclaw.git
cd openclaw
pnpm install
pnpm ui:build
pnpm build
그렇게 리포지토리를 클론 하고, 시작된 설치
위와 같은 화면이 나오기 시작하면서 이것저것 설정을 시작한다.
시행착오 1
설정을 완료했더니, 에러가 발생하기 시작했다.
◇ What now ───────────────────────────────────────────────────────────────╮
│ │ │ What now: https://openclaw.ai/showcase ("What People Are Building"). │
│ │ ├──────────────────────────────────────────────────────────────────────╯
│ └ Onboarding complete. Use the dashboard link above to control OpenClaw.
==> Docker gateway defaults
Container openclaw-openclaw-gateway-1 Starting
Container openclaw-openclaw-gateway-1 Started
Container openclaw-openclaw-cli-run-a067220028f5
Creating Container openclaw-openclaw-cli-run-a067220028f5
Created Error response from daemon: cannot join network namespace of container:
Container ddb6f3e2b2f44a8d1a835fedb9781b50dd616aaaf3da59cc07c71ece53edcdad is restarting, wait until the container is running
무언가의 문제로 컨테이너가 자동으로 재시작되고 있는 것 같았다.
# 로그 확인 명령어 수행
$ docker logs --tail=200 openclaw-openclaw-gateway-1
2026-03-05T14:15:28.620+00:00 Gateway failed to start:
Error: non-loopback Control UI requires gateway.controlUi.allowedOrigins (set explicit origins),
or set gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true to use Host-header origin fallback mode
2026-03-05T14:16:31.277+00:00 Gateway failed to start:
Error: non-loopback Control UI requires gateway.controlUi.allowedOrigins (set explicit origins),
or set gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true to use Host-header origin fallback mode
2026-03-05T14:17:33.967+00:00 Gateway failed to start:
Error: non-loopback Control UI requires gateway.controlUi.allowedOrigins (set explicit origins),
or set gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true to use Host-header origin fallback mode
로그 확인 결과, allowedOrigins설정이 되어있지 않아서 발생하는 문제 같았다.
dangerouslyAllowHostHeaderOriginFallback를 true로 해도 해결이 된다고 하지만, 설정값 이름에서부터 dangerous가 붙어있으니, Origin을 설정해 주기로 했다.
여기서 한 가지 문제가 발생했다.
그래서 그 설정은 어디서 하는데?
... 또다시 검색이 시작되었다.
찾아보니 다들 한마디로 /home/node/.openclaw/openclaw.json에 설정 파일이 있다고 한다.
그런데 지금 나는 OpenClaw 도커 컨테이너에서 기동 중이니, docker container에 접속해서 설정할 필요가 있다.
만약 이 글을 보고 해결을 하려고 한다면 깨우침 까지는 스킵하는 걸 추천한다. (시행착오 그 자체가 담겨있다)
그럼 컨테이너를 자동 재시작되게 하는 것을 방지하고, 어떻게든 수정을 해야 한다.
아래와 같은 명령어로, openclaw-cli config를 이용하는 상태라면 실행하기 전 설정하는 상태에서 멈출 것이라고 예상하고, 실행에 옮겼다.
$ sudo docker compose run --rm openclaw-cli config
예상대로 설정창이 나오기 시작했다.
이 상태에서, 터미널을 추가로 기동 하고, SSH로 연결을 해서, Docker Container의 정보를 확인해 보기로 했다.
다행히 문제없이 running 상태에서 유지되는 것 같았다.
그러면 이제 해당 컨테이너에 들어가서 수정하는 것만 남았다.
이걸로 파일이 확인되었다. 여기에 값을 수정하는 것만 남았다고 생각을 해서 기쁜 마음에 vi로 수정을 하려고 했다.