Перейти к содержанию

Admin Panel (Backend)

FastAPI роутер для админ-панели с аутентификацией.

Установка

uv add viai-kit-admin-panel

Быстрый старт

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from viai_kit.admin.panel import create_admin_router

app = FastAPI(title="Admin Panel")

# CORS для фронтенда
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Создаём роутер с настройками
admin_router = create_admin_router(
    files_root="/var/www",
    secret_key="your-secret-key-here"
)

app.include_router(admin_router, prefix="/api")

Конфигурация

Параметр Тип Описание
files_root str Корневая директория для файлового менеджера
secret_key str Секретный ключ для подписи токенов
token_expire_hours int Время жизни токена (по умолчанию 24)

Эндпоинты

Аутентификация

Метод Путь Описание
POST /auth/login Вход (пароль → токен)
POST /auth/verify Проверка токена

Метрики системы

Метод Путь Описание
GET /metrics Метрики CPU, RAM, диска, сети

Docker

Метод Путь Описание
GET /docker/containers Список контейнеров
POST /docker/containers/{name}/start Запуск
POST /docker/containers/{name}/stop Остановка
POST /docker/containers/{name}/restart Перезапуск
GET /docker/containers/{name}/logs Логи
GET /docker/containers/{name}/stats Статистика
GET /docker/images Список образов

Файлы

Метод Путь Описание
GET /files/list Список файлов
GET /files/read Чтение файла
POST /files/write Запись файла
POST /files/mkdir Создание папки
DELETE /files/delete Удаление
GET /files/download Скачивание
POST /files/upload Загрузка
GET /files/disk Информация о диске

Аутентификация

Панель использует HMAC токены для авторизации:

# Вход
POST /api/auth/login
Content-Type: application/json

{"password": "your-password"}

# Ответ
{
    "token": "1704067200:a1b2c3d4...",
    "expires_in": 86400
}

Все защищённые эндпоинты требуют заголовок:

Authorization: Bearer <token>

Docker Compose

version: '3.8'

services:
  admin:
    image: python:3.11-slim
    command: uvicorn app:app --host 0.0.0.0 --port 8000
    volumes:
      - ./app.py:/app/app.py
      - /var/run/docker.sock:/var/run/docker.sock
      - /host:/host:ro
    environment:
      - ADMIN_SECRET_KEY=your-secret-key
      - FILES_ROOT=/host
    ports:
      - "8000:8000"

Пример с Docker

import os
from fastapi import FastAPI
from viai_kit.admin.panel import create_admin_router

app = FastAPI()

router = create_admin_router(
    files_root=os.environ.get("FILES_ROOT", "/host"),
    secret_key=os.environ["ADMIN_SECRET_KEY"]
)

app.include_router(router, prefix="/api")