bf2d60c1140633e458fda969fc0faa3992f92372
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
- Перейдите в директорию backend:
cd ospabhost/backend
- Установите зависимости:
npm install
- Создайте файл
.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"
- Создайте базу данных и примените миграции:
npx prisma migrate dev
npx prisma db seed
- Соберите проект:
npm run build
- Запустите сервер:
# Development режим с hot-reload
npm run dev
# Production режим
npm start
Frontend
- Перейдите в директорию frontend:
cd ospabhost/frontend
- Установите зависимости:
npm install
- Запустите dev-сервер:
npm run dev
- Или соберите для 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);
});
Система мониторинга
Мониторинг работает автоматически после запуска сервера:
- Периодическая проверка - каждые 30 секунд проверяет все активные серверы
- Обновление БД - сохраняет метрики (CPU, RAM, диск, сеть) в базу данных
- WebSocket broadcast - отправляет обновления подключенным клиентам
- Алерты - генерирует предупреждения при превышении 90% использования ресурсов
- 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 в репозитории или свяжитесь с командой разработки.
Description
Languages
TypeScript
97%
Shell
1.2%
JavaScript
0.7%
HTML
0.5%
CSS
0.5%