Що потрібно
- установлений CLI flyctl
- обліковий запис Fly.io (безкоштовний рівень підходить)
- автентифікація моделі: ключ API для вибраного постачальника моделі
- облікові дані каналу: токен бота Discord, токен Telegram тощо.
Швидкий шлях для початківців
- клонуйте репозиторій, налаштуйте
fly.toml - створіть застосунок і том, задайте секрети
- розгорніть за допомогою
fly deploy - підключіться через SSH, щоб створити конфігурацію, або скористайтеся інтерфейсом керування
1
Створіть застосунок Fly
lhr (Лондон), iad (Вірджинія), sjc (Сан-Хосе).2
Налаштуйте fly.toml
Відредагуйте Точкою входу образу Docker OpenClaw є
fly.toml відповідно до назви застосунку та ваших вимог. Відстежуваний у репозиторії файл fly.toml — це загальнодоступний шаблон, наведений нижче; deploy/fly.private.toml — посилений варіант без загальнодоступної IP-адреси (див. Приватне розгортання).tini, яка за замовчуванням запускає node openclaw.mjs gateway. Fly [processes] замінює Docker CMD (тут безпосередньо запускається node dist/index.js gateway ..., та сама скомпільована точка входу), не змінюючи ENTRYPOINT, тому процес і далі виконується від імені tini.Ключові параметри:3
Задайте секрети
--bind lan) потребує чинного способу автентифікації Gateway. У цьому прикладі використано OPENCLAW_GATEWAY_TOKEN, але gateway.auth.password або правильно налаштоване розгортання з довіреним проксі та прив’язуванням не до loopback також задовольняють цю вимогу. Контракт SecretRef описано в розділі Керування секретами.Ставтеся до цих токенів як до паролів. Для ключів API й токенів віддавайте перевагу змінним середовища/fly secrets, а не файлу конфігурації, щоб секрети не потрапляли до openclaw.json.4
Розгорніть
gateway ready. Власна перевірка працездатності Fly відстежує internal_port = 3000 відповідно до fly.toml; директива Docker HEALTHCHECK в образі додатково опитує /healthz на стандартному порту 18789, який тут не використовується, оскільки це розгортання перевизначає порт Gateway на --port 3000.5
Створіть файл конфігурації
Підключіться до машини через SSH, щоб створити належну конфігурацію:За наявності
OPENCLAW_STATE_DIR=/data шлях до конфігурації — /data/openclaw.json.Замініть https://my-openclaw.fly.dev фактичним джерелом вашого застосунку Fly. Під час запуску Gateway початковий список локальних джерел інтерфейсу керування формується зі значень середовища виконання --bind і --port, щоб перше завантаження могло відбутися до створення конфігурації, але для доступу з браузера через Fly точне джерело HTTPS усе одно має бути вказане в gateway.controlUi.allowedOrigins.Токен Discord можна отримати з одного з таких джерел:- змінна середовища
DISCORD_BOT_TOKEN(рекомендовано для секретів); додавати її до конфігурації не потрібно, Gateway зчитує її автоматично - файл конфігурації
channels.discord.token
Усунення несправностей
«Застосунок не прослуховує очікувану адресу»
Gateway прив’язується до127.0.0.1 замість 0.0.0.0.
Виправлення: додайте --bind lan до команди процесу в fly.toml.
Перевірки працездатності завершуються невдало / у з’єднанні відмовлено
Fly не може звернутися до Gateway через налаштований порт. Виправлення: переконайтеся, щоinternal_port відповідає порту Gateway (--port 3000 або OPENCLAW_GATEWAY_PORT=3000).
OOM / проблеми з пам’яттю
Контейнер постійно перезапускається або примусово завершується. Ознаки:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration або перезапуски без повідомлень.
Виправлення: збільште обсяг пам’яті в fly.toml:
Проблеми з блокуванням Gateway
Gateway відмовляється запускатися з помилками «already running» після перезапуску контейнера. Файли блокування середовища виконання розташовані в<tmpdir>/openclaw-<uid>/gateway.<hash>.lock
і gateway.state.<hash>.lock (у Linux:
/tmp/openclaw-<uid>/gateway.*.lock), а не на постійному томі /data, тому
повний перезапуск контейнера зазвичай видаляє їх разом з рештою файлової
системи контейнера. Якщо блокування збереглося (наприклад, через fly machine restart,
що зберігає файлову систему контейнера) і перешкоджає запуску, видаліть його
вручну:
Конфігурація не зчитується
--allow-unconfigured лише обходить перевірку під час запуску. Цей параметр не створює й не виправляє /data/openclaw.json, тому переконайтеся, що фактична конфігурація існує та містить "gateway": { "mode": "local" } для звичайного локального запуску Gateway.
Переконайтеся, що конфігурація існує:
Запис конфігурації через SSH
fly ssh console -C не підтримує переспрямування оболонки. Щоб записати файл конфігурації:
fly sftp може завершитися невдало, якщо файл уже існує; спершу видаліть його:
Стан не зберігається
Якщо після перезапуску зникають профілі автентифікації, стан каналу/постачальника або сеанси, каталог стану записується до файлової системи контейнера, а не на том. Виправлення: переконайтеся, щоOPENCLAW_STATE_DIR=/data задано в fly.toml, і повторно розгорніть застосунок.
Оновлення
git pull + fly deploy — це контрольований шлях у цьому випадку: він повторно збирає образ із Dockerfile, тому версія CLI/Gateway, базовий образ ОС і всі зміни Dockerfile оновлюються разом. openclaw update усередині запущеного контейнера — це інша операція, оскільки образ постачається як створене Docker дерево dist/ без робочої копії .git і без глобального встановлення через npm, яке він міг би виявити; опис цього процесу для встановлень на віртуальних машинах див. у розділі Оновлення.
Оновлення команди машини
Щоб змінити команду запуску без повного повторного розгортання:fly deploy скине команду машини до значення з fly.toml; після повторного розгортання знову застосуйте зміни, внесені вручну.
Приватне розгортання (посилене)
За замовчуванням Fly виділяє загальнодоступні IP-адреси, тому ваш Gateway доступний за адресоюhttps://your-app.fly.dev і може бути виявлений інтернет-сканерами (Shodan, Censys тощо).
Використовуйте deploy/fly.private.toml для посиленого розгортання без загальнодоступної IP-адреси: у ньому немає [http_service], тому загальнодоступний вхідний доступ не виділяється.
Коли використовувати приватне розгортання
- лише вихідні виклики/повідомлення (без вхідних вебхуків)
- тунелі ngrok або Tailscale обробляють усі зворотні виклики вебхуків
- доступ до Gateway здійснюється через SSH, проксі або WireGuard, а не через браузер
- розгортання має бути приховане від інтернет-сканерів
Налаштування
fly ips list має показувати лише IP-адресу типу private:
Доступ до приватного розгортання
Варіант 1: локальний проксі (найпростіший)Webhook із приватним розгортанням
Для зворотних викликів Webhook (Twilio, Telnyx тощо) без публічного доступу:- тунель ngrok: запустіть ngrok усередині контейнера або як допоміжний контейнер
- Tailscale Funnel: надайте доступ до певних шляхів через Tailscale
- лише вихідні з’єднання: деякі постачальники (Twilio) дають змогу здійснювати вихідні виклики без Webhook
plugins.entries.voice-call.config:
webhookSecurity.allowedHosts ім’я хоста тунелю, щоб дозволити переспрямовані заголовки хоста.
Компроміси щодо безпеки
Примітки
- Fly.io використовує архітектуру x86; Dockerfile сумісний як із x86, так і з ARM.
- Для початкового налаштування WhatsApp/Telegram використовуйте
fly ssh console. - Постійні дані зберігаються на томі за шляхом
/data. - Для Signal в образі потрібен signal-cli (CLI на основі Java); використовуйте власний образ і виділіть щонайменше 2GB пам’яті.
Вартість
За рекомендованої конфігурації (shared-cpu-2x, 2GB оперативної пам’яті) очікуйте витрати приблизно $10-15 на місяць залежно від використання; безкоштовний рівень покриває частину базового ліміту. Поточні тарифи наведено на сторінці цін Fly.io.
Наступні кроки
- Налаштуйте канали обміну повідомленнями: Канали
- Налаштуйте Gateway: Конфігурація Gateway
- Підтримуйте OpenClaw в актуальному стані: Оновлення