# Остановка и удаление

> Как остановить приложение, запустить его снова и удалить вместе с версиями.

Раздел: Приложение
Источник: https://nodbox.ru/docs/apps/lifecycle/

---
Остановленное приложение не отвечает и ничего не стоит, но настройки и история версий остаются: запуск возвращает его на прежнем образе без сборки. Удаление необратимо: приложение, его версии и свои домены исчезают, а базы проекта остаются на месте.

## Остановка выключает приложение и оставляет настройки

Остановить можно работающее, спящее и упавшее приложение. Адрес перестаёт отвечать, пока ты не запустишь приложение снова. Остановка короткая: панель ждёт её на месте и показывает «Приложение остановлено».

В панели:

1. Открой страницу приложения.
2. В шапке нажми меню с тремя точками и выбери «Остановить».

Окна подтверждения нет. В статусе приложения появляется слово «Остановлено», а в [Ленте событий](/docs/observability/events/) запись об остановке.

По API это `POST /api/v1/applications/{id}/stop` с правом токена «деплоить». Ответ - `202` с операцией приложения, у неё `action` равен `stop_application`. Опрашивай `GET /api/v1/operations/{id}`, пока `done` не станет `true`. Ключ `Idempotency-Key` не нужен: повтор ничего не заводит, он упирается в `409`. Если остановка сорвалась, операция называет причину, а приложение остаётся как было. Повтори её.

### Что остаётся после остановки

| Что | Как выглядит после остановки |
| --- | --- |
| Адрес приложения | остаётся за ним и не отвечает, после запуска работает на том же адресе |
| Свои домены | остаются привязанными и заработают после запуска |
| Настройки, переменные и секреты | сохраняются, правка в остановленном приложении доедет с запуском |
| Версии | остаются в истории, прежняя работавшая получает статус «Отработала», трафика у неё нет |
| Логи | читаются, пока не истёк срок хранения: 7 суток |
| Деньги | остановленное приложение стоит ноль |
| Место в лимитах проекта | остаётся занятым |

Лимиты проекта остановка не освобождает: приложение может вернуться в любую секунду, и место под него держится заранее. Освобождает место только удаление. Сколько чего помещается в проект, разобрано в разделе [Лимиты и квоты](/docs/project/limits/).

Платить за приложение перестаёшь при ближайшем расчёте платформы, а расчёты идут раз в пять минут. Как считаются деньги, разобрано в разделе [Тарификация](/docs/project/billing/). Что происходит с приложениями, когда баланс доходит до нуля, описано в разделе [Остановка при нулевом балансе](/docs/project/zero-balance/).

## Запуск берёт образ прежней версии

Запуск заводит новую версию, у которой нет ни получения кода, ни сборки. Она берёт образ последней версии, которая доезжала до запуска, и ветку с коммитом, из которых тот образ собран. Поэтому запуск быстрее обычного деплоя: остаётся запустить приложение и дождаться, пока оно ответит.

Подключение к git-аккаунту для запуска не нужно, а у приложения из архива не нужна новая загрузка. Настройки версия берёт сегодняшние, из приложения: размер, переменные, сон и масштаб. В этом запуск отличается от [отката](/docs/deploy/versions/), который возвращает прежние настройки. Образ последней выкаченной версии платформа не убирает: уборка оставляет три последние версии, которые доезжали до запуска.

В панели «Запустить» стоит в том же меню с тремя точками и появляется, пока у приложения статус «Остановлено». После нажатия приложение становится «Деплоится», а потом «Работает».

По API это `POST /api/v1/applications/{id}/start` с правом токена «деплоить». Заголовок `Idempotency-Key` обязателен: повтор запроса по таймауту тогда не заведёт вторую версию. Ответ - `202` с операцией деплоя, у неё `action` равен `deploy_revision`. Опрашивай её, пока `done` не станет `true`.

### Что нужно для запуска

Запуск - платный заказ, поэтому на него действуют те же проверки, что на деплой:

- на балансе хватает денег на неделю содержания приложения по полной цене его размера, иначе ответ `402`
- проект не заблокирован за долг, иначе тоже `402`
- почта аккаунта подтверждена
- проект принимает деплой, а не удаляется

Квоту проекта запуск не проверяет: остановленное приложение держит свои лимиты и после остановки.

Проект, заблокированный за долг, может останавливать и удалять приложения, но запускать их не может. Остановка и удаление делают проект дешевле, и платформа их не закрывает.

### Если запуск не удался

Версия запуска проходит те же причины отказа, что обычный деплой: контейнер завершился, не хватило памяти, приложение не отвечает на своём порту. Версия получает статус «Ошибка» с причиной, а приложение остаётся без работающей версии. Причины и что с ними делать разобраны в разделах [Версии и откат](/docs/deploy/versions/) и [Типичные сбои и что делать](/docs/help/troubleshooting/).

Пока приложение в статусе «Ошибка», пункта «Запустить» в панели нет, там работает «Задеплоить снова». Он собирает код заново. По API запуск можно повторить, пока работающей версии нет.

### Обычный деплой тоже поднимает остановленное приложение

Остановленному приложению можно заказать обычную версию: «Задеплоить снова» или `POST /api/v1/applications/{id}/revisions`. Платформа соберёт код заново, и приложение снова заработает, уже на новом коде. То же делает push в ветку приложения, если включён [автодеплой](/docs/deploy/auto-deploy/). Если приложение должно остаться остановленным, выключи автодеплой.

## Удаление необратимо

