Files
ospab.host/README.md
2025-10-12 07:44:13 +00:00

11 KiB
Raw Blame History

Ospabhost 8.1 - Server Management Platform

Полнофункциональная платформа управления серверами на базе Proxmox VE с поддержкой LXC контейнеров.

Возможности

Управление серверами

  • Создание LXC контейнеров
  • Управление состоянием (запуск, остановка, перезагрузка)
  • Изменение конфигурации (CPU, RAM, диск)
  • Управление снэпшотами (создание, восстановление, удаление)
  • Доступ к консоли через noVNC
  • Смена root-пароля

Мониторинг

  • Real-time статистика серверов через WebSocket
  • Графики использования ресурсов (CPU, RAM, диск, сеть)
  • Автоматические алерты при превышении лимитов (>90%)
  • Email уведомления о проблемах
  • Периодическая проверка состояния (каждые 30 секунд)

Пользовательский интерфейс

  • Панель управления серверами
  • Real-time обновления статуса
  • Интерактивные графики
  • Модальные окна для настроек
  • Управление снэпшотами
  • Встроенная консоль

Технологический стек

Backend

  • TypeScript
  • Express.js
  • Prisma ORM
  • Socket.IO (WebSocket)
  • Nodemailer (Email)
  • Axios (Proxmox API)
  • MySQL/MariaDB

Frontend

  • React 19
  • TypeScript
  • Vite
  • TailwindCSS
  • Socket.IO Client
  • Recharts (графики)
  • React Router DOM

Установка и настройка

Требования

  • Node.js 18+
  • MySQL/MariaDB
  • Proxmox VE 7+ с настроенными API токенами
  • SMTP сервер (опционально, для email уведомлений)

Backend

  1. Перейдите в директорию backend:
cd ospabhost/backend
  1. Установите зависимости:
npm install
  1. Создайте файл .env с конфигурацией:
# Database
DATABASE_URL="mysql://user:password@localhost:3306/ospabhost"

# Proxmox Configuration
PROXMOX_API_URL="https://your-proxmox.example.com:8006/api2/json"
PROXMOX_TOKEN_ID="user@pam!token-id"
PROXMOX_TOKEN_SECRET="your-secret-token"
PROXMOX_NODE="proxmox"
PROXMOX_WEB_URL="https://your-proxmox.example.com:8006"

# Server Configuration
PORT=5000

# JWT Secret
JWT_SECRET="your-jwt-secret-key-change-this"

# SMTP Configuration (optional)
SMTP_HOST="smtp.gmail.com"
SMTP_PORT=587
SMTP_USER="your-email@gmail.com"
SMTP_PASS="your-app-password"
  1. Создайте базу данных и примените миграции:
npx prisma migrate dev
npx prisma db seed
  1. Соберите проект:
npm run build
  1. Запустите сервер:
# Development режим с hot-reload
npm run dev

# Production режим
npm start

Frontend

  1. Перейдите в директорию frontend:
cd ospabhost/frontend
  1. Установите зависимости:
npm install
  1. Запустите dev-сервер:
npm run dev
  1. Или соберите для production:
npm run build
npm run preview

Структура проекта

ospabhost/
├── backend/
│   ├── src/
│   │   ├── modules/
│   │   │   ├── auth/          # Авторизация и аутентификация
│   │   │   ├── server/        # Управление серверами
│   │   │   │   ├── proxmoxApi.ts      # Интеграция с Proxmox
│   │   │   │   ├── server.controller.ts
│   │   │   │   ├── server.routes.ts
│   │   │   │   └── monitoring.service.ts  # WebSocket мониторинг
│   │   │   ├── notification/  # Email уведомления
│   │   │   ├── tariff/        # Тарифные планы
│   │   │   ├── os/            # Операционные системы
│   │   │   ├── ticket/        # Система тикетов
│   │   │   └── check/         # Проверка платежей
│   │   ├── index.ts           # Точка входа, Socket.IO сервер
│   │   └── prisma/
│   │       ├── schema.prisma  # Схема БД
│   │       └── seed.ts        # Начальные данные
│   ├── API_DOCUMENTATION.md   # Документация API
│   └── package.json
└── frontend/
    ├── src/
    │   ├── pages/
    │   │   └── dashboard/
    │   │       └── serverpanel.tsx  # Главная панель управления
    │   ├── hooks/
    │   │   └── useSocket.ts    # WebSocket хуки
    │   ├── components/         # Переиспользуемые компоненты
    │   └── context/            # React контексты
    └── package.json

