Triển khai trên Fly.io
Mục tiêu: Chạy OpenClaw Gateway trên máy Fly.io với lưu trữ dữ liệu, HTTPS tự động và truy cập Discord/kênh.Bạn cần chuẩn bị
- Đã cài đặt flyctl CLI
- Tài khoản Fly.io (miễn phí cũng được)
- Xác thực mô hình: API key cho nhà cung cấp mô hình bạn chọn
- Thông tin đăng nhập 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 ứng dụng + volume → thiết lập secrets
- Triển khai với
fly deploy - SSH vào để tạo cấu hình hoặc sử dụng Control UI
Tạo ứng dụng Fly
lhr (London), iad (Virginia), sjc (San Jose).Cấu hình fly.toml
Chỉnh sửa Các thiết lập chính:
fly.toml để phù hợp với tên ứng dụng và yêu cầu của bạn.Lưu ý bảo mật: Cấu hình mặc định mở URL công khai. Để triển khai an toàn hơn không có IP công khai, xem Triển khai riêng tư hoặc sử dụng fly.private.toml.| Thiết lập | Lý do |
|---|---|
--bind lan | Kết nối với 0.0.0.0 để proxy của Fly có thể truy cập gateway |
--allow-unconfigured | Khởi động mà 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) để kiểm tra sức khỏe của Fly |
memory = "2048mb" | 512MB là quá nhỏ; khuyến nghị 2GB |
OPENCLAW_STATE_DIR = "/data" | Lưu trữ trạng thái trên volume |
Thiết lập secrets
- Kết nối không phải loopback (
--bind lan) yêu cầuOPENCLAW_GATEWAY_TOKENđể bảo mật. - Đối xử với các token này như mật khẩu.
- Ưu tiên biến môi trường hơn file cấu hình cho tất cả API key và token. Điều này giữ bí mật không bị lộ trong
openclaw.json.
Triển khai
Tạo file cấu hình
SSH vào máy để tạo cấu hình đúng:Tạo thư mục và file cấu hình:Lưu ý: Với
OPENCLAW_STATE_DIR=/data, đường dẫn cấu hình là /data/openclaw.json.Lưu ý: Token Discord có thể đến từ:- Biến môi trường:
DISCORD_BOT_TOKEN(khuyến nghị cho bảo mật) - File cấu hình:
channels.discord.token
DISCORD_BOT_TOKEN.Khởi động lại để áp dụng:Khắc phục sự cố
”Ứng dụng không lắng nghe trên địa chỉ mong đợi”
Gateway đang kết nối với127.0.0.1 thay vì 0.0.0.0.
Khắc phục: Thêm --bind lan vào lệnh process trong fly.toml.
Kiểm tra sức khỏe thất bại / kết nối bị từ chối
Fly không thể truy cập gateway trên cổng đã cấu hình. Khắc phục: Đảm bảointernal_port khớp với cổng gateway (đặt --port 3000 hoặc OPENCLAW_GATEWAY_PORT=3000).
Vấn đề OOM / Bộ nhớ
Container liên tục khởi động lại hoặc bị dừng. Dấu hiệu:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration, hoặc khởi động lại không thông báo.
Khắc phục: Tăng bộ nhớ trong fly.toml:
Vấn đề khóa Gateway
Gateway từ chối khởi động với lỗi “đã chạy”. Đ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. 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 sử dụng--allow-unconfigured, gateway tạo cấu hình tối thiểu. Cấu hình tùy chỉnh của bạn tại /data/openclaw.json nên được đọc khi khởi động lại.
Xác minh cấu hình tồn tại:
Viết cấu hình qua SSH
Lệnhfly ssh console -C không hỗ trợ chuyển hướng shell. Để viết file cấu hình:
fly sftp có thể thất bại nếu file đã tồn tại. Xóa trước:
Trạng thái không được lưu
Nếu bạn mất thông tin đăng nhập hoặc phiên sau khi khởi động lại, thư mục trạng thái đang ghi vào hệ thống file của container. 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 cần triển khai lại hoàn toàn:fly deploy, lệnh máy có thể được đặt lại theo fly.toml. Nếu bạn đã thực hiện thay đổi thủ công, hãy áp dụng lại sau khi triển khai.
Triển khai riêng tư (An toàn hơn)
Theo mặc định, Fly cấp phát IP công khai, làm cho gateway của bạn có thể truy cập tạihttps://your-app.fly.dev. Điều này tiện lợi nhưng cũng có nghĩa là triển khai của bạn có thể bị phát hiện bởi các máy quét internet (Shodan, Censys, v.v.).
Để triển khai an toàn hơn với không có phơi bày công khai, sử dụng mẫu riêng tư.
Khi nào nên sử dụng triển khai riêng tư
- Bạn chỉ thực hiện các cuộc gọi/tin nhắn ra ngoài (không có webhook inbound)
- Bạn sử dụng ngrok hoặc Tailscale tunnels cho bất kỳ webhook callback nào
- 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 máy quét internet
Thiết lập
Sử dụngfly.private.toml thay vì cấu hình tiêu chuẩn:
fly ips list chỉ nên hiển thị một IP loại private:
Truy cập triển khai riêng tư
Vì không có URL công khai, sử dụng một trong các phương pháp sau: Lựa chọn 1: Proxy cục bộ (đơn giản nhất)Webhooks với triển khai riêng tư
Nếu bạn cần webhook callback (Twilio, Telnyx, v.v.) mà không phơi bày công khai:- ngrok tunnel - Chạy ngrok bên trong container hoặc như một sidecar
- Tailscale Funnel - Phơi bày 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 các cuộc gọi outbound mà không cần webhooks
webhookSecurity.allowedHosts thành tên miền công khai của tunnel để các tiêu đề host được chuyển tiếp được chấp nhận.
Lợi ích bảo mật
| Khía cạnh | Công khai | Riêng tư |
|---|---|---|
| Máy 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 hàng webhook | Trực tiếp | Qua tunnel |
Ghi chú
- Fly.io sử 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
- Để onboarding WhatsApp/Telegram, sử dụng
fly ssh console - Dữ liệu lưu trữ nằm trên volume tại
/data - Signal yêu cầu Java + signal-cli; sử 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 USD/tháng tùy thuộc vào mức sử dụng
- Gói miễn phí bao gồm một số hạn mức
Bước tiếp theo
- Thiết lập các kênh nhắn tin: Channels
- Cấu hình Gateway: Gateway configuration
- Giữ OpenClaw luôn cập nhật: Updating