Files
ospab.host/README.md
Syralev Georgiy 6af7946a68 Update README.md
2025-10-19 19:19:55 +03:00

370 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ospabhost 8.1 - Server Management Platform
Полнофункциональная платформа управления серверами на базе Proxmox VE с поддержкой LXC контейнеров.
## Бета версия уже доступна:
https://ospab.host
## Возможности
### Управление серверами
- ✅ Создание 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:
```bash
cd ospabhost/backend
```
2. Установите зависимости:
```bash
npm install
```
3. Создайте файл `.env` с конфигурацией:
```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"
```
4. Создайте базу данных и примените миграции:
```bash
npx prisma migrate dev
npx prisma db seed
```
5. Соберите проект:
```bash
npm run build
```
6. Запустите сервер:
```bash
# Development режим с hot-reload
npm run dev
# Production режим
npm start
```
### Frontend
1. Перейдите в директорию frontend:
```bash
cd ospabhost/frontend
```
2. Установите зависимости:
```bash
npm install
```
3. Запустите dev-сервер:
```bash
npm run dev
```
4. Или соберите для production:
```bash
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](backend/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`:
```javascript
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:
```bash
cd ospabhost/backend
npm run dev
```
Frontend:
```bash
cd ospabhost/frontend
npm run dev
```
### Сборка
Backend:
```bash
cd ospabhost/backend
npm run build
```
Frontend:
```bash
cd ospabhost/frontend
npm run build
```
### Линтинг
Frontend:
```bash
cd ospabhost/frontend
npm run lint
```
## Примеры использования
### Создание сервера
```javascript
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);
};
```
### Создание снэпшота
```javascript
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 мониторинг
```javascript
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 в репозитории или свяжитесь с командой разработки.