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

# Запуск ipmideck

> Запустите ipmideck в Windows, Linux или Docker, найдите каталог данных и обработайте ошибки bind, завершение работы и перезапуски.

После того как ipmideck [установлен](/ru/installation), есть два совершенно разных способа его запуска:
**установка на хост**, которую вы запускаете командой `ipmideck`, и **контейнер
Docker**, который запускает веб-сервер напрямую. Они ведут себя по-разному: команда хоста
даёт вам интерактивную консоль оператора, тогда как контейнер просто транслирует обычные
журналы. Эта страница охватывает оба случая.

## Установка на хост: `ipmideck start`

При установке на хост (pip) сервер запускается командой `ipmideck`. Основная
команда, `start`:

<CodeGroup>
  ```powershell PowerShell theme={null}
  ipmideck start
  ```

  ```text cmd theme={null}
  ipmideck start
  ```

  ```bash bash theme={null}
  ipmideck start
  ```
</CodeGroup>

Голый `ipmideck` без подкоманды работает идентично `ipmideck start`:

<CodeGroup>
  ```powershell PowerShell theme={null}
  ipmideck
  ```

  ```text cmd theme={null}
  ipmideck
  ```

  ```bash bash theme={null}
  ipmideck
  ```
</CodeGroup>

По умолчанию сервер привязывается к `0.0.0.0:3000`, поэтому откройте `http://<your-ip>:3000` в
браузере, как только он запущен.

<Note>
  `ipmilink` это обратно совместимый псевдоним той же команды, `ipmilink start`
  ведёт себя в точности как `ipmideck start`. Используйте `ipmideck` для всего нового.
</Note>

