nodbox
Разделы документации

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

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

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

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

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

В панели:

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

Окна подтверждения нет. В статусе приложения появляется слово «Остановлено», а в Ленте событий запись об остановке.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Приложение и база независимы. Строка подключения к базе лежала в переменных или секретах приложения, и вместе с ними пропадает, а сама база продолжает работать. Если база больше не нужна, удали её отдельно: Управляемый PostgreSQL. Разбор отвязки своего домена и записей у регистратора - в разделе Свой домен.

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

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

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

Причина Для чего отказ Что делать
Идёт деплой любой версии приложения: в очереди, сборка или выкат остановка, запуск, удаление дождаться деплоя или отменить его
Над приложением идёт другая операция: остановка, удаление или откат остановка, запуск, удаление дождаться её конца
Проект удаляется остановка и удаление ничего, проект уходит вместе с приложениями
У приложения подключается или отвязывается домен удаление дождаться, пока домен закончит
Работающей версии нет остановка запускать или деплоить, останавливать нечего
Приложение уже работает запуск ничего, запуск не нужен
Приложение ни разу не работало запуск задеплоить версию обычным путём

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

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

Остановка, запуск и удаление доступны владельцу и разработчику проекта. Наблюдатель получает 403, так же как на заказ версии: Команда и роли.

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

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

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

Как приложение засыпает и сколько занимает пробуждение, разобрано в разделе Сон и пробуждение, а все слова статуса - в разделе Состояния приложения.

Что дальше


Страница в markdown, так её читает агент: /docs/apps/lifecycle.md