chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-03 13:44:02 +00:00
parent 559e846d14
commit a67e5ae814

View File

@ -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, щоб створити конфігурацію, або використайте інтерфейс керування
<Steps>
<Step title="Створіть застосунок Fly">
<Step title="Create the Fly app">
```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:
</Step>
<Step title="Налаштуйте fly.toml">
Відредагуйте `fly.toml`, щоб він відповідав назві вашого застосунку та вашим вимогам.
<Step title="Configure 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"` | Зберігає стан на томі |
</Step>
<Step title="Задайте секрети">
<Step title="Set secrets">
```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`, де їх можна випадково розкрити або записати в журнал.
</Step>
<Step title="Розгорніть">
<Step title="Deploy">
```bash
fly deploy
```
Перше розгортання збирає Docker-образ (~23 хвилини). Наступні розгортання швидші.
Перше розгортання збирає Docker-образ (~2-3 хвилини). Наступні розгортання швидші.
Після розгортання перевірте:
@ -146,14 +146,14 @@ x-i18n:
</Step>
<Step title="Створіть файл конфігурації">
Підключіться до машини через SSH, щоб створити правильну конфігурацію:
<Step title="Create config file">
Увійдіть у машину через 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:
</Step>
<Step title="Отримайте доступ до Gateway">
### Control UI
<Step title="Access the Gateway">
### Інтерфейс керування
Відкрийте в браузері:
@ -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:
</Step>
</Steps>
## Усунення проблем
## Усунення несправностей
### "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 <machine-id> --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 <machine-id>
```
Файл блокування розташований за шляхом `/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 <machine-id> --command "node dist/index.js gateway --port 3000 --bind lan" -y
# Або разом зі збільшенням пам’яті
# Or with memory increase
fly machine update <machine-id> --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 <public-ipv4> -a my-openclaw
fly ips release <public-ipv6> -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)