> ## Documentation Index
> Fetch the complete documentation index at: https://docs.axottle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CLI axottle

> Справочник команд CLI axottle: статус, диагностика, логи, лицензия, сброс пароля администратора.

`axottle` — единый бинарник: он же запускает панель (`axottle serve`), он же служит CLI для управления и диагностики. После установки команда доступна из `PATH` на сервере панели.

Запуск **без аргументов** открывает интерактивный терминальный интерфейс (TUI) — то же самое, что `axottle tui`.

<Info>Для кого: администратор, SRE. Требуемые права: обычные команды — любой пользователь с доступом к API панели; `axottle admin reset-password` — только root, sudo или владелец каталога установки панели.</Info>

## Общие флаги

Большинство команд (status, version, doctor, license) принимают общий набор флагов:

| Флаг              | Что делает                                                                                          |
| ----------------- | --------------------------------------------------------------------------------------------------- |
| `--api <url>`     | Базовый URL API панели (по умолчанию `http://localhost:8080`; можно задать через `AXOTTLE_API_URL`) |
| `--token <токен>` | Bearer-токен для API-вызовов (можно задать через `AXOTTLE_API_TOKEN`)                               |
| `--json`          | Вывод в формате JSON                                                                                |
| `--table`         | Табличный вывод                                                                                     |
| `--plain`         | Простой текстовый вывод                                                                             |
| `--verbose`       | Подробный вывод                                                                                     |
| `--debug`         | Отладочный вывод                                                                                    |
| `--yes`           | Пропустить подтверждения (для опасных команд)                                                       |

Язык вывода: `AXOTTLE_LANG=ru` принудительно включает русский; иначе язык определяется из `LANG`.

## Команды

### `axottle tui`

Интерактивный терминальный интерфейс (запускается и просто командой `axottle` без аргументов). В нём можно проверить состояние панели, открыть Doctor, посмотреть логи, управлять лицензией, сбросить пароль администратора и узнать версию.

В разделе Doctor доступны обычная диагностика, безопасное восстановление служб и сбор support bundle за выбранный период. Результаты прокручиваются стрелками, колесом мыши, `Page Up` / `Page Down`, `Home` / `End`.

### `axottle serve`

Запускает панель: загружает конфигурацию, подключается к PostgreSQL, применяет миграции БД, поднимает API и встроенный веб-интерфейс; корректно завершается по SIGINT/SIGTERM.

<Note>
  В production панель запускается сервисом `axottle.service` — вручную `axottle serve` на боевом сервере запускать не нужно (второй процесс не сможет занять тот же порт). Управляйте панелью через `systemctl`.
</Note>

### `axottle status`

Опрашивает `GET /api/v1/system/status` и печатает состояние панели.

```bash theme={null}
axottle status
```

```text theme={null}
Status:      running
Version:     <версия>
DB:          connected
Setup done:  true
Uptime:      3h12m
```

Завершается с ненулевым кодом, если статус отличается от `running`, — удобно для мониторинговых скриптов.

### `axottle version` (`v`)

Печатает версию сборки CLI и — живым запросом к API — версию работающей панели.

### `axottle doctor`

Проверяет сервер панели и показывает состояние служб, базы данных, диска, сети, DNS, TLS и подключённых компонентов.

```bash theme={null}
axottle doctor
axottle doctor --json
```

Каждая проверка получает статус `OK`, `Warning`, `Failed`, `Skipped` или `Unknown`. Рядом указано, что обнаружено и какое действие рекомендуется. Найденная проблема не обрывает остальные проверки: Doctor старается показать всё, что удалось узнать о сервере. Последний результат сохраняется и доступен из TUI через **View last diagnosis**.

Команду следует запускать на сервере панели. Если база данных недоступна, остальные проверки всё равно выполняются, а состояние базы будет показано как проблема. Для проверки данных из PostgreSQL Doctor использует конфигурацию установленной панели.

<Tip>
  Через TUI (`sudo axottle` → **Doctor**) можно выбрать период журналов, собрать support bundle, просмотреть его состав, сохранить файл локально или отправить в поддержку. Пароли, токены и ключи маскируются перед сохранением. Подробная инструкция — на странице [Обслуживание и Axottle Doctor](/ru/operations/maintenance).
</Tip>

### `axottle logs <component>`

Показывает логи компонента. Компоненты: `backend` (по умолчанию; `frontend` — синоним backend), `worker`, `scheduler`, `nginx`.

| Флаг                     | Что делает                                              |
| ------------------------ | ------------------------------------------------------- |
| `--tail N`, `-n N`       | Последние N строк (по умолчанию 100)                    |
| `--follow`, `-f`         | Следить за логом в реальном времени                     |
| `--since <длительность>` | Логи за период, например `1h`, `30m`                    |
| `--level`                | Пока не поддерживается (команда выведет предупреждение) |

Команда сама подбирает источник в порядке: логи Docker Compose → journald (`journalctl -u axottle…`) → файлы логов в стандартных каталогах.

```bash theme={null}
axottle logs backend --tail 200
axottle logs backend -f
```

### `axottle license status` (`info`)

Печатает секрето-безопасный статус лицензии: состояние, план, срок действия, grace-период, время последней проверки, включённые и заблокированные функции. Ключ лицензии выводится в маскированном виде.

```bash theme={null}
axottle license status
```

```text theme={null}
Status:       active
Plan:         <план>
Valid until:  2026-12-31
Last checked: 2026-07-11 10:00
Features:     ...
```

### `axottle license activate <key>`

Активирует ключ лицензии через `POST /api/v1/license/activate`.

```bash theme={null}
axottle license activate axt_xxxxxxxxxxxxxxxx
```