Удаление асинхронное: приложение исчезает после подтверждения платформы, а не в момент нажатия. Удалить можно приложение в любом состоянии, в том числе остановленное и то, чей деплой не удался.

В панели есть два пути: пункт «Удалить приложение» в меню с тремя точками или кнопка «Удалить» с именем приложения в блоке «Дополнительно» на странице. Панель спрашивает «Удалить имя-приложения?» и предупреждает, что приложение и версии удалятся безвозвратно. Кнопки окна - «Оставить» и «Удалить». Когда платформа подтвердила удаление, панель возвращает тебя к списку приложений и показывает «Приложение удалено». Если удаление сорвалось, приложение остаётся на месте, а причина видна в уведомлении.

По API это `DELETE /api/v1/applications/{id}` с правом токена «удалять». Ответ - `202` с операцией приложения, у неё `action` равен `delete_application`. Опрашивай её, пока `done` не станет `true`. Ключ `Idempotency-Key` не нужен. Когда операция закончилась успешно, запрос приложения отвечает `404`. У токена, который выдаёт вход из терминала, право «удалять» по умолчанию выключено, поэтому агент удалить приложение не сможет, пока ты не включишь его: [Токены и права](/docs/automation/tokens/).

### Что происходит с остальным

| Что | Что с ним происходит |
| --- | --- |
| Приложение и его версии | удаляются, вернуть их нельзя |
| Исходники версий | удаляются |
| Переменные и секреты | исчезают вместе с приложением |
| Имя | освобождается, его может занять другое приложение проекта |
| Адрес платформы | перестаёт работать, а у нового приложения с тем же именем адрес будет другим |
| Свои домены | отвязываются, имя домена освобождается для новой привязки |
| Записи в DNS у регистратора | остаются, убрать их можешь только ты |
| Базы проекта | остаются на месте и продолжают стоить |
| Логи и лента событий | через панель и API больше не читаются |
| Лимиты проекта | освобождаются |

Приложение и база независимы. Строка подключения к базе лежала в переменных или секретах приложения, и вместе с ними пропадает, а сама база продолжает работать. Если база больше не нужна, удали её отдельно: [Управляемый PostgreSQL](/docs/databases/postgres/). Разбор отвязки своего домена и записей у регистратора - в разделе [Свой домен](/docs/domains/custom-domain/).

Плата перестаёт списываться с подтверждённого удаления. Минута, в которую приложение исчезло, оплачивается целиком, а плата за последний неполный период списывается позже, обычным расчётом.

## Когда действие отвечает 409

Остановка, запуск и удаление не идут, пока приложение или проект заняты другой работой. Ответ `409` приходит с текстом, который называет причину:

| Причина | Для чего отказ | Что делать |
| --- | --- | --- |
| Идёт деплой любой версии приложения: в очереди, сборка или выкат | остановка, запуск, удаление | дождаться деплоя или [отменить его](/docs/deploy/versions/) |
| Над приложением идёт другая операция: остановка, удаление или откат | остановка, запуск, удаление | дождаться её конца |
| Проект удаляется | остановка и удаление | ничего, проект уходит вместе с приложениями |
| У приложения подключается или отвязывается домен | удаление | дождаться, пока домен закончит |
| Работающей версии нет | остановка | запускать или деплоить, останавливать нечего |
| Приложение уже работает | запуск | ничего, запуск не нужен |
| Приложение ни разу не работало | запуск | задеплоить версию обычным путём |

Запуск в удаляемом проекте отвечает не `409`, а `422`: проект не принимает деплой.

Удаление проекта зеркально ждёт приложения: оно отвечает `409`, пока над любым из его приложений идёт операция или деплой.

Остановка, запуск и удаление доступны владельцу и разработчику проекта. Наблюдатель получает `403`, так же как на заказ версии: [Команда и роли](/docs/project/team/).

## Остановка и сон работают по-разному

Спящее приложение платформа выключает сама, а остановленное выключаешь ты. Оба состояния ничего не стоят и оба держат место в лимитах проекта. Различие в том, что происходит дальше.

| | Сон | Остановка |
| --- | --- | --- |
| Кто включает | платформа, когда запросов нет заданное время | ты, кнопкой или запросом к API |
| Версия | остаётся работающей, статус «Спит» | прежняя версия получает «Отработала», статус «Остановлено» |
| Первый запрос | будит приложение | остаётся без ответа |
| Как вернуть | ничего не нужно, приложение просыпается само | «Запустить» или новый деплой |

Как приложение засыпает и сколько занимает пробуждение, разобрано в разделе [Сон и пробуждение](/docs/apps/sleep/), а все слова статуса - в разделе [Состояния приложения](/docs/observability/states/).

## Что дальше

- [Сон и пробуждение](/docs/apps/sleep/) - автоматическое выключение, которое не требует запуска
- [Состояния приложения](/docs/observability/states/) - что значит «Остановлено», «Спит» и «Упало»
- [Версии и откат](/docs/deploy/versions/) - история версий, отмена деплоя и возврат на прежнюю версию
- [Свой домен](/docs/domains/custom-domain/) - что с записями в DNS, когда приложение остановлено или удалено
- [Тарификация](/docs/project/billing/) - когда платформа списывает деньги за приложение
- [Остановка при нулевом балансе](/docs/project/zero-balance/) - что делает платформа, когда деньги кончились
- [Лимиты и квоты](/docs/project/limits/) - сколько приложений и ресурсов помещается в проект
