Wdrożenie na Fly.io
Cel: OpenClaw Gateway uruchomiony na maszynie Fly.io z trwałym storage, automatycznym HTTPS i dostępem do Discord/kanałów.Czego potrzebujesz
- Zainstalowanego flyctl CLI
- Konta Fly.io (wystarczy darmowy plan)
- Uwierzytelniania modelu: klucza API dla wybranego dostawcy modeli
- Poświadczeń kanałów: tokenu bota Discord, tokenu Telegram itd.
Szybka ścieżka dla początkujących
- Sklonuj repozytorium → dostosuj
fly.toml - Utwórz aplikację + wolumen → ustaw sekrety
- Wdróż przez
fly deploy - Połącz się przez SSH, aby utworzyć konfigurację, albo użyj Control UI
Utwórz aplikację Fly
lhr (Londyn), iad (Virginia), sjc (San Jose).Skonfiguruj fly.toml
Edytuj Kluczowe ustawienia:
fly.toml, aby dopasować go do nazwy aplikacji i swoich wymagań.Uwaga dotycząca bezpieczeństwa: Domyślna konfiguracja wystawia publiczny URL. Aby uzyskać utwardzone wdrożenie bez publicznego IP, zobacz Wdrożenie prywatne albo 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 konfiguracji (utworzysz go później) |
internal_port = 3000 | Musi odpowiadać --port 3000 (lub OPENCLAW_GATEWAY_PORT) dla health checków Fly |
memory = "2048mb" | 512MB to za mało; zalecane jest 2GB |
OPENCLAW_STATE_DIR = "/data" | Utrwala stan na wolumenie |
Ustaw sekrety
- Powiązania spoza loopback (
--bind lan) wymagają prawidłowej ścieżki uwierzytelniania gateway. Ten przykład Fly.io używaOPENCLAW_GATEWAY_TOKEN, alegateway.auth.passwordlub poprawnie skonfigurowane wdrożenietrusted-proxyspoza loopback również spełniają ten wymóg. - Traktuj te tokeny jak hasła.
- Preferuj zmienne środowiskowe zamiast pliku konfiguracji dla wszystkich kluczy API i tokenów. Dzięki temu sekrety nie trafiają do
openclaw.json, gdzie mogłyby zostać przypadkowo ujawnione lub zalogowane.
Wdróż
Utwórz plik konfiguracji
Połącz się przez SSH z maszyną, aby utworzyć właściwą konfigurację:Utwórz katalog konfiguracji i plik:Uwaga: Przy
OPENCLAW_STATE_DIR=/data ścieżką konfiguracji jest /data/openclaw.json.Uwaga: Token Discord może pochodzić z jednego z dwóch źródeł:- Zmienna środowiskowa:
DISCORD_BOT_TOKEN(zalecane dla sekretów) - Plik konfiguracji:
channels.discord.token
DISCORD_BOT_TOKEN.Uruchom ponownie, aby zastosować zmiany:Uzyskaj dostęp do Gateway
Control UI
Otwórz w przeglądarce:https://my-openclaw.fly.dev/Uwierzytelnij się przy użyciu skonfigurowanego współdzielonego sekretu. Ten przewodnik używa tokenu gateway z OPENCLAW_GATEWAY_TOKEN; jeśli przełączyłeś się na uwierzytelnianie hasłem, użyj zamiast tego tego hasła.Logi
Konsola SSH
Rozwiązywanie problemów
”App is not listening on expected address”
Gateway wiąże się z127.0.0.1 zamiast z 0.0.0.0.
Naprawa: Dodaj --bind lan do polecenia procesu w fly.toml.
Health checki nie przechodzą / 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 albo jest zabijany. Oznaki:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration albo ciche restarty.
Naprawa: Zwiększ pamięć w fly.toml:
Problemy z blokadą Gateway
Gateway odmawia uruchomienia z błędami typu „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
--allow-unconfigured omija tylko zabezpieczenie uruchomienia. Nie tworzy ani nie naprawia /data/openclaw.json, więc upewnij się, że właściwa konfiguracja istnieje i zawiera gateway.mode="local", gdy chcesz normalnego lokalnego uruchomienia gateway.
Sprawdź, czy konfiguracja istnieje:
Zapisywanie konfiguracji przez SSH
Poleceniefly ssh console -C nie obsługuje przekierowania powłoki. Aby zapisać plik konfiguracji:
fly sftp może zakończyć się błędem, jeśli plik już istnieje. Najpierw go usuń:
Stan nie jest utrwalany
Jeśli po restarcie tracisz profile uwierzytelniania, stan kanałów/dostawców albo sesje, katalog stanu zapisuje dane do filesystemu kontenera. Naprawa: Upewnij się, że wfly.toml ustawiono OPENCLAW_STATE_DIR=/data, i wdróż ponownie.
Aktualizacje
Aktualizowanie polecenia maszyny
Jeśli musisz zmienić polecenie uruchamiania bez pełnego ponownego wdrożenia:fly deploy polecenie maszyny może wrócić do tego z fly.toml. Jeśli wprowadziłeś ręczne zmiany, zastosuj je ponownie po wdrożeniu.
Wdrożenie prywatne (utwardzone)
Domyślnie Fly przydziela publiczne adresy IP, przez co gateway jest dostępna podhttps://your-app.fly.dev. To wygodne, ale oznacza, że wdrożenie jest wykrywalne przez skanery internetowe (Shodan, Censys itd.).
Aby uzyskać utwardzone wdrożenie bez publicznej ekspozycji, użyj prywatnego szablonu.
Kiedy używać wdrożenia prywatnego
- Wykonujesz tylko połączenia/wiadomości wychodzące (bez przychodzących webhooków)
- Używasz tuneli ngrok lub Tailscale dla 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 internetowymi
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 tych metod: Opcja 1: Lokalne proxy (najprostsze)Webhooki przy wdrożeniu prywatnym
Jeśli potrzebujesz callbacków webhooków (Twilio, Telnyx itd.) bez publicznej ekspozycji:- Tunel ngrok — uruchom ngrok wewnątrz kontenera albo jako sidecar
- Tailscale Funnel — wystaw określone ścieżki przez Tailscale
- Tylko ruch wychodzący — niektórzy dostawcy (Twilio) działają dobrze dla połączeń wychodzących nawet bez webhooków
webhookSecurity.allowedHosts na publiczną nazwę hosta tunelu, aby przekazywane nagłówki hosta były akceptowane.
Korzyści bezpieczeństwa
| Aspekt | Publiczne | Prywatne |
|---|---|---|
| Skanery internetowe | Wykrywalne | Ukryte |
| Bezpośrednie ataki | Możliwe | Zablokowane |
| Dostęp do Control UI | Przeglądarka | Proxy/VPN |
| Dostarczanie webhooków | Bezpośrednio | 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 pod
/data - Signal wymaga Java + signal-cli; użyj niestandardowego obrazu i utrzymuj pamięć na poziomie 2GB+.
Koszt
Przy zalecanej konfiguracji (shared-cpu-2x, 2GB RAM):
- Około $10-15/miesiąc zależnie od użycia
- Darmowy plan obejmuje pewien limit zasobów
Następne kroki
- Skonfiguruj kanały wiadomości: Kanały
- Skonfiguruj Gateway: Konfiguracja Gateway
- Utrzymuj OpenClaw na bieżąco: Aktualizowanie