콘텐츠로 이동

OpenClaw를 Fly.io에 배포하는 가장 빠른 방법

봇 하나 돌리려고 개인 PC를 하루 종일 켜두는 게 참 부담스러울 때가 많죠? 저도 처음엔 제 노트북으로 시작했는데, 잠시 외출하거나 절전 모드로 들어갈 때마다 연결이 끊겨서 고생을 좀 했어요.

그래서 찾은 해결책이 Fly.io예요. 서버 설정을 복잡하게 할 필요 없이 설정 파일 몇 개면 클라우드에 바로 올릴 수 있거든요. 한 번 배포해두면 알아서 24시간 잘 돌아가니까 신경 쓸 일이 확 줄어들더라고요.

시작하기 전에 아래 도구들이 준비되었는지 확인해 주세요.

  • flyctl CLI 설치 완료
  • Fly.io 계정 (무료 티어로도 충분해요)
  • 모델 인증을 위한 Anthropic API key (또는 다른 모델 Provider 키)
  • Discord bot token, Telegram token 등 채널 접속 정보

딱 5분만 집중하면 배포를 끝낼 수 있어요.

  1. 저장소를 Clone하고 fly.toml 파일을 수정해요.
  2. Fly App과 Volume을 생성하고 Secret 값을 설정해요.
  3. fly deploy 명령어로 배포를 시작해요.
  4. SSH로 접속해서 설정을 마무리하거나 Control UI를 사용해요.

가장 먼저 터미널을 열고 아래 명령어를 입력해서 프로젝트를 준비해 볼게요.

Terminal window
# 저장소 복제
git clone https://github.com/openclaw/openclaw.git
cd openclaw
# 새로운 Fly App 생성 (나만의 이름을 정해 보세요)
fly apps create my-openclaw
# 데이터 저장을 위한 Volume 생성 (1GB면 넉넉해요)
fly volumes create openclaw_data --size 1 --region iad

Tip: 본인과 가까운 지역(Region)을 선택하는 게 좋아요. 한국과 가까운 곳을 원한다면 nrt(도쿄)를 추천해요.

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를 추천해요.

API 키 같은 중요한 정보는 보안을 위해 Secrets 기능을 사용해서 따로 관리해야 해요.

Terminal window
# 필수: 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)에 직접 적는 것보다 이렇게 환경 변수로 관리하는 게 훨씬 안전해요. 실수로 유출될 걱정도 없고요.

이제 모든 준비가 끝났어요. 아래 명령어로 배포를 시작해 보세요.

Terminal window
fly deploy

첫 배포는 Docker image를 빌드하느라 2~3분 정도 걸릴 수 있어요. 배포가 끝나면 상태를 확인해 보세요.

Terminal window
fly status
fly logs

로그에 [gateway] listening on ws://0.0.0.0:3000 같은 메시지가 보인다면 성공이에요!

이제 서버 안에 실제 설정 파일을 만들어 줄 차례예요. SSH로 직접 접속해 볼게요.

Terminal window
fly ssh console

접속한 뒤에 아래 내용을 복사해서 붙여넣어 주세요.

Terminal window
mkdir -p /data
cat > /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

파일을 다 만들었다면 머신을 재시작해서 설정을 적용해요.

Terminal window
exit
fly 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

OpenClaw Expert

아직 막혀 있나요?

이 문서에서 답을 못 찾았다면 OpenClaw Expert에게 바로 물어보세요.