# NB замысел дизайна приложения

Команды, связанные с `nb app`, по сути, представляют собой адаптации, основанные на различных методах управления процессами, а затем объединенные в набор стабильных входов для управления приложениями. Целью этого является попытка свести умственное использование во время повседневной эксплуатации и обслуживания к набору команд.

В настоящее время методы управления процессами приложений, поддерживаемые CLI, в основном включают:

- Докер
-PM2

Если в будущем нам потребуется поддержка большего количества методов, таких как Supervisor, мы продолжим вносить изменения на этом уровне. Высокочастотный командный вход, открытый для внешнего мира, остался прежним:

```bash
nb app start
nb app restart
nb app logs
nb app upgrade
nb app stop
```

## Зачем нам объединять это в `nb app`

Управление процессами может быть реализовано разными способами, но большинство пользователей действительно заботятся не о том, что используется на нижнем уровне, а о конкретных действиях: «Я хочу запустить приложение», «Я хочу прочитать журнал» и «Я хочу обновить приложение».

Если основные различия очевидны, пользователям необходимо сначала определить, какой режим работы они используют в данный момент, а затем запомнить соответствующий набор методов работы. После объединения в `nb app` эти высокочастотные действия могут объединиться в набор стабильных входов.

### Сократите затраты на обучение

Различные решения по управлению процессами работают по-разному:

- В Docker есть система команд Docker.
- PM2 имеет систему команд PM2
- Supervisor также имеет свой собственный метод настройки.

Если эти различия будут выявлены напрямую, пользователям придется изучить несколько методов использования, и им будет легче пропустить ключевые шаги в часто встречающихся сценариях, таких как обновления, перезагрузки и устранение неполадок с журналами.

После объединения под названием `nb app` для повседневного управления в большинстве случаев требуется освоить только один набор команд.

### Унифицируйте бизнес-процессы

Управление жизненным циклом приложений — это не только управление процессами.

В таких процессах, как запуск, обновление и остановка, CLI часто необходимо обрабатывать дополнительную логику, например:

- Экологическая инспекция
- Обработка конфигурации
- Миграция данных
- Обновление версии
- Управление журналами

Используя `nb app` в качестве единого входа, вы можете гарантировать согласованность поведения этих процессов. Если вы продолжите расширять свои возможности в будущем, вам не нужно будет заново изучать новый вход в эксплуатацию и обслуживание.

## Почему `nb app autostart` все еще нужен?

После создания единого входа в управление процессом необходимо добавить еще один уровень возможности «автозапускаемого управления», чтобы завершить весь процесс. Вот почему существует `nb app autostart`.

Обычное использование:

```bash
# 为当前 env 开启自启动
nb app autostart enable

# 为指定 env 开启自启动
nb app autostart enable --env app1

# 查看自启动状态
nb app autostart list

# 启动所有已开启自启动的 env
nb app autostart run

# 启动时显示底层启动输出
nb app autostart run --verbose
```

Целью этого набора приказов является дальнейшее поддержание единства во внешнем мире. Другими словами, в сознании пользователя на этом уровне `nb app` вам не нужно заботиться о том, является ли нижний уровень Docker, PM2 или другими методами, которые могут поддерживаться в будущем. Внешний унифицированный метод работы по-прежнему аналогичен:

```bash
nb app autostart enable --env app1
nb app autostart disable --env app1
```

### `run` К чему адаптируется этот слой?

`nb app autostart` также разделен на два уровня обязанностей:

- `enable` / `disable` отвечают за управление тем, разрешает ли определенная среда автоматический запуск.
- `run` отвечает за подтягивание всех окружений, у которых включен самозапуск, на этапе запуска системы.

Другими словами, CLI также предоставит унифицированную запись `run` для обеспечения доступа к механизму самозапуска системы:

```bash
nb app autostart run
```

Здесь адаптированы механизмы запуска системы, такие как `systemd`, `launchd`, и сценарии запуска хоста, а не менеджеры процессов приложений, такие как Supervisor.

## Общий

- Команды, связанные с `nb app`, по сути, представляют собой уровень адаптации поверх различных методов управления процессами. Будучи унифицированными снаружи, они могут уменьшить замешательство пользователя.
- Реализация управления процессами может быть Docker, PM2, Supervisor и т.д. На данный момент поддерживаются Docker и PM2.
- Поскольку конфигурации самозапуска для разных методов управления процессами различаются, для завершения всего процесса необходим единый набор возможностей `nb app autostart`.

Если вы хотите продолжать видеть ежедневные операции, вы можете перейти непосредственно к [Управление приложением](../operations/manage-app.md). Если вы готовы развернуть приложение в формальной среде, вы можете продолжить просмотр [Развертывание производственной среды](../production/index.md).
