diff --git a/docs/uk/install/fly.md b/docs/uk/install/fly.md
index 741273d08..4dfa09132 100644
--- a/docs/uk/install/fly.md
+++ b/docs/uk/install/fly.md
@@ -2,46 +2,46 @@
read_when:
- Розгортання OpenClaw на Fly.io
- Налаштування томів Fly, секретів і конфігурації першого запуску
-summary: Покрокове розгортання OpenClaw на Fly.io зі сталим сховищем і HTTPS
+summary: Покрокове розгортання OpenClaw на Fly.io з постійним сховищем і HTTPS
title: Fly.io
x-i18n:
- generated_at: "2026-04-27T07:08:16Z"
- model: gpt-5.4
+ generated_at: "2026-05-03T13:42:43Z"
+ model: gpt-5.5
provider: openai
- source_hash: 195a77c4cec439dc2b5030f5ee618274df76b16d878b8d16e65a754e4bd8072c
+ source_hash: d9b98b2d1c102195e31ee7e93ba075e6cfa16080e78f8e17fc006a62d300ce1a
source_path: install/fly.md
- workflow: 15
+ workflow: 16
---
# Розгортання Fly.io
-**Мета:** Gateway OpenClaw, що працює на машині [Fly.io](https://fly.io), зі сталим сховищем, автоматичним HTTPS і доступом до Discord/каналів.
+**Мета:** OpenClaw Gateway, запущений на машині [Fly.io](https://fly.io), зі сталим сховищем, автоматичним HTTPS і доступом до Discord/каналу.
-## Що вам потрібно
+## Що потрібно
-- встановлений [flyctl CLI](https://fly.io/docs/hands-on/install-flyctl/)
-- обліковий запис Fly.io (безкоштовний тариф підходить)
-- автентифікація моделі: API-ключ для вибраного вами постачальника моделей
-- облікові дані каналу: токен Discord-бота, токен Telegram тощо
+- Встановлений [flyctl CLI](https://fly.io/docs/hands-on/install-flyctl/)
+- Обліковий запис Fly.io (безкоштовний рівень підходить)
+- Автентифікація моделі: API-ключ для вибраного постачальника моделей
+- Облікові дані каналу: токен бота Discord, токен Telegram тощо.
## Швидкий шлях для початківців
1. Клонуйте репозиторій → налаштуйте `fly.toml`
2. Створіть застосунок і том → задайте секрети
3. Розгорніть за допомогою `fly deploy`
-4. Увійдіть через SSH, щоб створити конфігурацію, або скористайтеся Control UI
+4. Увійдіть через SSH, щоб створити конфігурацію, або використайте інтерфейс керування
-
+
```bash
- # Клонуйте репозиторій
+ # Clone the repo
git clone https://github.com/openclaw/openclaw.git
cd openclaw
- # Створіть новий застосунок Fly (виберіть власну назву)
+ # Create a new Fly app (pick your own name)
fly apps create my-openclaw
- # Створіть сталий том (зазвичай достатньо 1GB)
+ # Create a persistent volume (1GB is usually enough)
fly volumes create openclaw_data --size 1 --region iad
```
@@ -49,13 +49,13 @@ x-i18n:
-
- Відредагуйте `fly.toml`, щоб він відповідав назві вашого застосунку та вашим вимогам.
+
+ Відредагуйте `fly.toml`, щоб він відповідав назві вашого застосунку та вимогам.
- **Примітка щодо безпеки:** Конфігурація за замовчуванням відкриває публічну URL-адресу. Для захищеного розгортання без публічної IP-адреси див. [Приватне розгортання](#private-deployment-hardened) або використовуйте `fly.private.toml`.
+ **Примітка щодо безпеки:** Типова конфігурація відкриває публічну URL-адресу. Для посиленого розгортання без публічної IP-адреси див. [Приватне розгортання](#private-deployment-hardened) або використайте `deploy/fly.private.toml`.
```toml
- app = "my-openclaw" # Назва вашого застосунку
+ app = "my-openclaw" # Your app name
primary_region = "iad"
[build]
@@ -87,48 +87,48 @@ x-i18n:
destination = "/data"
```
- **Ключові параметри:**
+ **Ключові налаштування:**
- | Параметр | Навіщо |
- | ----------------------------- | --------------------------------------------------------------------------- |
- | `--bind lan` | Прив’язує до `0.0.0.0`, щоб проксі Fly міг досягти gateway |
- | `--allow-unconfigured` | Запускає без файла конфігурації (ви створите його пізніше) |
- | `internal_port = 3000` | Має збігатися з `--port 3000` (або `OPENCLAW_GATEWAY_PORT`) для перевірок стану Fly |
- | `memory = "2048mb"` | 512MB замало; рекомендовано 2GB |
- | `OPENCLAW_STATE_DIR = "/data"`| Зберігає стан у томі |
+ | Налаштування | Навіщо |
+ | ----------------------------- | -------------------------------------------------------------------------- |
+ | `--bind lan` | Прив’язує до `0.0.0.0`, щоб проксі Fly міг досягати Gateway |
+ | `--allow-unconfigured` | Запускає без файлу конфігурації (ви створите його пізніше) |
+ | `internal_port = 3000` | Має відповідати `--port 3000` (або `OPENCLAW_GATEWAY_PORT`) для перевірок стану Fly |
+ | `memory = "2048mb"` | 512 МБ замало; рекомендовано 2 ГБ |
+ | `OPENCLAW_STATE_DIR = "/data"` | Зберігає стан на томі |
-
+
```bash
- # Обов’язково: токен Gateway (для прив’язки не до loopback)
+ # Required: Gateway token (for non-loopback binding)
fly secrets set OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
- # API-ключі постачальників моделей
+ # Model provider API keys
fly secrets set ANTHROPIC_API_KEY=sk-ant-...
- # Необов’язково: інші постачальники
+ # Optional: Other providers
fly secrets set OPENAI_API_KEY=sk-...
fly secrets set GOOGLE_API_KEY=...
- # Токени каналів
+ # Channel tokens
fly secrets set DISCORD_BOT_TOKEN=MTQ...
```
**Примітки:**
- - Прив’язки не до loopback (`--bind lan`) потребують дійсного шляху автентифікації gateway. У цьому прикладі Fly.io використовується `OPENCLAW_GATEWAY_TOKEN`, але вимогу також задовольняють `gateway.auth.password` або правильно налаштоване розгортання `trusted-proxy` не на loopback.
- - Ставтеся до цих токенів як до паролів.
- - **Надавайте перевагу env vars замість файла конфігурації** для всіх API-ключів і токенів. Це не дозволить секретам потрапити в `openclaw.json`, де вони можуть бути випадково розкриті або записані в журнали.
+ - Прив’язки не до loopback (`--bind lan`) потребують чинного шляху автентифікації Gateway. У цьому прикладі Fly.io використовується `OPENCLAW_GATEWAY_TOKEN`, але `gateway.auth.password` або правильно налаштоване розгортання `trusted-proxy` не до loopback також задовольняє цю вимогу.
+ - Поводьтеся з цими токенами як із паролями.
+ - **Надавайте перевагу змінним середовища замість файлу конфігурації** для всіх API-ключів і токенів. Це не дає секретам потрапити в `openclaw.json`, де їх можна випадково розкрити або записати в журнал.
-
+
```bash
fly deploy
```
- Перше розгортання збирає Docker-образ (~2–3 хвилини). Наступні розгортання швидші.
+ Перше розгортання збирає Docker-образ (~2-3 хвилини). Наступні розгортання швидші.
Після розгортання перевірте:
@@ -146,14 +146,14 @@ x-i18n:
-
- Підключіться до машини через SSH, щоб створити правильну конфігурацію:
+
+ Увійдіть у машину через SSH, щоб створити належну конфігурацію:
```bash
fly ssh console
```
- Створіть каталог конфігурації та файл:
+ Створіть каталог і файл конфігурації:
```bash
mkdir -p /data
@@ -214,20 +214,18 @@ x-i18n:
EOF
```
- **Примітка:** З `OPENCLAW_STATE_DIR=/data` шлях до конфігурації — `/data/openclaw.json`.
+ **Примітка:** З `OPENCLAW_STATE_DIR=/data` шлях конфігурації — `/data/openclaw.json`.
- **Примітка:** Замініть `https://my-openclaw.fly.dev` на справжнє
- origin вашого застосунку Fly. Під час запуску Gateway ініціалізує локальні origin для Control UI на основі значень `--bind` і `--port` у середовищі виконання, тож перший запуск може відбутися ще до існування конфігурації, але для доступу з браузера через Fly все одно потрібно точно вказати HTTPS origin у
- `gateway.controlUi.allowedOrigins`.
+ **Примітка:** Замініть `https://my-openclaw.fly.dev` на справжнє джерело вашого застосунку Fly. Під час запуску Gateway початково додає локальні джерела інтерфейсу керування з runtime-значень `--bind` і `--port`, щоб перше завантаження могло продовжитися до появи конфігурації, але доступ через браузер через Fly усе одно потребує точної HTTPS-адреси джерела, переліченої в `gateway.controlUi.allowedOrigins`.
- **Примітка:** Токен Discord може надходити з одного з двох джерел:
+ **Примітка:** Токен Discord може надходити з будь-якого з цих джерел:
- - змінна середовища: `DISCORD_BOT_TOKEN` (рекомендовано для секретів)
- - файл конфігурації: `channels.discord.token`
+ - Змінна середовища: `DISCORD_BOT_TOKEN` (рекомендовано для секретів)
+ - Файл конфігурації: `channels.discord.token`
- Якщо ви використовуєте env var, додавати токен до конфігурації не потрібно. Gateway автоматично зчитує `DISCORD_BOT_TOKEN`.
+ Якщо використовуєте змінну середовища, не потрібно додавати токен у конфігурацію. Gateway автоматично читає `DISCORD_BOT_TOKEN`.
- Перезапустіть, щоб застосувати зміни:
+ Перезапустіть, щоб застосувати:
```bash
exit
@@ -236,8 +234,8 @@ x-i18n:
-
- ### Control UI
+
+ ### Інтерфейс керування
Відкрийте в браузері:
@@ -245,18 +243,18 @@ x-i18n:
fly open
```
- Або перейдіть за адресою `https://my-openclaw.fly.dev/`
+ Або перейдіть на `https://my-openclaw.fly.dev/`
- Автентифікуйтеся за допомогою налаштованого спільного секрету. У цьому посібнику використовується токен gateway з `OPENCLAW_GATEWAY_TOKEN`; якщо ви перейшли на автентифікацію за паролем, використовуйте натомість цей пароль.
+ Автентифікуйтеся за допомогою налаштованого спільного секрету. У цьому посібнику використовується токен Gateway з `OPENCLAW_GATEWAY_TOKEN`; якщо ви перейшли на автентифікацію паролем, використайте натомість цей пароль.
### Журнали
```bash
- fly logs # Журнали в реальному часі
- fly logs --no-tail # Останні журнали
+ fly logs # Live logs
+ fly logs --no-tail # Recent logs
```
- ### Консоль SSH
+ ### SSH-консоль
```bash
fly ssh console
@@ -265,25 +263,25 @@ x-i18n:
-## Усунення проблем
+## Усунення несправностей
-### "App is not listening on expected address"
+### «Застосунок не прослуховує очікувану адресу»
-Gateway прив’язується до `127.0.0.1`, а не до `0.0.0.0`.
+Gateway прив’язується до `127.0.0.1` замість `0.0.0.0`.
**Виправлення:** Додайте `--bind lan` до команди процесу в `fly.toml`.
-### Перевірки стану не проходять / connection refused
+### Перевірки стану не проходять / у з’єднанні відмовлено
-Fly не може досягти gateway на налаштованому порту.
+Fly не може досягти Gateway на налаштованому порту.
-**Виправлення:** Переконайтеся, що `internal_port` збігається з портом gateway (задайте `--port 3000` або `OPENCLAW_GATEWAY_PORT=3000`).
+**Виправлення:** Переконайтеся, що `internal_port` відповідає порту Gateway (задайте `--port 3000` або `OPENCLAW_GATEWAY_PORT=3000`).
### OOM / проблеми з пам’яттю
Контейнер постійно перезапускається або завершується примусово. Ознаки: `SIGABRT`, `v8::internal::Runtime_AllocateInYoungGeneration` або тихі перезапуски.
-**Виправлення:** Збільште обсяг пам’яті в `fly.toml`:
+**Виправлення:** Збільште пам’ять у `fly.toml`:
```toml
[[vm]]
@@ -296,13 +294,13 @@ Fly не може досягти gateway на налаштованому пор
fly machine update --vm-memory 2048 -y
```
-**Примітка:** 512MB замало. 1GB може працювати, але може призвести до OOM під навантаженням або з докладним журналюванням. **Рекомендовано 2GB.**
+**Примітка:** 512 МБ замало. 1 ГБ може працювати, але може спричинити OOM під навантаженням або з докладним журналюванням. **Рекомендовано 2 ГБ.**
### Проблеми з блокуванням Gateway
-Gateway відмовляється запускатися з помилками на кшталт "already running".
+Gateway відмовляється запускатися з помилками «already running».
-Це трапляється, коли контейнер перезапускається, але файл блокування PID зберігається в томі.
+Це трапляється, коли контейнер перезапускається, але PID-файл блокування зберігається на томі.
**Виправлення:** Видаліть файл блокування:
@@ -311,11 +309,11 @@ fly ssh console --command "rm -f /data/gateway.*.lock"
fly machine restart
```
-Файл блокування розташований за шляхом `/data/gateway.*.lock` (не в підкаталозі).
+Файл блокування розташований у `/data/gateway.*.lock` (не в підкаталозі).
-### Конфігурація не зчитується
+### Конфігурація не читається
-`--allow-unconfigured` лише обходить перевірку під час запуску. Він не створює й не відновлює `/data/openclaw.json`, тож переконайтеся, що ваша справжня конфігурація існує і містить `gateway.mode="local"`, якщо вам потрібен звичайний локальний запуск gateway.
+`--allow-unconfigured` лише обходить запобіжник запуску. Він не створює й не відновлює `/data/openclaw.json`, тож переконайтеся, що ваша справжня конфігурація існує та містить `gateway.mode="local"`, коли потрібен звичайний локальний запуск Gateway.
Перевірте, що конфігурація існує:
@@ -328,10 +326,10 @@ fly ssh console --command "cat /data/openclaw.json"
Команда `fly ssh console -C` не підтримує перенаправлення оболонки. Щоб записати файл конфігурації:
```bash
-# Використовуйте echo + tee (передайте з локальної машини на віддалену)
+# Use echo + tee (pipe from local to remote)
echo '{"your":"config"}' | fly ssh console -C "tee /data/openclaw.json"
-# Або використовуйте sftp
+# Or use sftp
fly sftp shell
> put /local/path/config.json /data/openclaw.json
```
@@ -344,79 +342,78 @@ fly ssh console --command "rm /data/openclaw.json"
### Стан не зберігається
-Якщо після перезапуску ви втрачаєте профілі автентифікації, стан каналу/постачальника або сесії,
-це означає, що каталог стану записується у файлову систему контейнера.
+Якщо після перезапуску ви втрачаєте профілі автентифікації, стан каналу/постачальника або сеанси, каталог стану записується у файлову систему контейнера.
-**Виправлення:** Переконайтеся, що в `fly.toml` задано `OPENCLAW_STATE_DIR=/data`, і виконайте повторне розгортання.
+**Виправлення:** Переконайтеся, що `OPENCLAW_STATE_DIR=/data` задано у `fly.toml`, і повторно розгорніть.
## Оновлення
```bash
-# Отримайте останні зміни
+# Pull latest changes
git pull
-# Повторно розгорніть
+# Redeploy
fly deploy
-# Перевірте стан
+# Check health
fly status
fly logs
```
### Оновлення команди машини
-Якщо вам потрібно змінити команду запуску без повного повторного розгортання:
+Якщо потрібно змінити команду запуску без повного повторного розгортання:
```bash
-# Отримайте ID машини
+# Get machine ID
fly machines list
-# Оновіть команду
+# Update command
fly machine update --command "node dist/index.js gateway --port 3000 --bind lan" -y
-# Або разом зі збільшенням пам’яті
+# Or with memory increase
fly machine update --vm-memory 2048 --command "node dist/index.js gateway --port 3000 --bind lan" -y
```
-**Примітка:** Після `fly deploy` команда машини може скинутися до значення з `fly.toml`. Якщо ви вносили зміни вручну, застосуйте їх повторно після розгортання.
+**Примітка:** Після `fly deploy` команда машини може скинутися до того, що вказано в `fly.toml`. Якщо ви внесли зміни вручну, застосуйте їх повторно після розгортання.
-## Приватне розгортання (захищене)
+## Приватне розгортання (посилене)
-За замовчуванням Fly виділяє публічні IP-адреси, роблячи ваш gateway доступним за адресою `https://your-app.fly.dev`. Це зручно, але означає, що ваше розгортання можуть виявити інтернет-сканери (Shodan, Censys тощо).
+За замовчуванням Fly виділяє публічні IP-адреси, роблячи ваш Gateway доступним за `https://your-app.fly.dev`. Це зручно, але означає, що ваше розгортання можуть виявити інтернет-сканери (Shodan, Censys тощо).
-Для захищеного розгортання **без публічної доступності** використовуйте приватний шаблон.
+Для посиленого розгортання **без публічної доступності** використайте приватний шаблон.
-### Коли варто використовувати приватне розгортання
+### Коли використовувати приватне розгортання
-- Ви виконуєте лише **вихідні** виклики/повідомлення (без вхідних Webhook)
-- Ви використовуєте тунелі **ngrok або Tailscale** для будь-яких callback Webhook
-- Ви отримуєте доступ до gateway через **SSH, проксі або WireGuard**, а не через браузер
-- Ви хочете **приховати** розгортання від інтернет-сканерів
+- Ви здійснюєте лише **вихідні** виклики/повідомлення (без вхідних Webhook)
+- Ви використовуєте тунелі **ngrok або Tailscale** для будь-яких зворотних викликів Webhook
+- Ви отримуєте доступ до Gateway через **SSH, проксі або WireGuard** замість браузера
+- Ви хочете, щоб розгортання було **приховане від інтернет-сканерів**
### Налаштування
-Використовуйте `fly.private.toml` замість стандартної конфігурації:
+Використайте `deploy/fly.private.toml` замість стандартної конфігурації:
```bash
-# Розгорніть із приватною конфігурацією
-fly deploy -c fly.private.toml
+# Deploy with private config
+fly deploy -c deploy/fly.private.toml
```
Або перетворіть наявне розгортання:
```bash
-# Перелічіть поточні IP
+# List current IPs
fly ips list -a my-openclaw
-# Звільніть публічні IP
+# Release public IPs
fly ips release -a my-openclaw
fly ips release -a my-openclaw
-# Перейдіть на приватну конфігурацію, щоб майбутні розгортання не перевиділяли публічні IP
-# (видаліть [http_service] або розгорніть за допомогою приватного шаблону)
-fly deploy -c fly.private.toml
+# Switch to private config so future deploys don't re-allocate public IPs
+# (remove [http_service] or deploy with the private template)
+fly deploy -c deploy/fly.private.toml
-# Виділіть лише приватний IPv6
+# Allocate private-only IPv6
fly ips allocate-v6 --private -a my-openclaw
```
@@ -429,25 +426,25 @@ v6 fdaa:x:x:x:x::x private global
### Доступ до приватного розгортання
-Оскільки публічної URL-адреси немає, використовуйте один із цих способів:
+Оскільки публічної URL-адреси немає, використайте один із цих методів:
**Варіант 1: Локальний проксі (найпростіше)**
```bash
-# Перенаправте локальний порт 3000 до застосунку
+# Forward local port 3000 to the app
fly proxy 3000:3000 -a my-openclaw
-# Потім відкрийте в браузері http://localhost:3000
+# Then open http://localhost:3000 in browser
```
-**Варіант 2: VPN WireGuard**
+**Варіант 2: WireGuard VPN**
```bash
-# Створіть конфігурацію WireGuard (одноразово)
+# Create WireGuard config (one-time)
fly wireguard create
-# Імпортуйте до клієнта WireGuard, потім отримайте доступ через внутрішній IPv6
-# Приклад: http://[fdaa:x:x:x:x::x]:3000
+# Import to WireGuard client, then access via internal IPv6
+# Example: http://[fdaa:x:x:x:x::x]:3000
```
**Варіант 3: Лише SSH**
@@ -456,15 +453,15 @@ fly wireguard create
fly ssh console -a my-openclaw
```
-### Webhook у приватному розгортанні
+### Webhook-и з приватним розгортанням
-Якщо вам потрібні callback Webhook (Twilio, Telnyx тощо) без публічної доступності:
+Якщо вам потрібні зворотні виклики Webhook (Twilio, Telnyx тощо) без відкриття для публічного доступу:
-1. **тунель ngrok** — запустіть ngrok всередині контейнера або як sidecar
-2. **Tailscale Funnel** — відкрийте конкретні шляхи через Tailscale
-3. **лише вихідний трафік** — деякі постачальники (Twilio) добре працюють для вихідних викликів без Webhook
+1. **Тунель ngrok** - Запустіть ngrok усередині контейнера або як sidecar
+2. **Tailscale Funnel** - Відкрийте певні шляхи через Tailscale
+3. **Лише вихідний зв’язок** - Деякі провайдери (Twilio) нормально працюють для вихідних викликів без Webhook-ів
-Приклад конфігурації голосових викликів з ngrok:
+Приклад конфігурації голосового виклику з ngrok:
```json5
{
@@ -485,35 +482,35 @@ fly ssh console -a my-openclaw
}
```
-Тунель ngrok працює всередині контейнера та надає публічну URL-адресу Webhook, не відкриваючи сам застосунок Fly. Установіть `webhookSecurity.allowedHosts` на ім’я хоста публічного тунелю, щоб переслані заголовки host приймалися.
+Тунель ngrok працює всередині контейнера та надає публічну URL-адресу Webhook без відкриття самого застосунку Fly для публічного доступу. Установіть `webhookSecurity.allowedHosts` на публічне ім’я хоста тунелю, щоб переслані заголовки хоста приймалися.
### Переваги безпеки
-| Аспект | Публічне | Приватне |
-| ----------------- | ------------ | ---------- |
-| Інтернет-сканери | Виявляється | Приховане |
-| Прямі атаки | Можливі | Заблоковані |
-| Доступ до Control UI | Браузер | Проксі/VPN |
-| Доставка Webhook | Напряму | Через тунель |
+| Аспект | Публічний | Приватний |
+| ---------------------------- | ------------------------ | -------------- |
+| Інтернет-сканери | Можна виявити | Приховано |
+| Прямі атаки | Можливі | Заблоковано |
+| Доступ до інтерфейсу керування | Браузер | Проксі/VPN |
+| Доставка Webhook | Пряма | Через тунель |
## Примітки
- Fly.io використовує **архітектуру x86** (не ARM)
- Dockerfile сумісний з обома архітектурами
-- Для onboarding WhatsApp/Telegram використовуйте `fly ssh console`
-- Постійні дані зберігаються в томі за шляхом `/data`
-- Signal потребує Java + `signal-cli`; використовуйте власний образ і тримайте пам’ять на рівні 2GB+.
+- Для онбордингу WhatsApp/Telegram використовуйте `fly ssh console`
+- Постійні дані зберігаються на томі за шляхом `/data`
+- Signal потребує Java + signal-cli; використовуйте власний образ і тримайте пам’ять на рівні 2 ГБ+.
## Вартість
-З рекомендованою конфігурацією (`shared-cpu-2x`, 2GB RAM):
+З рекомендованою конфігурацією (`shared-cpu-2x`, 2 ГБ оперативної пам’яті):
-- приблизно ~$10-15/місяць залежно від використання
-- безкоштовний тариф включає певний ліміт
+- ~$10-15/місяць залежно від використання
+- Безкоштовний тариф включає певну квоту
-Докладніше див. у [тарифах Fly.io](https://fly.io/docs/about/pricing/).
+Докладніше див. [ціни Fly.io](https://fly.io/docs/about/pricing/).
-## Подальші кроки
+## Наступні кроки
- Налаштуйте канали обміну повідомленнями: [Канали](/uk/channels)
- Налаштуйте Gateway: [Конфігурація Gateway](/uk/gateway/configuration)
@@ -524,4 +521,4 @@ fly ssh console -a my-openclaw
- [Огляд встановлення](/uk/install)
- [Hetzner](/uk/install/hetzner)
- [Docker](/uk/install/docker)
-- [VPS-хостинг](/uk/vps)
+- [Хостинг VPS](/uk/vps)