DinD HostingПосібник
ENУК
Огляд/Посібник/Керування платформою
РОЗДІЛ 14

Адміністрування

Адміністратори бачать у верхній панелі три додаткові пункти — Користувачі, Метрики та Платформа. У цьому розділі розглянуто кожен із них.

Потрібна роль адміністратора

Усе на цій сторінці потребує ролі admin. Звичайні користувачі цих сторінок не бачать; відповідні маршрути API та інструменти MCP відхиляють їх із повідомленням requires the admin role.

Мова консолі#

Консоль працює англійською та українською. Кожен користувач обирає мову за допомогою перемикача у верхній навігації (також на сторінці входу); вибір зберігається в браузері як dind.lang, а доки вибору не зроблено, мова береться з переважних мов браузера (uk, uk-UA… → українська, усе інше → англійська). Дати, час і числа відповідають обраній мові. Текст, що надходить із сервера, — подробиці помилок, примітки ACME, повідомлення перевірки — показується так, як його отримано, англійською, в обох мовах.

Користувачі#

Сторінка Користувачі показує всі облікові записи зі стовпцями Псевдонім, Електронна пошта, Роль (випадний список) і Статус та двома діями в кожному рядку: Керувати і Видалити. Кнопка + Новий користувач створює обліковий запис.

hosting.example.com/admin/users
Користувачі
Сторінка «Користувачі». (1) створити обліковий запис, (2) змінити роль безпосередньо в таблиці, (3) «Керувати» відкриває демони користувача та скидання пароля, (4) видалити — для рядків адміністраторів вимкнено.

Створення користувача#

Поле Правило
Електронна пошта ім'я для входу; унікальне
Псевдонім 2–15 символів a-z0-9; використовується для імен демона користувача та сайтів; не може збігатися з псевдонімом іншого користувача
Пароль щонайменше 8 символів

Нові облікові записи — звичайні user; роль можна змінити потім у таблиці. Через MCP create_user приймає роль напряму:

create_user(email="mia@example.com", password="…", alias="mia", role="user")   # лише для адміністратора

Створення користувача підготовує все необхідне для його роботи: демон projects-<alias>, IAM-користувача MinIO і бакет <alias>-files. Обліковий запис існує, навіть якщо крок із MinIO згодом завершиться помилкою, тож збій ніколи не залишає напівстворених користувачів.

Керування і видалення#

  • Керувати показує демони користувача — Тип, Назва, IP і Статус — та поле Скидання пароля (мінімум 8 символів).
  • Видалити прибирає користувача, його демони й токени. Видалення відхиляється, поки в користувача є проєкти (409 user has N project(s) — delete them first): спершу видаліть проєкти або передайте їх. Видалити себе не можна, а в рядках адміністраторів кнопка вимкнена. Історія аудиту та запитів зберігається, але посилання на користувача очищується.
  • Найпершого адміністратора, admin@platform.example, створено під час першого запуску; його згенерований пароль виводиться в журнал management і зберігається в data/platform/secrets/panel.admin_password. Інших адміністраторів можна підвищити в таблиці або створити командою python -m app.cli create-admin --email … усередині контейнера management.

Окремий демон баз даних#

Типово бази даних користувача працюють у спільному демоні db. Для користувача, якому потрібне сильніше розділення, адміністратор може ввімкнути окремий демон db-<alias>. У консолі для цього перемикача немає — скористайтеся API або інструментом MCP:

bash
curl -fsS -X PATCH "$BASE/api/v1/users/$UID" -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"own_db_dind": true}'
# MCP: set_user_db_dind(user_id=5, enabled=true)

Вимкнення знищує дані

Знищення окремого демона баз даних користувача очищує його каталог даних. Спершу перенесіть бази даних або створіть їхні дампи.

Метрики#

Сторінка Метрики показує навантаження на всю платформу: усі контейнери з даними (демон, навантаження CPU та пам'ять, останні значення) за обраний діапазон і підсумок за користувачами (демони, CPU разом, пам'ять разом). Вона читає ті самі дані збирача, що й графіки проєктів, — див. Метрики та журнали.

