From 74aab70a29b02fd09b9fd9eaa5f524520eb12ad2 Mon Sep 17 00:00:00 2001 From: nineap Date: Sat, 11 Jul 2026 03:22:26 +0700 Subject: [PATCH] =?UTF-8?q?Docs:=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B3=D0=BE=20Owner-=D0=B0=D0=BA?= =?UTF-8?q?=D0=BA=D0=B0=D1=83=D0=BD=D1=82=D0=B0=20=D0=B0=D0=B4=D0=BC=D0=B8?= =?UTF-8?q?=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Флаг --create-owner уже существовал, но нигде не было записано, как запускать его на проде (через docker compose run, не bare-бинарник) — пришлось вспоминать вручную. --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index afbcb98..7e54203 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,28 @@ make dev # docker compose: db + redis + app с hot-reload (cargo Приложение поднимется на `http://localhost:8080` (`/health`, `/health/ready`). Остальные команды — `make help`. +## Создание первого Owner-аккаунта админки + +Единственный способ попасть в `/admin/login` (React-админка) — учётка с ролью +`owner`, логин+пароль (не Telegram). Создаётся one-shot CLI-флагом +`--create-owner` (нужен только `DATABASE_URL`, ни ключей, ни токенов; +пароль вводится скрыто в консоли, не через аргумент/env — не оседает в +истории шелла): + +```bash +# Локально/дев (бинарник собран, .env заполнен): +./netrunner-control-plane --create-owner --username admin + +# На проде (задеплоено через docker-compose.prod.yml) — выполнить на самом +# VPS из /root/netrunner-core: +docker compose -f docker-compose.prod.yml run --rm app \ + ./netrunner-control-plane --create-owner --username admin +``` + +`docker compose run` (не `up`) — контейнер разовый, не публикует порт 8080, +не конфликтует с уже работающим `app`. Логин уже занят — упадёт с понятной +ошибкой, а не тихо перезапишет существующего владельца. + ## Nodes, Cyberhack, биллинг — текущее состояние - **`GET /nodes/routing`** отдаёт полный `TunnelConfig`: `tunnel_*`-поля,