chore: update workspace config and memory
This commit is contained in:
443
openclaw_migration.md
Normal file
443
openclaw_migration.md
Normal file
@@ -0,0 +1,443 @@
|
||||
# OpenClaw Migration Guide
|
||||
|
||||
이 문서는 현재 `~/.openclaw` 환경을 다른 PC로 옮길 때 필요한 최소/권장 절차를 정리한다.
|
||||
|
||||
## 목표
|
||||
|
||||
- OpenClaw 본체를 새 PC에 안정적으로 재설치
|
||||
- 기존 workspace / custom project / 설정을 복원
|
||||
- KIS 자동화(`projects/kis-trader`)와 MCP 구성 재연결
|
||||
- 크론 작업 복원
|
||||
- 로컬 모델/포트/경로 차이로 인한 오류를 줄임
|
||||
|
||||
---
|
||||
|
||||
## 권장 전략
|
||||
|
||||
통폴더 복사보다 아래 방식이 더 안정적이다.
|
||||
|
||||
1. **새 PC에 OpenClaw 본체 재설치**
|
||||
2. **`~/.openclaw`에서 필요한 설정/문서/프로젝트만 복원**
|
||||
3. **언어 런타임/의존성 재설치**
|
||||
4. **크론/서비스 재등록**
|
||||
5. **로컬 경로/포트/모델 설정 보정**
|
||||
6. **각 MCP / 자동화 / 백업 스크립트 개별 점검**
|
||||
|
||||
---
|
||||
|
||||
## 반드시 확인할 환경 차이
|
||||
|
||||
다른 PC에서 자주 깨지는 원인:
|
||||
|
||||
- 절대경로 차이 (`/home/arin/...`)
|
||||
- Node / npm / dotnet / python 버전 차이
|
||||
- OpenClaw 버전 차이
|
||||
- 로컬 llama.cpp 서버 포트 차이
|
||||
- 인증/토큰/세션 파일 차이
|
||||
- GUI/헤드리스 환경 차이
|
||||
- 크론/서비스 미복원
|
||||
- 방화벽/로컬 네트워크 차이
|
||||
|
||||
---
|
||||
|
||||
## 이식 우선순위
|
||||
|
||||
### 1. 가장 중요한 파일/폴더
|
||||
|
||||
- `~/.openclaw/openclaw.json`
|
||||
- `~/.openclaw/cron/crontab.backup`
|
||||
- `~/.openclaw/cron/jobs.json`
|
||||
- `~/.openclaw/workspace/AGENTS.md`
|
||||
- `~/.openclaw/workspace/SOUL.md`
|
||||
- `~/.openclaw/workspace/USER.md`
|
||||
- `~/.openclaw/workspace/MEMORY.md`
|
||||
- `~/.openclaw/workspace/memory/*.md`
|
||||
- `~/.openclaw/workspace/acpx.json`
|
||||
- `~/.openclaw/workspace/projects/kis-trader/`
|
||||
- `~/.openclaw/workspace/projects/mcp_sshterminal/`
|
||||
- `~/.openclaw/workspace/KIS_MCP_Server/`
|
||||
|
||||
### 2. 선택 복원
|
||||
|
||||
- `~/.openclaw/subagents/runs.json`
|
||||
- `~/.openclaw/agents/main/agent/models.json`
|
||||
|
||||
### 3. 보통 재생성/재설정 권장
|
||||
|
||||
- `.venv`
|
||||
- `__pycache__`
|
||||
- `price_logs/`
|
||||
- sqlite / 세션 transcript / 캐시류
|
||||
- token/env 파일
|
||||
|
||||
---
|
||||
|
||||
## 새 PC 복원 절차
|
||||
|
||||
### Step 0. 압축 복사만으로 끝나지 않는 이유
|
||||
|
||||
`~/.openclaw`만 복사해도 다음은 자동으로 복구되지 않을 수 있다.
|
||||
|
||||
- 전역 npm 패키지 경로
|
||||
- OpenClaw 본체 설치 경로
|
||||
- OpenClaw 확장(plugin) 설치 경로
|
||||
- Node / npm / dotnet / python 런타임
|
||||
- 시스템 크론 등록 상태
|
||||
- 로컬 GUI / 브라우저 실행 환경
|
||||
|
||||
즉, **압축 파일은 데이터/설정 복원용**이고, 실제 실행 가능 상태로 만들려면 아래 추가 셋업을 다시 해야 한다.
|
||||
|
||||
### Step 1. OpenClaw 설치
|
||||
|
||||
새 PC에서 OpenClaw를 먼저 설치한다.
|
||||
|
||||
- Node / npm 준비
|
||||
- OpenClaw 설치
|
||||
- 실행 파일/서비스 기본 동작 확인
|
||||
|
||||
권장 확인:
|
||||
|
||||
```bash
|
||||
which openclaw
|
||||
npm root -g
|
||||
openclaw status
|
||||
```
|
||||
|
||||
정상 응답이 먼저 나와야 한다.
|
||||
|
||||
---
|
||||
|
||||
### Step 2. `.openclaw` 기본 구조 복원
|
||||
|
||||
기존 백업에서 다음을 새 PC `~/.openclaw`로 복사:
|
||||
|
||||
- `openclaw.json`
|
||||
- `cron/`
|
||||
- `workspace/`
|
||||
- `agents/main/agent/models.json` (선택)
|
||||
|
||||
주의:
|
||||
- 통째로 덮어쓰기보다 필요한 파일/폴더를 선별 복사하는 편이 안전함
|
||||
|
||||
---
|
||||
|
||||
### Step 3. 경로 보정
|
||||
|
||||
현재 설정은 `/home/arin/...` 절대경로를 많이 사용한다.
|
||||
새 PC 사용자명이 다르면 아래를 전부 점검해야 한다.
|
||||
|
||||
주요 위치:
|
||||
|
||||
- `~/.openclaw/openclaw.json`
|
||||
- `~/.openclaw/workspace/acpx.json`
|
||||
- `~/.openclaw/workspace/projects/kis-trader/*.sh`
|
||||
- `~/.openclaw/workspace/projects/kis-trader/*.py`
|
||||
- `~/.openclaw/cron/crontab.backup`
|
||||
|
||||
추천 검사:
|
||||
|
||||
```bash
|
||||
grep -RIn '/home/arin' ~/.openclaw
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Step 3-1. 플러그인 / 확장 복원 (중요)
|
||||
|
||||
현재 환경은 OpenClaw 본체 외에 **ACPX 확장 플러그인**에 의존한다.
|
||||
플러그인 오류가 많이 났다면 이 단계가 빠졌을 가능성이 높다.
|
||||
|
||||
현재 기준 경로:
|
||||
|
||||
- OpenClaw 전역 설치 경로 예시:
|
||||
- `/home/arin/.npm-global/lib/node_modules/openclaw`
|
||||
- ACPX 확장 경로:
|
||||
- `/home/arin/.npm-global/lib/node_modules/openclaw/extensions/acpx`
|
||||
|
||||
`openclaw.json`에 실제로 박혀 있는 설정도 다음을 기대한다.
|
||||
|
||||
- `plugins.allow = ["acpx", "telegram"]`
|
||||
- `plugins.load.paths = ["/home/arin/.npm-global/lib/node_modules/openclaw/extensions/acpx"]`
|
||||
- `plugins.entries.acpx.enabled = true`
|
||||
- `plugins.entries.telegram.enabled = true`
|
||||
|
||||
즉 새 PC에서 사용자 홈/전역 npm 경로가 달라지면, 아래 둘 중 하나를 해야 한다.
|
||||
|
||||
1. **같은 경로 구조로 OpenClaw 재설치**
|
||||
2. 또는 `openclaw.json`의 `plugins.load.paths`, `plugins.installs.acpx.*`를 새 경로로 수정
|
||||
|
||||
권장 확인:
|
||||
|
||||
```bash
|
||||
npm root -g
|
||||
ls -la $(npm root -g)/openclaw
|
||||
ls -la $(npm root -g)/openclaw/extensions/acpx
|
||||
```
|
||||
|
||||
만약 ACPX가 없다면, 새 PC에서 OpenClaw 설치가 불완전하거나 설치 경로가 달라진 것일 수 있다.
|
||||
|
||||
### Step 3-2. 추가 런타임/CLI 의존성
|
||||
|
||||
현재 구성은 다음 외부 런타임/도구를 기대한다.
|
||||
|
||||
- `node`, `npm`, `npx`
|
||||
- `python3`
|
||||
- `.NET 9 SDK`
|
||||
- `git`
|
||||
- `cron` (`crontab`)
|
||||
|
||||
그리고 MCP/브리지용으로 다음 npm 실행형이 실제로 사용된다.
|
||||
|
||||
- `@playwright/mcp`
|
||||
- `mcp-remote`
|
||||
|
||||
이 둘은 `npx -y ...`로 실행하므로 전역 설치가 꼭 필요하진 않지만,
|
||||
새 PC에서 네트워크/패키지 접근이 안 되면 최초 실행에 실패할 수 있다.
|
||||
|
||||
권장 확인:
|
||||
|
||||
```bash
|
||||
node -v
|
||||
npm -v
|
||||
npx -y @playwright/mcp@latest --version || true
|
||||
npx -y mcp-remote https://example.com/sse || true
|
||||
python3 --version
|
||||
dotnet --info
|
||||
git --version
|
||||
crontab -l || true
|
||||
```
|
||||
|
||||
### Step 4. 로컬 모델 포트 점검
|
||||
|
||||
현재 로컬 llama.cpp 매핑은 다음 기준이다.
|
||||
|
||||
- `llamacpp-8080/qwen3-8b-q4km`
|
||||
- `llamacpp-8081/qwen2.5-72b-q4km`
|
||||
- `llamacpp-8082/qwen2.5-coder-32b-q4km`
|
||||
- `llamacpp-8083/deepseek-r1_q4km`
|
||||
|
||||
새 PC에서 동일 포트/모델로 띄우지 않으면 `openclaw.json`의 모델 설정을 수정해야 한다.
|
||||
|
||||
점검:
|
||||
|
||||
```bash
|
||||
curl http://llama:8080/v1/models
|
||||
curl http://llama:8081/v1/models
|
||||
curl http://llama:8082/v1/models
|
||||
curl http://llama:8083/v1/models
|
||||
```
|
||||
|
||||
현재 운영 환경에서는 로컬 모델 서버가 같은 머신의 `127.0.0.1`가 아니라,
|
||||
호스트명 `llama`로 붙어 있는 별도 머신/서비스일 수 있다. 따라서 새 PC 복원 시에는
|
||||
`openclaw.json`의 provider baseUrl이 실제 환경과 맞는지 함께 확인한다.
|
||||
|
||||
---
|
||||
|
||||
### Step 5. Python / .NET / Node 의존성 재설치
|
||||
|
||||
#### KIS_MCP_Server
|
||||
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/KIS_MCP_Server
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -U pip
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
또는 프로젝트 문서 기준 재설치.
|
||||
|
||||
#### mcp_sshterminal
|
||||
|
||||
`.NET 9 SDK` 필요.
|
||||
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/projects/mcp_sshterminal
|
||||
dotnet restore
|
||||
dotnet build -c Release
|
||||
```
|
||||
|
||||
#### Playwright MCP / mcp-remote
|
||||
|
||||
`npx` 기반이므로 Node/npm 동작만 정상이면 즉시 재사용 가능.
|
||||
|
||||
---
|
||||
|
||||
### Step 6. 크론 복원
|
||||
|
||||
현재 크론은 다음 계열 작업을 포함한다.
|
||||
|
||||
- `kis-trader` collector/watcher 자동 재시작
|
||||
- 30분마다 git 자동 백업 push
|
||||
|
||||
백업된 crontab 확인:
|
||||
|
||||
```bash
|
||||
cat ~/.openclaw/cron/crontab.backup
|
||||
```
|
||||
|
||||
복원 예시:
|
||||
|
||||
```bash
|
||||
crontab ~/.openclaw/cron/crontab.backup
|
||||
crontab -l
|
||||
```
|
||||
|
||||
주의:
|
||||
- 경로가 달라졌다면 `crontab.backup` 내용을 먼저 수정한 뒤 등록할 것
|
||||
|
||||
---
|
||||
|
||||
### Step 7. KIS 자동화 점검
|
||||
|
||||
확인 항목:
|
||||
|
||||
- `projects/kis-trader/start_price_collector.sh`
|
||||
- `projects/kis-trader/start_alert_watcher.sh`
|
||||
- `strategy_config.json`
|
||||
- `monitor_config.json`
|
||||
- `acpx.json`의 KIS MCP 설정
|
||||
|
||||
수동 점검:
|
||||
|
||||
```bash
|
||||
bash ~/.openclaw/workspace/projects/kis-trader/start_price_collector.sh
|
||||
bash ~/.openclaw/workspace/projects/kis-trader/start_alert_watcher.sh
|
||||
ps -ef | grep kis-trader
|
||||
```
|
||||
|
||||
로그 확인:
|
||||
|
||||
```bash
|
||||
tail -n 50 ~/.openclaw/workspace/projects/kis-trader/price_logs/collector.log
|
||||
tail -n 50 ~/.openclaw/workspace/projects/kis-trader/price_logs/alert_watcher.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Step 8. MCP 서버 점검
|
||||
|
||||
현재 `workspace/acpx.json` 기준으로 등록되는 MCP는 다음 3개다.
|
||||
|
||||
- `KIS MCP Server`
|
||||
- `Playwright MCP`
|
||||
- `SSH Terminal MCP`
|
||||
|
||||
#### KIS MCP
|
||||
|
||||
실행 기대값:
|
||||
|
||||
- Python venv 존재:
|
||||
- `~/.openclaw/workspace/KIS_MCP_Server/.venv/bin/python`
|
||||
- 엔트리포인트:
|
||||
- `~/.openclaw/workspace/KIS_MCP_Server/server.py`
|
||||
|
||||
확인:
|
||||
|
||||
```bash
|
||||
ls -l ~/.openclaw/workspace/KIS_MCP_Server/.venv/bin/python
|
||||
python3 -m py_compile ~/.openclaw/workspace/KIS_MCP_Server/server.py
|
||||
```
|
||||
|
||||
주의:
|
||||
- 해외주식 현재가 조회는 나스닥 시장코드 `NAS` 사용 권장
|
||||
- 현재 로컬 수정으로 `NASD`도 내부 alias 처리되지만, 새 PC에서 파일이 최신인지 확인할 것
|
||||
|
||||
#### Playwright MCP
|
||||
|
||||
등록 형식:
|
||||
- `npx -y @playwright/mcp@latest --isolated --output-dir ...`
|
||||
|
||||
주의:
|
||||
- GUI 환경에서 화면이 보여야 하면 headless 옵션 제거 상태인지 확인
|
||||
- Linux에서 실제 창이 보여야 한다면 X/Wayland GUI 세션이 살아 있어야 함
|
||||
- 단순 서버 기동만으로는 충분하지 않고, **MCP 클라이언트 세션이 살아 있어야 브라우저 창이 유지**된다
|
||||
|
||||
#### SSH Terminal MCP
|
||||
|
||||
이 프로젝트는 **직접 stdio MCP가 아니라 HTTP MCP 서버**다.
|
||||
따라서 `acpx.json`에는 서버 실행 명령 자체가 아니라, `mcp-remote` 브리지를 통해 등록한다.
|
||||
|
||||
실서버:
|
||||
- `http://127.0.0.1:5057/mcp`
|
||||
|
||||
실행 프로젝트:
|
||||
- `~/.openclaw/workspace/projects/mcp_sshterminal/McpSshTerminal.App`
|
||||
|
||||
서버 수동 실행 예시:
|
||||
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/projects/mcp_sshterminal/McpSshTerminal.App
|
||||
dotnet build -c Release
|
||||
dotnet run -c Release
|
||||
```
|
||||
|
||||
확인:
|
||||
|
||||
```bash
|
||||
curl http://127.0.0.1:5057/api/config-path
|
||||
```
|
||||
|
||||
OpenClaw 등록:
|
||||
- `npx -y mcp-remote http://127.0.0.1:5057/mcp --allow-http`
|
||||
|
||||
중요:
|
||||
- 왜 `dotnet run ...`이 아니라 `npx mcp-remote ...`가 `acpx.json`에 들어가 있는지 혼동하기 쉬움
|
||||
- 이유는 `acpx.json`의 `mcpServers`가 사실상 **로컬 stdio command 형식**을 기대하고, `mcp_sshterminal`은 **HTTP MCP 서버**이기 때문
|
||||
- 즉:
|
||||
- `dotnet run ...` = 실제 HTTP MCP 서버 실행
|
||||
- `mcp-remote ...` = OpenClaw가 붙기 위한 stdio 브리지
|
||||
|
||||
---
|
||||
|
||||
## 이식 후 추천 점검 순서
|
||||
|
||||
1. `openclaw status`
|
||||
2. `npm root -g` / OpenClaw 설치 경로 확인
|
||||
3. `openclaw.json` 안의 `plugins.load.paths` / `plugins.installs.acpx.sourcePath` 경로 확인
|
||||
4. 로컬 모델 포트 확인
|
||||
5. `acpx.json` JSON 문법 확인
|
||||
6. KIS MCP 수동 호출 확인
|
||||
7. Playwright MCP initialize / tools/list 확인
|
||||
8. `mcp_sshterminal` HTTP MCP 확인
|
||||
9. 크론 등록 확인
|
||||
10. git backup 스크립트 수동 실행 확인
|
||||
|
||||
---
|
||||
|
||||
## 문제 발생 시 우선 로그
|
||||
|
||||
- `~/.openclaw/openclaw.json`
|
||||
- `~/.openclaw/cron/crontab.backup`
|
||||
- `~/.openclaw/workspace/projects/kis-trader/price_logs/collector.log`
|
||||
- `~/.openclaw/workspace/projects/kis-trader/price_logs/alert_watcher.log`
|
||||
- `~/.openclaw/workspace/projects/mcp_sshterminal/mcp_sshterminal.log`
|
||||
|
||||
그리고 다음을 같이 확인:
|
||||
|
||||
```bash
|
||||
openclaw status
|
||||
npm root -g
|
||||
crontab -l
|
||||
ps -ef | grep -E 'kis-trader|McpSshTerminal.App|playwright|mcp-remote'
|
||||
grep -RIn 'plugins' ~/.openclaw/openclaw.json
|
||||
```
|
||||
|
||||
플러그인 관련 오류가 많이 난다면 특히 아래를 먼저 의심할 것:
|
||||
|
||||
1. OpenClaw 본체 설치 경로가 달라짐
|
||||
2. `extensions/acpx`가 실제로 존재하지 않음
|
||||
3. `openclaw.json`의 `plugins.load.paths`가 옛 PC 경로를 가리킴
|
||||
4. `npx`/`node`가 새 PC에서 안 잡힘
|
||||
5. `dotnet`이 없어 `mcp_sshterminal`이 안 뜸
|
||||
6. GUI가 없어 Playwright headed 브라우저가 표시되지 않음
|
||||
|
||||
---
|
||||
|
||||
## 운영 원칙
|
||||
|
||||
- 통복사보다 **재설치 + 설정/프로젝트 복원**이 더 안정적
|
||||
- 절대경로는 이식 시 항상 재검토
|
||||
- 토큰/세션/캐시는 되도록 재생성
|
||||
- 커스텀은 `workspace/projects/` 기준으로 분리 유지
|
||||
- KIS 원본 repo와 커스텀 자동화는 개념적으로 분리하되, 이제 backup git에는 둘 다 포함 가능
|
||||
Reference in New Issue
Block a user