Czego potrzebujesz
- Zainstalowany flyctl CLI
- Konto Fly.io (wystarczy darmowy plan)
- Uwierzytelnianie modelu: klucz API dla wybranego dostawcy modelu
- Dane uwierzytelniające kanału: token bota Discord, token Telegram itd.
Szybka ścieżka dla początkujących
- Sklonuj repozytorium → dostosuj
fly.toml - Utwórz aplikację i wolumin → ustaw sekrety
- Wdróż za pomocą
fly deploy - Połącz się przez SSH, aby utworzyć konfigurację, albo użyj Control UI
Utwórz aplikację Fly
lhr (Londyn), iad (Wirginia), sjc (San Jose).Skonfiguruj fly.toml
Edytuj Obraz Docker OpenClaw używa
fly.toml, aby pasował do nazwy aplikacji i wymagań.Uwaga dotycząca bezpieczeństwa: Domyślna konfiguracja wystawia publiczny URL. Aby uzyskać wzmocnione wdrożenie bez publicznego IP, zobacz Wdrożenie prywatne albo użyj deploy/fly.private.toml.tini jako punktu wejścia. Polecenia procesów Fly zastępują Docker CMD bez zastępowania ENTRYPOINT, więc proces nadal działa pod tini.Kluczowe ustawienia:| 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 pasować do --port 3000 (lub OPENCLAW_GATEWAY_PORT) dla kontroli zdrowia Fly |
memory = "2048mb" | 512 MB to za mało; zalecane są 2 GB |
OPENCLAW_STATE_DIR = "/data" | Utrwala stan na woluminie |
Ustaw sekrety
- Wiązania inne niż local loopback (
--bind lan) wymagają prawidłowej ścieżki uwierzytelniania Gateway. Ten przykład Fly.io używaOPENCLAW_GATEWAY_TOKEN, alegateway.auth.passwordalbo poprawnie skonfigurowane wdrożenietrusted-proxybez local loopback również spełniają ten wymóg. - Traktuj te tokeny jak hasła.
- Preferuj zmienne środowiskowe zamiast pliku konfiguracyjnego dla wszystkich kluczy API i tokenów. Dzięki temu sekrety pozostają poza
openclaw.json, gdzie mogłyby zostać przypadkowo ujawnione lub zapisane w logach.
Wdróż
Utwórz plik konfiguracyjny
Połącz się z maszyną przez SSH, aby utworzyć właściwą konfigurację:Utwórz katalog i plik konfiguracji:Uwaga: Przy
OPENCLAW_STATE_DIR=/data ścieżka konfiguracji to /data/openclaw.json.Uwaga: Zastąp https://my-openclaw.fly.dev rzeczywistym originem swojej aplikacji Fly. Podczas startu Gateway zasila lokalne originy Control UI na podstawie wartości runtime --bind i --port, aby pierwszy rozruch mógł się udać, zanim istnieje konfiguracja, ale dostęp przez przeglądarkę przez Fly nadal wymaga dokładnego originu HTTPS wymienionego w gateway.controlUi.allowedOrigins.Uwaga: Token Discord 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ć:Uzyskaj dostęp do Gateway
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.
Poprawka: Dodaj --bind lan do polecenia procesu w fly.toml.
Kontrole zdrowia kończą się niepowodzeniem / odmowa połączenia
Fly nie może dotrzeć do Gateway na skonfigurowanym porcie. Poprawka: Upewnij się, żeinternal_port odpowiada portowi Gateway (ustaw --port 3000 albo 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.
Poprawka: Zwiększ pamięć w fly.toml:
Problemy z blokadą Gateway
Gateway odmawia startu z błędami „already running”. Dzieje się tak, gdy kontener się restartuje, ale plik blokady PID pozostaje na woluminie. Poprawka: Usuń plik blokady:/data/gateway.*.lock (nie w podkatalogu).
Konfiguracja nie jest odczytywana
--allow-unconfigured tylko pomija zabezpieczenie startowe. Nie tworzy ani nie naprawia /data/openclaw.json, więc upewnij się, że prawdziwa konfiguracja istnieje i zawiera gateway.mode="local", gdy chcesz normalnie uruchomić lokalny Gateway.
Zweryfikuj, że 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 go usuń:
Stan nie jest utrwalany
Jeśli po restarcie tracisz profile uwierzytelniania, stan kanału/dostawcy albo sesje, katalog stanu zapisuje dane w systemie plików kontenera. Poprawka: Upewnij się, żeOPENCLAW_STATE_DIR=/data jest ustawione w fly.toml, i wdróż ponownie.
Aktualizacje
Aktualizowanie polecenia maszyny
Jeśli musisz zmienić polecenie startowe bez pełnego ponownego wdrożenia:fly deploy polecenie maszyny może zresetować się do tego, co jest w fly.toml. Jeśli wprowadziłeś ręczne zmiany, zastosuj je ponownie po wdrożeniu.
Wdrożenie prywatne (wzmocnione)
Domyślnie Fly przydziela publiczne adresy IP, dzięki czemu Gateway jest dostępny podhttps://your-app.fly.dev. Jest to wygodne, ale oznacza, że wdrożenie może zostać wykryte przez skanery internetowe (Shodan, Censys itd.).
Aby uzyskać wzmocnione wdrożenie bez ekspozycji publicznej, użyj szablonu prywatnego.
Kiedy używać wdrożenia prywatnego
- Wykonujesz tylko wychodzące wywołania/wiadomości (bez przychodzących Webhooków)
- Używasz tuneli ngrok albo Tailscale do wszelkich wywołań zwrotnych Webhook
- Uzyskujesz dostęp do Gateway przez SSH, proxy albo WireGuard zamiast przez przeglądarkę
- Chcesz, aby wdrożenie było ukryte przed skanerami internetowymi
Konfiguracja
Użyjdeploy/fly.private.toml zamiast standardowej konfiguracji:
fly ips list powinno pokazywać tylko adres IP typu private:
Dostęp do wdrożenia prywatnego
Ponieważ nie ma publicznego URL, użyj jednej z tych metod: Opcja 1: lokalne proxy (najprostsze)Webhooki z wdrożeniem prywatnym
Jeśli potrzebujesz wywołań zwrotnych Webhook (Twilio, Telnyx itd.) bez publicznej ekspozycji:- Tunel ngrok - Uruchom ngrok wewnątrz kontenera lub jako sidecar
- Tailscale Funnel - Udostępnij określone ścieżki przez Tailscale
- Tylko wychodzące - Niektórzy dostawcy (Twilio) działają poprawnie dla połączeń wychodzących bez Webhooków
webhookSecurity.allowedHosts na publiczną nazwę hosta tunelu, aby akceptowane były przekazywane nagłówki hosta.
Korzyści dotyczące bezpieczeństwa
| Aspekt | Publiczne | Prywatne |
|---|---|---|
| Skanery internetowe | Wykrywalne | Ukryte |
| Bezpośrednie ataki | Możliwe | Blokowane |
| Dostęp do Control UI | Przeglądarka | Proxy/VPN |
| Dostarczanie Webhook | 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 - Dane trwałe znajdują się na wolumenie w
/data - Signal wymaga Java + signal-cli; użyj niestandardowego obrazu i zachowaj 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
- Warstwa bezpłatna obejmuje pewien limit
Następne kroki
- Skonfiguruj kanały wiadomości: Kanały
- Skonfiguruj Gateway: Konfiguracja Gateway
- Utrzymuj OpenClaw w aktualnej wersji: Aktualizowanie