Skip to main content

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

  1. Sklonuj repozytorium → dostosuj fly.toml
  2. Utwórz aplikację + wolumen → ustaw sekrety
  3. Wdróż za pomocą fly deploy
  4. Zaloguj się przez SSH, aby utworzyć konfigurację, lub użyj Control UI

1) Utwórz aplikację Fly

Wskazówka: Wybierz region blisko siebie. Popularne opcje: lhr (Londyn), iad (Wirginia), sjc (San Jose).

2. Skonfiguruj fly.toml

Edytuj fly.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.
Kluczowe ustawienia:

3. Ustaw sekrety

Uwagi:
  • Powiązania nie-loopback (--bind lan) wymagają OPENCLAW_GATEWAY_TOKEN ze 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

Pierwsze wdrożenie buduje obraz Dockera (~2–3 minuty). Kolejne wdrożenia są szybsze. Po wdrożeniu sprawdź:
Powinieneś zobaczyć:

5. Utwórz plik konfiguracyjny

Zaloguj się przez SSH do maszyny, aby utworzyć właściwą konfigurację:
Utwórz katalog konfiguracji i plik:
Uwaga: Przy 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
Jeśli używasz zmiennej środowiskowej, nie trzeba dodawać tokenu do konfiguracji. Gateway automatycznie odczytuje DISCORD_BOT_TOKEN. Uruchom ponownie, aby zastosować:

6. Dostęp do Gateway

Panel sterowania

Otwórz w przeglądarce:
Lub odwiedź 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ę z 127.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ę, że internal_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:
Lub zaktualizuj istniejącą maszynę:
Uwaga: 512 MB jest zbyt małe. Uwaga: 512 MB to za mało. 1 GB może działać, ale może powodować OOM pod obciążeniem lub przy gadatliwym logowaniu. Zalecane są 2 GB.

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:
Plik blokady znajduje się w /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

Polecenie fly ssh console -C nie obsługuje przekierowania powłoki. Aby zapisać plik konfiguracyjny:
Uwaga: 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ę, że OPENCLAW_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:
Uwaga: Po 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 pod https://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żyj fly.private.toml zamiast standardowej konfiguracji:
Albo skonwertuj istniejące wdrożenie:
Po tym 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)
Opcja 2: VPN WireGuard
Opcja 3: Tylko SSH

Webhooki z prywatnym wdrożeniem

Jeśli potrzebujesz callbacków webhooków (Twilio, Telnyx itp.) bez publicznej ekspozycji:
  1. Tunel ngrok – uruchom ngrok wewnątrz kontenera lub jako sidecar
  2. Tailscale Funnel – wystawiaj konkretne ścieżki przez Tailscale
  3. Tylko ruch wychodzący – niektórzy dostawcy (Twilio) działają poprawnie dla połączeń wychodzących bez webhooków
Przykładowa konfiguracja połączeń głosowych z ngrok:
Tunel ngrok działa wewnątrz kontenera i zapewnia publiczny URL webhooka bez wystawiania samej aplikacji Fly. Ustaw webhookSecurity.allowedHosts na publiczną nazwę hosta tunelu, aby akceptować przekazywane nagłówki hosta.

Korzyści bezpieczeństwa

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
Szczegóły znajdziesz w cenniku Fly.io.