Развёртывание на Fly.io
Цель: Gateway (шлюз) OpenClaw, запущенный на машине Fly.io с постоянным хранилищем, автоматическим HTTPS и доступом к Discord/каналам.Что потребуется
- Установленный CLI flyctl
- Учётная запись Fly.io (подходит бесплатный тариф)
- Аутентификация модели: ключ API Anthropic (или ключи других провайдеров)
- Учётные данные каналов: токен бота Discord, токен Telegram и т. д.
Быстрый путь для начинающих
- Клонировать репозиторий → настроить
fly.toml - Создать приложение и том → задать секреты
- Развернуть с помощью
fly deploy - Подключиться по SSH для создания конфига или использовать Control UI
1) Создание приложения Fly
lhr (Лондон), iad (Вирджиния), sjc (Сан-Хосе).
2. Настройка fly.toml
Отредактируйтеfly.toml в соответствии с именем вашего приложения и требованиями.
Примечание по безопасности: Конфигурация по умолчанию публикует общедоступный URL. Для защищённого развёртывания без публичного IP см. Private Deployment или используйте fly.private.toml.
| Параметр | Зачем |
|---|---|
--bind lan | Привязывается к 0.0.0.0, чтобы прокси Fly мог обращаться к шлюзу |
--allow-unconfigured | Запуск без файла конфига (вы создадите его позже) |
internal_port = 3000 | Должен совпадать с --port 3000 (или OPENCLAW_GATEWAY_PORT) для health checks Fly |
memory = "2048mb" | 512 МБ слишком мало; рекомендуется 2 ГБ |
OPENCLAW_STATE_DIR = "/data" | Сохраняет состояние на громкости |
3. Установка секретов
- Привязки не к loopback (
--bind lan) требуютOPENCLAW_GATEWAY_TOKENиз соображений безопасности. - Обращайтесь с этими токенами как с паролями.
- Предпочитайте переменные окружения файлу конфига для всех ключей API и токенов. Это предотвращает попадание секретов в
openclaw.json, где они могут быть случайно раскрыты или залогированы.
4. Развёртывание
5. Создание файла конфига
Подключитесь по SSH к машине, чтобы создать корректный конфиг:OPENCLAW_STATE_DIR=/data путь к конфигу — /data/openclaw.json.
Примечание: Токен Discord может задаваться одним из способов:
- Переменная окружения:
DISCORD_BOT_TOKEN(рекомендуется для секретов) - Файл конфига:
channels.discord.token
DISCORD_BOT_TOKEN.
Перезапустите для применения:
6. Доступ к Gateway (шлюзу)
Интерфейс управления
Откройте в браузере:https://my-openclaw.fly.dev/
Вставьте ваш токен шлюза (тот, что из OPENCLAW_GATEWAY_TOKEN) для аутентификации.
Логи
Консоль SSH
Устранение неполадок
«App is not listening on expected address»
Шлюз привязывается к127.0.0.1 вместо 0.0.0.0.
Исправление: Добавьте --bind lan в команду процесса в fly.toml.
Сбои health checks / connection refused
Fly не может подключиться к шлюзу на настроенном порту. Исправление: Убедитесь, чтоinternal_port соответствует порту шлюза (задайте --port 3000 или OPENCLAW_GATEWAY_PORT=3000).
OOM / проблемы с памятью
Контейнер постоянно перезапускается или завершается. Признаки:SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration или «тихие» перезапуски.
Исправление: Увеличьте память в fly.toml:
Проблемы с блокировкой Gateway
Шлюз отказывается запускаться с ошибками «already running». Это происходит, когда контейнер перезапускается, но PID-файл блокировки сохраняется на томе. Исправление: Удалите файл блокировки:/data/gateway.*.lock (не в подкаталоге).
Конфиг не читается
При использовании--allow-unconfigured шлюз создаёт минимальный конфиг. Ваш пользовательский конфиг по пути /data/openclaw.json должен читаться после перезапуска.
Проверьте, что конфиг существует:
Запись конфига через SSH
Командаfly ssh console -C не поддерживает перенаправление оболочки. Чтобы записать файл конфига:
fly sftp может завершиться с ошибкой, если файл уже существует. Сначала удалите его:
Состояние не сохраняется
Если после перезапуска теряются учётные данные или сессии, каталог состояния записывается в файловую систему контейнера. Исправление: Убедитесь, чтоOPENCLAW_STATE_DIR=/data задан в fly.toml, и выполните повторное развёртывание.
Обновления
Обновление команды машины
Если нужно изменить команду запуска без полного развёртывания:fly deploy команда машины может быть сброшена к значению из fly.toml. Если вы вносили изменения вручную, примените их повторно после развёртывания.
Частное развёртывание (усиленная защита)
По умолчанию Fly выделяет публичные IP-адреса, делая ваш шлюз доступным по адресуhttps://your-app.fly.dev. Это удобно, но означает, что развёртывание обнаружимо интернет-сканерами (Shodan, Censys и т. д.).
Для усиленного развёртывания без публичного доступа используйте частный шаблон.
Когда использовать частное развёртывание
- Вы выполняете только исходящие вызовы/сообщения (без входящих вебхуков)
- Для любых колбэков вебхуков используете туннели ngrok или Tailscale
- Доступ к шлюзу осуществляется через SSH, прокси или WireGuard, а не через браузер
- Вы хотите, чтобы развёртывание было скрыто от интернет-сканеров
Настройка
Используйтеfly.private.toml вместо стандартной конфигурации:
fly ips list должен показывать только IP типа private:
Доступ к частному развёртыванию
Поскольку публичного URL нет, используйте один из способов: Вариант 1: Локальный прокси (самый простой)Вебхуки при частном развёртывании
Если требуются колбэки вебхуков (Twilio, Telnyx и т. д.) без публичного доступа:- Туннель ngrok — запустите ngrok внутри контейнера или как сайдкар
- Tailscale Funnel — откройте конкретные пути через Tailscale
- Только исходящие — некоторые провайдеры (Twilio) нормально работают для исходящих вызовов без вебхуков
webhookSecurity.allowedHosts в имя хоста публичного туннеля, чтобы принимались проброшенные заголовки host.
Преимущества безопасности
| Аспект | Публичное | Частное |
|---|---|---|
| Интернет-сканеры | Обнаружимо | Скрыто |
| Прямые атаки | Возможны | Заблокированы |
| Доступ к Control UI | Браузер | Прокси/VPN |
| Доставка вебхуков | Напрямую | Через туннель |
Примечания
- Fly.io использует архитектуру x86 (не ARM)
- Dockerfile совместим с обеими архитектурами
- Для онбординга WhatsApp/Telegram используйте
fly ssh console - Постоянные данные хранятся на томе по пути
/data - Signal требует Java + signal-cli; используйте пользовательский образ и держите память на уровне 2 ГБ+.
Стоимость
С рекомендуемой конфигурацией (shared-cpu-2x, 2 ГБ ОЗУ):
- ~$10–15 в месяц в зависимости от использования
- Бесплатный тариф включает некоторый лимит