Triển khai Fly.io
Mục tiêu: OpenClaw Gateway chạy trên một máy Fly.io với lưu trữ bền vững, HTTPS tự động và quyền truy cập Discord/kênh.Những gì bạn cần
- flyctl CLI đã cài đặt
- Tài khoản Fly.io (gói miễn phí dùng được)
- Xác thực mô hình: khóa API Anthropic (hoặc khóa của nhà cung cấp khác)
- Thông tin xác thực kênh: token bot Discord, token Telegram, v.v.
Lộ trình nhanh cho người mới
- Clone repo → tùy chỉnh
fly.toml - Tạo app + volume → đặt secrets
- Triển khai bằng
fly deploy - SSH vào để tạo cấu hình hoặc dùng Control UI
1) Tạo app Fly
lhr (London), iad (Virginia), sjc (San Jose).
2. Cấu hình fly.toml
Chỉnh sửafly.toml để khớp với tên app và yêu cầu của bạn.
Security note: The default config exposes a public URL. For a hardened deployment with no public IP, see Private Deployment or use fly.private.toml.
| Thiết lập | Lý do |
|---|---|
--bind lan | Gắn vào 0.0.0.0 để proxy của Fly có thể truy cập gateway |
--allow-unconfigured | Khởi động không cần file cấu hình (bạn sẽ tạo sau) |
internal_port = 3000 | Phải khớp với --port 3000 (hoặc OPENCLAW_GATEWAY_PORT) cho health check của Fly |
memory = "2048mb" | 512MB là quá ít; khuyến nghị 2GB |
OPENCLAW_STATE_DIR = "/data" | Lưu trạng thái trên volume |
3. Đặt secrets
- Bind không phải loopback (
--bind lan) yêu cầuOPENCLAW_GATEWAY_TOKENđể bảo mật. - Hãy coi các token này như mật khẩu.
- Prefer env vars over config file for all API keys and tokens. This keeps secrets out of
openclaw.jsonwhere they could be accidentally exposed or logged.
4. Triển khai
5. Tạo file cấu hình
SSH vào máy để tạo cấu hình phù hợp:OPENCLAW_STATE_DIR=/data, đường dẫn cấu hình là /data/openclaw.json.
Lưu ý: Token Discord có thể đến từ một trong hai nguồn:
- Biến môi trường:
DISCORD_BOT_TOKEN(khuyến nghị cho bí mật) - File cấu hình:
channels.discord.token
DISCORD_BOT_TOKEN.
Khởi động lại để áp dụng:
6. Truy cập Gateway
Control UI
Mở trên trình duyệt:https://my-openclaw.fly.dev/
Dán token gateway của bạn (token từ OPENCLAW_GATEWAY_TOKEN) để xác thực.
Logs
SSH Console
Xử lý sự cố
”Ứng dụng không lắng nghe trên địa chỉ mong đợi”
Gateway đang bind vào127.0.0.1 thay vì 0.0.0.0.
Cách khắc phục: Thêm --bind lan vào lệnh process trong fly.toml.
Health check thất bại / connection refused
Fly không thể truy cập gateway trên cổng đã cấu hình. Cách khắc phục: Đảm bảointernal_port khớp với cổng gateway (đặt --port 3000 hoặc OPENCLAW_GATEWAY_PORT=3000).
OOM / Vấn đề bộ nhớ
Container keeps restarting or getting killed. Signs:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration, or silent restarts.
Cách khắc phục: Tăng bộ nhớ trong fly.toml:
Sự cố khóa Gateway
Gateway từ chối khởi động với lỗi “already running”. Điều này xảy ra khi container khởi động lại nhưng file khóa PID vẫn tồn tại trên volume. Cách khắc phục: Xóa file khóa:/data/gateway.*.lock (không nằm trong thư mục con).
Cấu hình không được đọc
Nếu dùng--allow-unconfigured, gateway sẽ tạo một cấu hình tối thiểu. Your custom config at /data/openclaw.json should be read on restart.
Xác minh cấu hình tồn tại:
Ghi cấu hình qua SSH
Thefly ssh console -C command doesn’t support shell redirection. Để ghi một file cấu hình:
fly sftp có thể thất bại nếu file đã tồn tại. Delete first:
Trạng thái không được lưu
Nếu bạn mất thông tin xác thực hoặc phiên sau khi khởi động lại, thư mục trạng thái đang ghi vào filesystem của container. Cách khắc phục: Đảm bảoOPENCLAW_STATE_DIR=/data được đặt trong fly.toml và triển khai lại.
Cập nhật
Cập nhật lệnh máy
Nếu bạn cần thay đổi lệnh khởi động mà không triển khai lại toàn bộ:fly deploy, lệnh máy có thể reset về giá trị trong fly.toml. If you made manual changes, re-apply them after deploy.
Triển khai riêng tư (Gia cố)
By default, Fly allocates public IPs, making your gateway accessible athttps://your-app.fly.dev. This is convenient but means your deployment is discoverable by internet scanners (Shodan, Censys, etc.).
Để triển khai được gia cố với không phơi bày công khai, hãy dùng mẫu riêng tư.
Khi nào nên dùng triển khai riêng tư
- Bạn chỉ thực hiện cuộc gọi/tin nhắn outbound (không có webhook inbound)
- Bạn dùng ngrok hoặc Tailscale cho mọi callback webhook
- Bạn truy cập gateway qua SSH, proxy, hoặc WireGuard thay vì trình duyệt
- Bạn muốn triển khai ẩn khỏi các trình quét internet
Thiết lập
Dùngfly.private.toml thay cho cấu hình tiêu chuẩn:
fly ips list chỉ nên hiển thị IP kiểu private:
Truy cập triển khai riêng tư
Vì không có URL công khai, hãy dùng một trong các cách sau: Tùy chọn 1: Proxy cục bộ (đơn giản nhất)Webhook với triển khai riêng tư
If you need webhook callbacks (Twilio, Telnyx, etc.) without public exposure:- Đường hầm ngrok – Chạy ngrok bên trong container hoặc như một sidecar
- Tailscale Funnel – Mở các đường dẫn cụ thể qua Tailscale
- Chỉ outbound – Một số nhà cung cấp (Twilio) hoạt động tốt cho outbound mà không cần webhook
webhookSecurity.allowedHosts to the public tunnel hostname so forwarded host headers are accepted.
Lợi ích bảo mật
| Khía cạnh | Công khai | Riêng tư |
|---|---|---|
| Trình quét internet | Có thể phát hiện | Ẩn |
| Tấn công trực tiếp | Có thể | Bị chặn |
| Truy cập Control UI | Trình duyệt | Proxy/VPN |
| Giao webhook | Trực tiếp | Qua đường hầm |
Ghi chú
- Fly.io dùng kiến trúc x86 (không phải ARM)
- Dockerfile tương thích với cả hai kiến trúc
- Với onboarding WhatsApp/Telegram, dùng
fly ssh console - Dữ liệu bền vững nằm trên volume tại
/data - Signal yêu cầu Java + signal-cli; dùng image tùy chỉnh và giữ bộ nhớ ở mức 2GB+.
Chi phí
Với cấu hình khuyến nghị (shared-cpu-2x, RAM 2GB):
- ~$10–15/tháng tùy mức sử dụng
- Gói miễn phí có bao gồm một phần hạn mức