Адміністрування
Адміністратори бачать у верхній панелі три додаткові пункти — Користувачі, Метрики та Платформа. У цьому розділі розглянуто кожен із них.
Потрібна роль адміністратора
Усе на цій сторінці потребує ролі admin. Звичайні користувачі цих сторінок не бачать; відповідні маршрути API та інструменти MCP відхиляють їх із повідомленням requires the admin role.
Мова консолі#
Консоль працює англійською та українською. Кожен користувач обирає мову за допомогою перемикача у верхній навігації (також на сторінці входу); вибір зберігається в браузері як dind.lang, а доки вибору не зроблено, мова береться з переважних мов браузера (uk, uk-UA… → українська, усе інше → англійська). Дати, час і числа відповідають обраній мові. Текст, що надходить із сервера, — подробиці помилок, примітки ACME, повідомлення перевірки — показується так, як його отримано, англійською, в обох мовах.
Користувачі#
Сторінка Користувачі показує всі облікові записи зі стовпцями Псевдонім, Електронна пошта, Роль (випадний список) і Статус та двома діями в кожному рядку: Керувати і Видалити. Кнопка + Новий користувач створює обліковий запис.
Створення користувача#
| Поле | Правило |
|---|---|
| Електронна пошта | ім'я для входу; унікальне |
| Псевдонім | 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:
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 разом, пам'ять разом). Вона читає ті самі дані збирача, що й графіки проєктів, — див. Метрики та журнали.
Платформа#
Сторінка Платформа складається з чотирьох блоків.
Стан#
Таблиця компонентів (демони, база даних платформи, 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 МіБ):
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) для доменів і сертифікатів просто зараз, не чекаючи його п'ятихвилинного циклу.
Обмеження ресурсів та ізоляція#
Обмеження діють на трьох рівнях — від грубого до тонкого:
- Типове значення платформи — наведене вище налаштування типових обмежень, що застосовується до контейнерів застосунків і баз даних.
- Для окремого застосунку —
resources:уplatform.yamlперевизначає типове значення для цього застосунку. - Метрики окремих контейнерів показують, хто наближається до ліміту, ще до того, як він почне заважати.
Ізоляція користувачів — це окремий демон на користувача для застосунків; бази даних — окремі контейнери з власними обліковими даними (у спільному чи окремому демоні). Контексти збірки передаються потоком через сокет демона під час кожного розгортання й ніколи не монтуються (bind mount), тож вихідний код ніколи не потрапляє до іншого користувача.

