Wdrożenie na Fly.io
Cel: Gateway OpenClaw uruchomiony na maszynie Fly.io z trwałym magazynem danych, automatycznym HTTPS oraz dostępem do Discorda/kanałów.Czego potrzebujesz
- Zainstalowane CLI flyctl
- Konto Fly.io (wystarczy plan darmowy)
- Uwierzytelnienie modelu: klucz API Anthropic (lub inne klucze dostawców)
- Dane kanałów: token bota Discord, token Telegram itp.
Szybka ścieżka dla początkujących
- Sklonuj repozytorium → dostosuj
fly.toml - Utwórz aplikację + wolumen → ustaw sekrety
- Wdróż za pomocą
fly deploy - Zaloguj się przez SSH, aby utworzyć konfigurację, lub użyj Control UI
1) Utwórz aplikację Fly
lhr (Londyn), iad (Wirginia), sjc (San Jose).
2. Skonfiguruj fly.toml
Edytujfly.toml, aby dopasować do nazwy aplikacji i wymagań.
Uwaga dotycząca bezpieczeństwa: Domyślna konfiguracja wystawia publiczny URL. Dla wzmocnionego wdrożenia bez publicznego IP zobacz Prywatne wdrożenie lub użyj fly.private.toml.
| Ustawienie | Dlaczego |
|---|---|
--bind lan | Wiąże z 0.0.0.0, aby proxy Fly mogło dotrzeć do gateway |
--allow-unconfigured | Uruchamia bez pliku konfiguracyjnego (utworzysz go później) |
internal_port = 3000 | Musi odpowiadać --port 3000 (lub OPENCLAW_GATEWAY_PORT) dla kontroli zdrowia Fly |
memory = "2048mb" | 512 MB to za mało; zalecane 2 GB |
OPENCLAW_STATE_DIR = "/data" | Utrwala stan na wolumenie |
3. Ustaw sekrety
- Powiązania nie-loopback (
--bind lan) wymagająOPENCLAW_GATEWAY_TOKENze względów bezpieczeństwa. - Traktuj te tokeny jak hasła.
- Preferuj zmienne środowiskowe zamiast pliku konfiguracyjnego dla wszystkich kluczy API i tokenów. Dzięki temu sekrety nie trafią do
openclaw.json, gdzie mogłyby zostać przypadkowo ujawnione lub zalogowane.
4. Wdrożenie
5. Utwórz plik konfiguracyjny
Zaloguj się przez SSH do maszyny, aby utworzyć właściwą konfigurację:OPENCLAW_STATE_DIR=/data ścieżka konfiguracji to /data/openclaw.json.
Uwaga: Token Discorda może pochodzić z:
- Zmiennej środowiskowej:
DISCORD_BOT_TOKEN(zalecane dla sekretów) - Pliku konfiguracyjnego:
channels.discord.token
DISCORD_BOT_TOKEN.
Uruchom ponownie, aby zastosować:
6. Dostęp do Gateway
Panel sterowania
Otwórz w przeglądarce:https://my-openclaw.fly.dev/
Wklej token gateway (ten z OPENCLAW_GATEWAY_TOKEN), aby się uwierzytelnić.
Logi
Konsola SSH
Rozwiązywanie problemów
„App is not listening on expected address”
Gateway wiąże się z127.0.0.1 zamiast 0.0.0.0.
Naprawa: Dodaj --bind lan do polecenia procesu w fly.toml.
Niesprawne kontrole zdrowia / connection refused
Fly nie może dotrzeć do gateway na skonfigurowanym porcie. Naprawa: Upewnij się, żeinternal_port odpowiada portowi gateway (ustaw --port 3000 lub OPENCLAW_GATEWAY_PORT=3000).
OOM / problemy z pamięcią
Kontener ciągle się restartuje lub jest zabijany. Oznaki:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration lub ciche restarty.
Naprawa: Zwiększ pamięć w fly.toml:
Problemy z blokadą Gateway
Gateway odmawia startu z błędami „already running”. Dzieje się tak, gdy kontener restartuje się, ale plik blokady PID pozostaje na wolumenie. Naprawa: Usuń plik blokady:/data/gateway.*.lock (nie w podkatalogu).
Konfiguracja nie jest odczytywana
Jeśli używasz--allow-unconfigured, gateway tworzy minimalną konfigurację. Twoja niestandardowa konfiguracja w /data/openclaw.json powinna zostać odczytana po restarcie.
Sprawdź, czy konfiguracja istnieje:
Zapisywanie konfiguracji przez SSH
Poleceniefly ssh console -C nie obsługuje przekierowania powłoki. Aby zapisać plik konfiguracyjny:
fly sftp może się nie powieść, jeśli plik już istnieje. Najpierw usuń:
Stan nie jest utrwalany
Jeśli po restarcie tracisz poświadczenia lub sesje, katalog stanu zapisuje się do systemu plików kontenera. Naprawa: Upewnij się, żeOPENCLAW_STATE_DIR=/data jest ustawione w fly.toml i wykonaj ponowne wdrożenie.
Aktualizacje
Aktualizacja polecenia maszyny
Jeśli musisz zmienić polecenie startowe bez pełnego ponownego wdrożenia:fly deploy polecenie maszyny może zostać zresetowane do tego z fly.toml. Jeśli wprowadzałeś zmiany ręcznie, zastosuj je ponownie po wdrożeniu.
Prywatne wdrożenie (wzmocnione)
Domyślnie Fly przydziela publiczne adresy IP, co sprawia, że gateway jest dostępny podhttps://your-app.fly.dev. To wygodne, ale oznacza, że wdrożenie jest wykrywalne przez skanery internetu (Shodan, Censys itp.).
Dla wzmocnionego wdrożenia bez publicznej ekspozycji użyj prywatnego szablonu.
Kiedy używać prywatnego wdrożenia
- Wykonujesz tylko połączenia/wiadomości wychodzące (bez webhooków przychodzących)
- Używasz tuneli ngrok lub Tailscale dla wszelkich callbacków webhooków
- Uzyskujesz dostęp do gateway przez SSH, proxy lub WireGuard, a nie przez przeglądarkę
- Chcesz, aby wdrożenie było ukryte przed skanerami internetu
Konfiguracja
Użyjfly.private.toml zamiast standardowej konfiguracji:
fly ips list powinno pokazywać tylko adres IP typu private:
Dostęp do prywatnego wdrożenia
Ponieważ nie ma publicznego URL, użyj jednej z metod: Opcja 1: Lokalny proxy (najprostsze)Webhooki z prywatnym wdrożeniem
Jeśli potrzebujesz callbacków webhooków (Twilio, Telnyx itp.) bez publicznej ekspozycji:- Tunel ngrok – uruchom ngrok wewnątrz kontenera lub jako sidecar
- Tailscale Funnel – wystawiaj konkretne ścieżki przez Tailscale
- Tylko ruch wychodzący – niektórzy dostawcy (Twilio) działają poprawnie dla połączeń wychodzących bez webhooków
webhookSecurity.allowedHosts na publiczną nazwę hosta tunelu, aby akceptować przekazywane nagłówki hosta.
Korzyści bezpieczeństwa
| Aspekt | Publiczne | Prywatne |
|---|---|---|
| Skanery internetu | Wykrywalne | Hidden |
| Ataki bezpośrednie | Możliwe | Zablokowane |
| Dostęp do Control UI | Przeglądarka | Proxy/VPN |
| Dostarczanie webhooków | Bezpośrednie | Przez tunel |
Uwagi
- Fly.io używa architektury x86 (nie ARM)
- Dockerfile jest zgodny z obiema architekturami
- Do onboardingu WhatsApp/Telegram użyj
fly ssh console - Trwałe dane znajdują się na wolumenie w
/data - Signal wymaga Java + signal-cli; użyj niestandardowego obrazu i utrzymuj pamięć na poziomie 2 GB+.
Koszt
Przy zalecanej konfiguracji (shared-cpu-2x, 2 GB RAM):
- ~10–15 USD/miesiąc w zależności od użycia
- Plan darmowy obejmuje pewien limit