서문
실제 운영에서 프로덕션 환경에서 직접 설정을 변경하거나 새 기능을 테스트하는 것은 매우 위험한 작업입니다. 하나의 설정 오류로 모든 사용자의 대화가 중단될 수 있습니다. 이 글에서는 OpenClaw에 개발, 테스트, 프로덕션 세 가지 격리 환경을 구축하여, 안전하게 디버깅과 검증을 수행하는 방법을 상세히 설명합니다.
1. 환경 격리 전략
1.1 세 가지 환경의 역할
| 환경 | 용도 | 데이터 | 안정성 요구 |
|---|---|---|---|
| 개발 (dev) | 로컬 개발 디버깅, 새 기능 실험 | 테스트 데이터 | 낮음 |
| 테스트 (staging) | 배포 전 검증, 회귀 테스트 | 실제와 유사한 데이터 | 중간 |
| 프로덕션 (production) | 실제 사용자 서비스 | 실제 데이터 | 매우 높음 |
1.2 격리 차원
각 환경에서 다음 항목을 격리해야 합니다:
- 설정 파일: 서로 다른 API Key, 모델 매개변수
- 채널 계정: 서로 다른 Bot Token(테스트 메시지가 실제 사용자에게 전송되는 것을 방지)
- 데이터 저장: 독립적인 세션 데이터와 로그
- 네트워크 포트: 서로 다른 Gateway 포트로 충돌 방지
2. 설정 파일을 통한 격리
2.1 환경 변수로 설정 지정
OpenClaw은 OPENCLAW_ENV 환경 변수를 통해 다른 설정을 로드할 수 있습니다:
# 개발 환경
OPENCLAW_ENV=development openclaw up
# 테스트 환경
OPENCLAW_ENV=staging openclaw up
# 프로덕션 환경(기본값)
OPENCLAW_ENV=production openclaw up
OpenClaw은 다음 설정 파일을 순서대로 검색합니다:
~/.config/openclaw/openclaw.development.json5 # 개발 환경
~/.config/openclaw/openclaw.staging.json5 # 테스트 환경
~/.config/openclaw/openclaw.production.json5 # 프로덕션 환경(또는 openclaw.json5)
2.2 개발 환경 설정 예시
// ~/.config/openclaw/openclaw.development.json5
{
"env": "development",
"gateway": {
"port": 18700 // 다른 포트 사용
},
"model": {
// 저비용 모델 사용으로 테스트 비용 절감
"provider": "claude",
"model": "claude-3-5-haiku",
"apiKey": "sk-ant-dev-xxxxx"
},
"channels": {
"telegram": {
"enabled": true,
"botToken": "DEV_BOT_TOKEN" // 전용 테스트 Bot
}
// 개발 환경에서는 하나의 채널만 활성화
},
"conversation": {
"maxHistory": 5 // 기록 축소로 비용 절감
},
"log": {
"level": "debug", // 상세 로그로 디버깅 편의
"dir": "~/.openclaw/dev/logs/"
},
"data": {
"dir": "~/.openclaw/dev/data/" // 격리된 데이터 디렉터리
}
}
2.3 테스트 환경 설정 예시
// ~/.config/openclaw/openclaw.staging.json5
{
"env": "staging",
"gateway": {
"port": 18750
},
"model": {
"provider": "claude",
"model": "claude-3.5-sonnet", // 프로덕션과 동일한 모델
"apiKey": "sk-ant-staging-xxxxx"
},
"channels": {
"telegram": {
"enabled": true,
"botToken": "STAGING_BOT_TOKEN"
},
"whatsapp": {
"enabled": true,
"phoneId": "STAGING_PHONE_ID"
}
},
"conversation": {
"maxHistory": 20 // 프로덕션과 동일
},
"log": {
"level": "info",
"dir": "~/.openclaw/staging/logs/"
},
"data": {
"dir": "~/.openclaw/staging/data/"
}
}
2.4 프로덕션 환경 설정 예시
// ~/.config/openclaw/openclaw.production.json5
{
"env": "production",
"gateway": {
"port": 18789 // 표준 프로덕션 포트
},
"model": {
"provider": "claude",
"model": "claude-3.5-sonnet",
"apiKey": "sk-ant-prod-xxxxx"
},
"channels": {
"telegram": { "enabled": true, "botToken": "PROD_BOT_TOKEN" },
"whatsapp": { "enabled": true },
"discord": { "enabled": true }
},
"log": {
"level": "info",
"format": "json" // 프로덕션 환경에서는 JSON 형식으로 수집 용이
},
"watchdog": {
"enabled": true // 프로덕션 환경에서 워치독 활성화
}
}
3. .env 파일로 민감한 설정 관리
3.1 환경별 .env 파일 분리
# 디렉터리 구조
~/.config/openclaw/
├── openclaw.development.json5
├── openclaw.staging.json5
├── openclaw.production.json5
├── .env.development
├── .env.staging
└── .env.production
# .env.development
OPENCLAW_ENV=development
CLAUDE_API_KEY=sk-ant-dev-xxxxx
TELEGRAM_BOT_TOKEN=111111:DEV_TOKEN
OPENCLAW_PORT=18700
# .env.production
OPENCLAW_ENV=production
CLAUDE_API_KEY=sk-ant-prod-xxxxx
TELEGRAM_BOT_TOKEN=222222:PROD_TOKEN
WHATSAPP_PHONE_ID=prod_phone_id
DISCORD_BOT_TOKEN=prod_discord_token
OPENCLAW_PORT=18789
3.2 환경 파일 로드
# 수동으로 환경 파일 지정
openclaw up --env-file ~/.config/openclaw/.env.staging
# 또는 환경 변수를 통해
export OPENCLAW_ENV_FILE=~/.config/openclaw/.env.staging
openclaw up
4. Docker 다중 환경 배포
4.1 Docker Compose로 다중 환경 관리
# docker-compose.yml
version: '3.8'
services:
openclaw-dev:
image: openclaw/openclaw:latest
container_name: openclaw-dev
environment:
- OPENCLAW_ENV=development
env_file:
- .env.development
ports:
- "18700:18789"
volumes:
- ./config/openclaw.development.json5:/root/.config/openclaw/openclaw.json5
- openclaw-dev-data:/root/.openclaw
profiles: ["dev"]
openclaw-staging:
image: openclaw/openclaw:latest
container_name: openclaw-staging
environment:
- OPENCLAW_ENV=staging
env_file:
- .env.staging
ports:
- "18750:18789"
volumes:
- ./config/openclaw.staging.json5:/root/.config/openclaw/openclaw.json5
- openclaw-staging-data:/root/.openclaw
profiles: ["staging"]
openclaw-prod:
image: openclaw/openclaw:latest
container_name: openclaw-prod
environment:
- OPENCLAW_ENV=production
env_file:
- .env.production
ports:
- "18789:18789"
volumes:
- ./config/openclaw.production.json5:/root/.config/openclaw/openclaw.json5
- openclaw-prod-data:/root/.openclaw
restart: always
profiles: ["prod"]
volumes:
openclaw-dev-data:
openclaw-staging-data:
openclaw-prod-data:
# 개발 환경 시작
docker compose --profile dev up -d
# 테스트 환경 시작
docker compose --profile staging up -d
# 프로덕션 환경 시작
docker compose --profile prod up -d
4.2 동일 서버에서 병렬 실행
동일한 서버에서 여러 환경을 실행해야 하는 경우:
# 다른 설정 디렉터리와 포트 사용
OPENCLAW_ENV=staging OPENCLAW_PORT=18750 openclaw up -d --name openclaw-staging
OPENCLAW_ENV=production OPENCLAW_PORT=18789 openclaw up -d --name openclaw-prod
5. 배포 프로세스
5.1 권장 변경 배포 프로세스
1. 로컬 개발 (dev)
↓ 기능 개발과 디버깅 완료
2. 테스트 환경에 배포 (staging)
↓ 검증 통과, 팀 리뷰
3. 프로덕션 환경에 배포 (production)
↓ 모니터링 관찰
4. 안정성 확인
5.2 설정 변경 체크리스트
설정을 테스트 환경에서 프로덕션 환경으로 적용하기 전에, 항목별로 점검합니다:
# 1. 두 환경의 설정 차이 비교(민감 정보 제외)
diff <(openclaw config show --env staging | grep -v "apiKey\|token\|password") \
<(openclaw config show --env production | grep -v "apiKey\|token\|password")
# 2. 테스트 환경에서 설정 유효성 검증
OPENCLAW_ENV=staging openclaw config validate
# 3. 테스트 환경에서 진단 실행
OPENCLAW_ENV=staging openclaw doctor
# 4. 잔류 테스트 데이터가 없는지 확인
5.3 롤백 방안
새 설정이 프로덕션 환경에서 문제가 발생한 경우:
# 방안 1: 백업된 설정 파일 복원
cp ~/.config/openclaw/openclaw.production.json5.bak ~/.config/openclaw/openclaw.production.json5
openclaw restart
# 방안 2: Git을 사용한 롤백
cd ~/.config/openclaw
git checkout HEAD~1 -- openclaw.production.json5
openclaw restart
# 방안 3: openclaw 내장 롤백 사용
openclaw config rollback # 이전 설정 버전으로 롤백
6. 보안 주의사항
- API Key를 절대 공유하지 마세요: 각 환경에서 독립적인 API Key를 사용하여, 사용량 추적과 유출 시 개별 취소가 용이하도록 합니다
- 프로덕션 환경의 Bot Token은 별도 관리: 테스트 메시지가 실제 사용자에게 전송되는 것을 방지합니다
- 민감 정보는 Git에 커밋하지 마세요:
.gitignore를 사용하여.env파일과 키가 포함된 설정을 제외합니다 - 최소 권한 원칙: 개발자는 개발/테스트 환경에 대한 접근 권한만 가집니다
- 정기적으로 키를 교체하세요: 특히 인원 변동이 있을 때
# .gitignore 예시
.env*
*.production.json5
credentials/
ssl/
합리적인 다중 환경 관리를 통해, 실제 사용자에게 영향을 주지 않으면서 안심하고 새로운 설정, 새 기능, 새 스킬을 테스트할 수 있습니다. 이는 OpenClaw 프로덕션 환경의 안정성을 보장하는 중요한 기초 실천입니다.