OpenClaw를 Fly.io에 배포하는 가장 빠른 방법
봇 하나 돌리려고 개인 PC를 하루 종일 켜두는 게 참 부담스러울 때가 많죠? 저도 처음엔 제 노트북으로 시작했는데, 잠시 외출하거나 절전 모드로 들어갈 때마다 연결이 끊겨서 고생을 좀 했어요.
그래서 찾은 해결책이 Fly.io예요. 서버 설정을 복잡하게 할 필요 없이 설정 파일 몇 개면 클라우드에 바로 올릴 수 있거든요. 한 번 배포해두면 알아서 24시간 잘 돌아가니까 신경 쓸 일이 확 줄어들더라고요.
필요한 것
섹션 제목: “필요한 것”시작하기 전에 아래 도구들이 준비되었는지 확인해 주세요.
- flyctl CLI 설치 완료
- Fly.io 계정 (무료 티어로도 충분해요)
- 모델 인증을 위한 Anthropic API key (또는 다른 모델 Provider 키)
- Discord bot token, Telegram token 등 채널 접속 정보
빠른 시작
섹션 제목: “빠른 시작”딱 5분만 집중하면 배포를 끝낼 수 있어요.
- 저장소를 Clone하고
fly.toml파일을 수정해요. - Fly App과 Volume을 생성하고 Secret 값을 설정해요.
fly deploy명령어로 배포를 시작해요.- SSH로 접속해서 설정을 마무리하거나 Control UI를 사용해요.
1) Fly App 만들기
섹션 제목: “1) Fly App 만들기”가장 먼저 터미널을 열고 아래 명령어를 입력해서 프로젝트를 준비해 볼게요.
# 저장소 복제git clone https://github.com/openclaw/openclaw.gitcd openclaw
# 새로운 Fly App 생성 (나만의 이름을 정해 보세요)fly apps create my-openclaw
# 데이터 저장을 위한 Volume 생성 (1GB면 넉넉해요)fly volumes create openclaw_data --size 1 --region iadTip: 본인과 가까운 지역(Region)을 선택하는 게 좋아요. 한국과 가까운 곳을 원한다면 nrt(도쿄)를 추천해요.
2) fly.toml 설정하기
섹션 제목: “2) fly.toml 설정하기”fly.toml 파일을 열어서 내 App 이름과 요구 사항에 맞게 수정해 주세요.
app = "my-openclaw" # 생성한 App 이름primary_region = "iad"
[build] dockerfile = "Dockerfile"
[env] NODE_ENV = "production" OPENCLAW_PREFER_PNPM = "1" OPENCLAW_STATE_DIR = "/data" NODE_OPTIONS = "--max-old-space-size=1536"
[processes] app = "node dist/index.js gateway --allow-unconfigured --port 3000 --bind lan"
[http_service] internal_port = 3000 force_https = true auto_stop_machines = false auto_start_machines = true min_machines_running = 1 processes = ["app"]
[[vm]] size = "shared-cpu-2x" memory = "2048mb"
[mounts] source = "openclaw_data" destination = "/data"주요 설정 포인트:
--bind lan: Fly의 Proxy가 Gateway에 접근할 수 있게0.0.0.0으로 바인딩해요.memory = "2048mb": 512MB는 너무 작아서 작동이 멈출 수 있어요. 2GB를 추천해요.
3) Secrets 설정하기
섹션 제목: “3) Secrets 설정하기”API 키 같은 중요한 정보는 보안을 위해 Secrets 기능을 사용해서 따로 관리해야 해요.
# 필수: Gateway token 생성fly secrets set OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
# 모델 Provider API 키fly secrets set ANTHROPIC_API_KEY=sk-ant-...
# 선택 사항: 다른 Provider 키fly secrets set OPENAI_API_KEY=sk-...fly secrets set GOOGLE_API_KEY=...
# 채널 토큰fly secrets set DISCORD_BOT_TOKEN=MTQ...API 키는 설정 파일(openclaw.json)에 직접 적는 것보다 이렇게 환경 변수로 관리하는 게 훨씬 안전해요. 실수로 유출될 걱정도 없고요.
4) 배포하기
섹션 제목: “4) 배포하기”이제 모든 준비가 끝났어요. 아래 명령어로 배포를 시작해 보세요.
fly deploy첫 배포는 Docker image를 빌드하느라 2~3분 정도 걸릴 수 있어요. 배포가 끝나면 상태를 확인해 보세요.
fly statusfly logs로그에 [gateway] listening on ws://0.0.0.0:3000 같은 메시지가 보인다면 성공이에요!
5) 설정 파일 작성하기
섹션 제목: “5) 설정 파일 작성하기”이제 서버 안에 실제 설정 파일을 만들어 줄 차례예요. SSH로 직접 접속해 볼게요.
fly ssh console접속한 뒤에 아래 내용을 복사해서 붙여넣어 주세요.
mkdir -p /datacat > /data/openclaw.json << 'EOF'{ "agents": { "defaults": { "model": { "primary": "anthropic/claude-opus-4-6", "fallbacks": ["anthropic/claude-sonnet-4-5", "openai/gpt-4o"] }, "maxConcurrent": 4 }, "list": [ { "id": "main", "default": true } ] }, "auth": { "profiles": { "anthropic:default": { "mode": "token", "provider": "anthropic" }, "openai:default": { "mode": "token", "provider": "openai" } } }, "bindings": [ { "agentId": "main", "match": { "channel": "discord" } } ], "channels": { "discord": { "enabled": true, "groupPolicy": "allowlist", "guilds": { "YOUR_GUILD_ID": { "channels": { "general": { "allow": true } }, "requireMention": false } } } }, "gateway": { "mode": "local", "bind": "auto" }}EOF파일을 다 만들었다면 머신을 재시작해서 설정을 적용해요.
exitfly machine restart \<machine-id\>문제 해결
섹션 제목: “문제 해결”문제가 생겼을 때 바로 해결할 수 있는 방법들이에요.
- App is not listening… 메시지가 떠요: Gateway가
127.0.0.1로 바인딩되어 있을 확률이 높아요.fly.toml의 실행 명령에--bind lan이 빠져있는지 확인해 보세요. - 머신이 계속 재시작돼요: 메모리 부족일 가능성이 커요.
fly.toml에서 메모리를2048mb로 늘려주거나fly machine update --vm-memory 2048명령어를 사용해 보세요. - 이미 실행 중이라는 에러가 떠요: 비정상적으로 종료되어 Lock 파일이 남은 경우예요.
rm -f /data/gateway.*.lock명령어로 Lock 파일을 지우고 재시작하면 해결돼요. - 설정이 적용되지 않아요:
OPENCLAW_STATE_DIR=/data환경 변수가 제대로 설정되었는지, 그리고/data/openclaw.json경로에 파일이 잘 있는지 확인해 보세요.
다음 단계
섹션 제목: “다음 단계”배포가 완료되었다면 이제 OpenClaw의 기능을 더 깊이 있게 활용해 볼 시간이에요.
설정 중에 막히는 부분이 있다면 언제든 AI Setup Assistant에게 물어봐 주세요. 실시간으로 도와드릴게요!
OpenClaw Expert
아직 막혀 있나요?
이 문서에서 답을 못 찾았다면 OpenClaw Expert에게 바로 물어보세요.