В настоящем терминале (TTY) `ipmideck start` открывает интерактивную консоль оператора. Когда
та же команда запускается без терминала, например перенаправленная в файл или под
супервизором процессов, она пропускает консоль и обслуживает с обычными журналами. См.
[режим headless / non-TTY](#режим-headless--non-tty) ниже.

## Docker: контейнер запускает сервер напрямую

Контейнер Docker **не** запускает команду `ipmideck`. Его образ запускает веб-сервер
(uvicorn) напрямую:

```bash theme={null}
docker run --network host ipmideck/ipmideck:latest
```

Поскольку контейнер никогда не вызывает CLI `ipmideck`, ни одна из подкоманд, флагов или
интерактивная консоль не применяются внутри Docker, контейнер всегда транслирует только **обычные
журналы** в stdout, в точности как режим headless на хосте. Контейнер привязывается к
`0.0.0.0:3000`, и `--network host` необходим, чтобы он мог достигать ваших BMC по UDP-порту
`623`. См. [Установку](/ru/installation) для подробностей о сети.

<Note>
  Настройте контейнер с помощью переменных окружения с префиксом `IPMIDECK_` и тома на
  `/data` вместо флагов CLI, см. [Конфигурацию](/ru/configuration). Опубликованный образ
  появится скоро; команда выше это в точности команда, которую вы выполните, как только он станет доступен.
</Note>

## Каталог данных

ipmideck записывает `config.yaml`, базу данных SQLite и ключ шифрования учётных данных в
единый каталог данных. Где он находится, зависит от платформы:

* **Linux / Docker:** `/data`
* **Windows:** `./data` (относительно каталога, из которого вы запускаете `ipmideck`)

Расположение можно переопределить на любой платформе с помощью переменной окружения `IPMIDECK_DATA_DIR`:

<CodeGroup>
  ```powershell PowerShell theme={null}
  $env:IPMIDECK_DATA_DIR = "C:\ipmideck-data"
  ipmideck start
  ```

  ```text cmd theme={null}
  set IPMIDECK_DATA_DIR=C:\ipmideck-data
  ipmideck start
  ```

  ```bash bash theme={null}
  IPMIDECK_DATA_DIR=/srv/ipmideck ipmideck start
  ```
</CodeGroup>

В Docker образ уже устанавливает `IPMIDECK_DATA_DIR=/data`, поэтому сохраните этот путь с помощью
тома, чтобы сохранить конфигурацию и историю при перезапусках контейнера.

## Переопределения через окружение

Каждая переменная окружения с префиксом `IPMIDECK_`, которая переопределяет настройку `config.yaml`,
работает одинаково, запускаете ли вы на хосте или в Docker, см.
[Конфигурацию](/ru/configuration) для полного списка. Две, которые меняют, *как* ipmideck
привязывается:

| Переменная окружения   | Эффект                                  |
| ---------------------- | --------------------------------------- |
| `IPMIDECK_SERVER_HOST` | Хост привязки (по умолчанию `0.0.0.0`). |
| `IPMIDECK_SERVER_PORT` | Порт привязки (по умолчанию `3000`).    |

<Note>
  Переменные окружения имеют приоритет над `config.yaml`. При установке на хост явный
  флаг привязки в командной строке побеждает как переменную окружения, так и файл.
</Note>

## Порт уже используется

Если что-то уже слушает на порту привязки, ipmideck отказывается запускаться, вместо того чтобы
бороться с другим экземпляром за порт. Он печатает это в stderr и завершается со статусом `1`:

```text theme={null}
ERROR: IPMIDeck refused to start — port 3000 is already in use on 0.0.0.0 (another instance may be running).
```

Обычно это означает, что уже запущена вторая копия ipmideck, или что другая служба заняла
порт. Остановите другой процесс или измените порт с помощью `IPMIDECK_SERVER_PORT`
(или `server.port` в `config.yaml`) и запустите снова.

## Адрес недоступен

Другой тип сбоя, когда *хост*, который вы запросили для привязки, не может быть использован, например
адрес, который не существует на этой машине, интерфейс только IPv6 или привилегированный порт,
который вам не разрешено привязывать. ipmideck сообщает об этом отдельно и также завершается со статусом
`1`:

```text theme={null}
ERROR: IPMIDeck cannot bind 0.0.0.0:3000 — address unavailable or not permitted.
```

Проверьте значение `IPMIDECK_SERVER_HOST` (или `server.host`), это должен быть адрес, который
действительно существует на машине, и убедитесь, что порт это тот, который вам разрешено привязывать.

## Корректное завершение работы с Ctrl+C

Нажмите **Ctrl+C** (что отправляет `SIGINT`; `SIGTERM` обрабатывается так же), чтобы остановить
ipmideck. Завершение корректное: веб-сервер выходит из своего цикла, выполняется завершение
lifespan приложения, **управление вентиляторами возвращается вашим BMC**, и процесс
завершается чисто, без трассировки.

<Warning>
  Поскольку завершение возвращает управление вентиляторами BMC, FanPilot перестаёт управлять вашими вентиляторами в
  момент завершения ipmideck. Собственная политика вентиляторов вашего BMC берёт верх, это предусмотренный
  отказоустойчивый механизм. См. [Возможности](/ru/features), чтобы узнать, как ведёт себя цикл вентиляторов.
</Warning>

В Docker контейнер останавливается на `SIGTERM` (что отправляет `docker stop`), поэтому то же
корректное завершение выполняется, когда вы останавливаете контейнер.

## Перезапуск

Как работает перезапуск, зависит от вашей операционной системы:

* **Linux (и другие POSIX-системы):** ipmideck перезапускается **на месте**: он перезапускает
  новый процесс, который перечитывает `config.yaml`, сохраняя тот же управляющий терминал.
* **Windows:** нет повторного запуска на месте. ipmideck чисто завершается и печатает подсказку,
  прося вас снова выполнить команду самостоятельно:

```text theme={null}
IPMIDeck: restart required to apply the new bind.
  Run  ipmideck start  again to restart.
```

В Windows просто запустите `ipmideck start` снова в той же оболочке, новый процесс перечитывает
`config.yaml` и подхватывает новые настройки.

## Режим headless / non-TTY

Когда ipmideck запускается без присоединённого терминала, перенаправленный в файл, переадресованный или под
менеджером процессов, он обнаруживает отсутствие TTY и **пропускает интерактивную консоль**. Он
обслуживает панель нормально и транслирует **обычные журналы** в stdout. Это тот же
вывод, который вы получаете от контейнера Docker, который всегда работает без консоли.

Этот режим не требует ничего особенного: просто запустите ipmideck так, как его вызывает ваш супервизор или
конвейер, и читайте журналы из stdout.

## Следующие шаги

* [Установка](/ru/installation): Docker и pip подробно.
* [Конфигурация](/ru/configuration): `config.yaml`, переопределения через окружение и где находятся данные.
* [Устранение неполадок](/ru/troubleshooting): ошибки подключения и IPMI.