API Endpoints

Полная документация API доступна в файле API_DOCUMENTATION.md.

Основные эндпоинты:

  • GET /api/server - Список серверов
  • GET /api/server/:id/status - Статус и статистика
  • POST /api/server/create - Создание сервера
  • POST /api/server/:id/start - Запуск
  • POST /api/server/:id/stop - Остановка
  • POST /api/server/:id/restart - Перезагрузка
  • PUT /api/server/:id/resize - Изменение конфигурации
  • POST /api/server/:id/snapshots - Создание снэпшота
  • GET /api/server/:id/snapshots - Список снэпшотов
  • POST /api/server/:id/snapshots/rollback - Восстановление
  • DELETE /api/server/:id/snapshots - Удаление снэпшота

WebSocket Events

Подключение к http://localhost:5000:

import { io } from 'socket.io-client';

const socket = io('http://localhost:5000');

// Подписка на обновления сервера
socket.emit('subscribe-server', serverId);

// Получение статистики
socket.on('server-stats', (data) => {
  console.log('Stats:', data);
});

// Получение алертов
socket.on('server-alerts', (data) => {
  console.log('Alerts:', data);
});

Система мониторинга

Мониторинг работает автоматически после запуска сервера:

  1. Периодическая проверка - каждые 30 секунд проверяет все активные серверы
  2. Обновление БД - сохраняет метрики (CPU, RAM, диск, сеть) в базу данных
  3. WebSocket broadcast - отправляет обновления подключенным клиентам
  4. Алерты - генерирует предупреждения при превышении 90% использования ресурсов
  5. Email уведомления - отправляет письма при критических событиях

Email уведомления

Система отправляет уведомления о:

  • Создании нового сервера
  • Превышении лимитов ресурсов (CPU/RAM/Disk > 90%)
  • Приближении срока оплаты
  • Ответах в тикетах поддержки

Для работы email требуется настройка SMTP в .env.

Безопасность

  • JWT токены для аутентификации
  • Bcrypt для хеширования паролей
  • CORS настроен для локальной разработки
  • Proxmox API токены вместо паролей
  • Автоматическая генерация безопасных паролей

Разработка

Запуск в dev режиме

Backend:

cd ospabhost/backend
npm run dev

Frontend:

cd ospabhost/frontend
npm run dev

Сборка

Backend:

cd ospabhost/backend
npm run build

Frontend:

cd ospabhost/frontend
npm run build

Линтинг

Frontend:

cd ospabhost/frontend
npm run lint

Примеры использования

Создание сервера

const createServer = async () => {
  const response = await fetch('http://localhost:5000/api/server/create', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    body: JSON.stringify({
      osId: 1,
      tariffId: 2
    })
  });
  const server = await response.json();
  console.log('Server created:', server);
};

Создание снэпшота

const createSnapshot = async (serverId) => {
  const response = await fetch(`http://localhost:5000/api/server/${serverId}/snapshots`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    body: JSON.stringify({
      snapname: 'backup-before-update',
      description: 'Before major system update'
    })
  });
  const result = await response.json();
  console.log('Snapshot created:', result);
};

Real-time мониторинг

import { useServerStats } from './hooks/useSocket';

function ServerMonitor({ serverId }) {
  const { stats, alerts, connected } = useServerStats(serverId);
  
  return (
    <div>
      <div>Status: {connected ? 'Connected' : 'Disconnected'}</div>
      <div>CPU: {stats?.data?.cpu * 100}%</div>
      <div>RAM: {stats?.data?.memory?.usage}%</div>
      {alerts.map(alert => (
        <div key={alert.type}>Alert: {alert.message}</div>
      ))}
    </div>
  );
}

Troubleshooting

Backend не подключается к Proxmox

  • Проверьте PROXMOX_API_URL в .env
  • Убедитесь, что API токен действителен
  • Проверьте сетевую доступность Proxmox сервера

WebSocket не подключается

  • Убедитесь, что backend запущен
  • Проверьте CORS настройки в backend/src/index.ts
  • Проверьте firewall rules

Email уведомления не отправляются

  • Проверьте SMTP настройки в .env
  • Для Gmail используйте App Password, не обычный пароль
  • Проверьте логи сервера на ошибки

Лицензия

MIT

Поддержка

Для вопросов и поддержки создайте issue в репозитории или свяжитесь с командой разработки.