<Warning>
  Активация нового ключа заменяет текущую лицензию. Откат: активируйте прежний ключ той же командой. Все операции с лицензией записываются в audit-журнал.
</Warning>

### `axottle license refresh`

Принудительно перепроверяет лицензию на сервере лицензий (`POST /api/v1/license/refresh`). При временной недоступности сервера ранее активная лицензия переходит в grace-период (по умолчанию 72 часа, настраивается `AXOTTLE_LICENSE_GRACE_HOURS`); окончательный отрицательный вердикт grace-период не даёт.

### `axottle license remove`

Удаляет лицензию с этой установки (`POST /api/v1/license/remove`).

<Warning>
  **Опасная команда.** После удаления лицензии панель переходит в деградированный режим: все изменяющие API-запросы возвращают `403` («панель только для чтения»), чтение продолжает работать. Поверхности восстановления остаются доступными: активация лицензии, самообновление панели, обновление агентов, аутентификация.

  **Откат:** активируйте лицензию заново — `axottle license activate <key>`. Активация возможна и в деградированном режиме.
</Warning>

### `axottle admin reset-password` (`reset`)

Офлайн-сброс пароля администратора панели — работает напрямую с базой данных, без API и без действующей сессии.

| Флаг                  | Что делает                                                                         |
| --------------------- | ---------------------------------------------------------------------------------- |
| `--password <пароль>` | Установить заданный пароль. Без флага генерируется случайный пароль из 16 символов |
| `--yes`               | Пропустить подтверждение                                                           |

Права: команда выполняется **только с привилегиями на сервере панели** — root, sudo либо владелец каталога установки. Без них команда отказывает.

Поведение: команда показывает список администраторов (при нескольких — интерактивный выбор), запрашивает подтверждение (пропускается флагом `--yes`), сохраняет в базе хеш нового пароля, **записывает событие в audit-журнал** и печатает новый пароль в терминал.

```bash theme={null}
sudo axottle admin reset-password
```

```text theme={null}
Admins:
  1) <username> (admin)
Reset password for <username>? [y/N] y
New password: <сгенерированный-пароль>
```

<Warning>
  **Опасная команда.** Прежний пароль администратора немедленно перестаёт действовать. Пароль печатается в открытом виде — запускайте в защищённом терминале и не оставляйте вывод в истории/логах сессии.

  **Откат:** прямого отката нет — прежний хеш не восстанавливается. Чтобы вернуть контроль или сменить скомпрометированный пароль, выполните команду повторно с `--password <известный-пароль>` либо смените пароль через панель. Факт сброса виден в audit-журнале панели.
</Warning>

### `axottle help` (`-h`, `--help`)

Печатает справку по командам.

## Проверка

<Check>CLI настроен корректно, если `axottle status` показывает `running`, а `axottle doctor` завершает все проверки без статуса `Failed`.</Check>

```bash theme={null}
axottle status && axottle doctor
```

## Откат

Сводка отката для команд, меняющих состояние:

| Команда                  | Что меняет                                               | Как откатить                                                                                   |
| ------------------------ | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `license activate <key>` | Заменяет активную лицензию                               | Активировать прежний ключ                                                                      |
| `license remove`         | Переводит панель в деградированный режим «только чтение» | `axottle license activate <key>` (доступно и в деградированном режиме)                         |
| `admin reset-password`   | Заменяет пароль администратора                           | Повторный запуск с `--password` или смена пароля в панели; прежний пароль не восстанавливается |

Команды `status`, `version`, `doctor`, `logs`, `license status` — только чтение, откат не требуется.

## Типовые ошибки

<AccordionGroup>
  <Accordion title="CLI не может достучаться до API панели">
    По умолчанию CLI ходит на `http://localhost:8080`. Если панель слушает другой адрес или порт — укажите `--api <url>` или экспортируйте `AXOTTLE_API_URL`. Проверьте, что сервис запущен: `systemctl status axottle`.
  </Accordion>

  <Accordion title="doctor или admin reset-password не находят базу данных">
    Эти команды подключаются к PostgreSQL напрямую. Экспортируйте `AXOTTLE_DB_URL` в окружение или создайте `.env` в одном из каталогов: `./.env`, `/opt/axottle/.env`, `/var/lib/axottle/.env`, `~/.axottle/.env`.
  </Accordion>

  <Accordion title="admin reset-password: недостаточно привилегий">
    Команда требует root, sudo или владения каталогом установки панели. Запустите через `sudo axottle admin reset-password`.
  </Accordion>

  <Accordion title="logs: логи компонента не найдены">
    Команда перебирает источники (Docker Compose → journald → файлы). Если ни один не сработал — проверьте, каким способом развёрнут компонент, и посмотрите `journalctl -u axottle` напрямую.
  </Accordion>
</AccordionGroup>

## Связанные страницы

<CardGroup cols={2}>
  <Card title="Конфигурация панели" icon="sliders" href="/ru/reference/configuration">
    Env-файл, рестарт сервиса, порядок изменений.
  </Card>

  <Card title="Лицензия" icon="key" href="/ru/operations/license">
    Активация, grace-период, деградированный режим.
  </Card>

  <Card title="Коды ошибок" icon="circle-exclamation" href="/ru/reference/error-codes">
    HTTP-статусы API и действия оператора.
  </Card>

  <Card title="Обновления панели" icon="wrench" href="/ru/operations/updates">
    Кнопка «Обновить сейчас» и скрипт обновления.
  </Card>
</CardGroup>

<Note>Проверено для версии Axottle текущей ветки. Дата проверки: 2026-07-12.</Note>
