DinD HostingПосібник
ENУК
Огляд/Посібник/Збірка й розгортання
РОЗДІЛ 06

Запуск застосунку

Коли розгортання запущено, вкладка «Застосунок» стає вашою панеллю керування — чотири кнопки життєвого циклу, чинні змінні середовища та журнал у реальному часі.

Вкладка «Застосунок»#

hosting.example.com/projects/7
Застосунок
Вкладка «Застосунок». (1) контейнер, його порт, образ і базовий образ, (2) чотири операції життєвого циклу, (3) імена змінних, які отримує застосунок, і джерело кожної, (4) журнал у реальному часі.

Заголовок показує, що саме працює: контейнер (app-<slug>), його порт, зібраний образ і — відтоді, як з'явилися версії середовища виконання, — базовий образ, на якому його зібрано.

Операції життєвого циклу#

Кнопка Що робить Коли використовувати
Запустити запускає зупинений контейнер ви його зупинили або він зупинився через цикл збоїв
Зупинити зупиняє контейнер; маршрут повертає помилку, доки його знову не запустять обслуговування або звільнення ресурсів
Перезапустити перезапускає той самий контейнер процес завис; конфігурацію не змінювали
Перестворити замінює контейнер на основі його поточного образу і перебудовує змінні середовища з усіх джерел; томи зберігаються ви змінили змінну проєкту або підключену базу даних

Перестворення не перебудовує образ і не перечитує platform.yaml з вашого вихідного коду — для нового маніфесту виконайте розгортання. Це єдиний спосіб застосувати зміну змінної без збірки, і він означає кілька секунд простою.

Ті самі операції є як POST /api/v1/projects/{id}/app/{start|stop|restart|recreate} і як MCP-інструменти app_start, app_stop, app_restart та app_recreate.

Контейнери завжди перезапускаються після збою

Контейнер застосунку використовує політику перезапуску unless-stopped: якщо процес завершується, його запускають знову, а після перезавантаження хоста весь стек — разом із вашим застосунком — повертається сам. Якщо ви навмисно зупините застосунок, він залишається зупиненим.

Як підключено застосунок#

Браузерhttps://blog.alex…1DNSA-запис → IP шлюзу2Ingressпроксі / nftables3dind-hosting10.10.10.10 :4434Traefikза Host(…)5Демон dind172.28.0.64:100006Застосунокapp-blog7Відвідувач відкриваєblog.alex.example.comІм'я вказує наадресу вашого ingressВи вирішуєте: пересилати:80/:443 на 10.10.10.10Єдина адреса, видимахосту; нічого не опублікованоЗавершує TLS, обираєфайл маршруту для HostМережа host: застосунок навласній IP демона + портСлухає 0.0.0.0:$PORTусередині цього демона
Запит, що досягає вашого застосунку. Застосунок працює з мережею хоста (host networking) всередині вашого демона, тож слухає безпосередньо на адресі демона.
  • Ваш застосунок має слухати 0.0.0.0:$PORT. PORT передається автоматично; згенерований Dockerfile також його відкриває.
  • Застосунки використовують мережу хоста всередині свого демона: без мапінгу портів і зайвого мережевого переходу. Оскільки в кожного користувача окремий демон, номери портів мають бути унікальними лише всередині вашого демона.
  • TLS завершує платформа. Ваш застосунок працює по звичайному HTTP; не перенаправляйте на HTTPS самостійно на порту $PORT.
  • До інших сервісів звертаються за адресою, яка передається змінними: бази даних — DB_<NAME>_HOST / _PORT, S3 — S3_ENDPOINT.

Ресурси#

Кожен контейнер застосунку обмежений за CPU та пам'яттю:

  1. resources: у platform.yaml має пріоритет, якщо вказано;
  2. інакше діє типове значення платформи — 2 CPU і 4 ГіБ на контейнер зі стандартними налаштуваннями, яке може змінити адміністратор;
  3. адміністратор також може зняти обмеження з будь-якого параметра на всій платформі — тоді контейнер у ньому необмежений.

Фактичне споживання дивіться на вкладці «Метрики».

Постійні дані#

Куди пише застосунок Після розгортання чи перестворення
файлова система контейнера втрачається
шлях із volumes: зберігається (і входить до резервних копій проєкту)
база даних зберігається
ваш бакет S3 зберігається

Журнали#

Картка Журнал у реальному часі має кнопку Стежити за журналом, яка передає потоком stdout і stderr контейнера (server-sent events). Поки застосунок не запущено, кнопка вимкнена.

bash
# останні 200 рядків через REST / MCP (без стеження)
curl -fsS "$BASE/api/v1/projects/$PID/logs?tail=200" -H "Authorization: Bearer $TOKEN"
# MCP: get_logs(project=7, tail=200)    — до 5000 рядків

Пишіть журнал у stdout

Платформа показує те, що ваш процес пише в stdout/stderr. Файли всередині контейнера не збираються — і зникають разом із ним.