Платформа#

Сторінка Платформа складається з чотирьох блоків.

hosting.example.com/admin/platform
Платформа
Сторінка «Платформа»: стан, налаштування, а нижче — сертифікати й обслуговування.

Стан#

Таблиця компонентів (демони, база даних платформи, MinIO, Traefik, …) зі статусом кожного та platform_id платформи. Ті самі дані повертають GET /api/v1/health та інструмент MCP platform_health (ok або degraded).

Налаштування#

Параметр Призначення Типово
Режим TLS dev — локальний CA; prod — сертифікати ACME dev
Публічні IP балансувальника адреса (адреси) через кому, за якими доступна платформа; перевірка вимагає, щоб запис власного домену дорівнював одній із них. Порожньо — достатньо, щоб домен резолвився порожньо
Зберігати резервні копії, днів видаляти резервні копії, старші за це значення 14
Кількість копій для кожної області зберігати не більше стільки для кожного проєкту чи бази даних 5
Зберігати сирі метрики, днів сирі 15-секундні вибірки 14
Зберігати погодинні метрики, днів погодинні агрегати 90

Зміна параметра Режим TLS перегенеровує всі файли маршрутів.

Типові обмеження контейнерів#

Типове обмеження CPU і пам'яті для контейнерів застосунків і баз даних — це також налаштування платформи: 2 CPU і 4 ГіБ, доки його не змінено. У формі консолі його немає; задайте його через API (null знімає обмеження; мінімум — 0,01 CPU або 64 МіБ):

bash
curl -fsS -X PUT "$BASE/api/v1/admin/settings" -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"default_limits": {"cpus": 2, "mem_bytes": 4294967296}}'

Власні resources: застосунку в platform.yaml мають пріоритет над типовими значеннями.

Сертифікати (ACME)#

У режимі prod сертифікати надходять від CA з ACME, налаштованого тут, — без змінних середовища й ручних перезапусків.

Варіант Примітки
Let's Encrypt (production) типовий; HTTP-01
Let's Encrypt (staging) для репетицій; недовірені сертифікати, щедрі ліміти
ZeroSSL, Google Public CA потребують зовнішнього прив'язування облікового запису (EAB) — ідентифікатора ключа та HMAC-ключа
Власний ACME-сервер будь-який URL каталогу https://, ланцюжок довіри якого публічно визнаний

Ви також задаєте поле Контактна пошта (CA надсилає туди сповіщення про завершення строку дії). Потрібна справжня адреса — заповнювач admin@platform.example відхиляє кожен CA. Облікові дані EAB призначені лише для запису.

Застосування перестворює Traefik

Збереження налаштувань ACME перестворює контейнер Traefik: очікуйте кілька секунд розірваних з'єднань. Зміна CA запускає новий набір сертифікатів — усі домени випускаються повторно, — адже кожен CA/обліковий запис має власне сховище сертифікатів, тож staging і production ніколи не змішуються.

Обслуговування#

Три кнопки запускають обслуговування на вимогу: Очистити резервні копії зараз, Агрегувати й очистити метрики зараз і Запустити перевірку доменів зараз — остання запускає сторожовий процес (watchdog) для доменів і сертифікатів просто зараз, не чекаючи його п'ятихвилинного циклу.

Обмеження ресурсів та ізоляція#

Обмеження діють на трьох рівнях — від грубого до тонкого:

  1. Типове значення платформи — наведене вище налаштування типових обмежень, що застосовується до контейнерів застосунків і баз даних.
  2. Для окремого застосунку — resources: у platform.yaml перевизначає типове значення для цього застосунку.
  3. Метрики окремих контейнерів показують, хто наближається до ліміту, ще до того, як він почне заважати.

Ізоляція користувачів — це окремий демон на користувача для застосунків; бази даних — окремі контейнери з власними обліковими даними (у спільному чи окремому демоні). Контексти збірки передаються потоком через сокет демона під час кожного розгортання й ніколи не монтуються (bind mount), тож вихідний код ніколи не потрапляє до іншого користувача.