update README.md

This commit is contained in:
2026-01-05 20:30:26 +03:00
parent 9bbf88a8f7
commit 501e858c06
151 changed files with 1084 additions and 31525 deletions

View File

@@ -1,149 +0,0 @@
# Решение проблемы 501 "Method not implemented"
## Проблема
При смене root-пароля через Proxmox API получали ошибку:
```
AxiosError: Request failed with status code 501
statusMessage: "Method 'POST /nodes/sv1/lxc/105/config' not implemented"
```
## Причина
Proxmox API **не поддерживает POST** для изменения конфигурации контейнера.
Правильный метод - **PUT**.
## Решение
### Было (неправильно):
```typescript
const response = await axios.post(
`${PROXMOX_API_URL}/nodes/${PROXMOX_NODE}/lxc/${vmid}/config`,
`password=${encodeURIComponent(newPassword)}`,
...
);
```
### Стало (правильно):
```typescript
const response = await axios.put(
`${PROXMOX_API_URL}/nodes/${PROXMOX_NODE}/lxc/${vmid}/config`,
`password=${encodeURIComponent(newPassword)}`,
...
);
```
## Правильные HTTP методы для Proxmox API
### LXC Container Config (`/nodes/{node}/lxc/{vmid}/config`)
- `GET` - получить конфигурацию
- `PUT` - **изменить конфигурацию** (в т.ч. пароль)
-`POST` - не поддерживается
### LXC Container Status (`/nodes/{node}/lxc/{vmid}/status/{action}`)
- `POST` - start/stop/restart/shutdown
### LXC Container Create (`/nodes/{node}/lxc`)
- `POST` - создать новый контейнер
## Документация Proxmox VE API
Официальная документация: https://pve.proxmox.com/pve-docs/api-viewer/
Основные правила:
1. **GET** - чтение данных
2. **POST** - создание ресурсов, выполнение действий (start/stop)
3. **PUT** - изменение существующих ресурсов
4. **DELETE** - удаление ресурсов
## Тестирование
### Через curl:
```bash
# Получить конфигурацию (GET)
curl -k -X GET \
-H "Authorization: PVEAPIToken=user@pam!token=secret" \
https://proxmox:8006/api2/json/nodes/nodename/lxc/100/config
# Изменить пароль (PUT)
curl -k -X PUT \
-H "Authorization: PVEAPIToken=user@pam!token=secret" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "password=NewPassword123" \
https://proxmox:8006/api2/json/nodes/nodename/lxc/100/config
```
### Через веб-интерфейс:
1. Откройте панель управления сервером
2. Вкладка "Настройки"
3. Нажмите "Сменить root-пароль"
4. Проверьте логи: `pm2 logs ospab-backend`
## Проверка прав API токена
Убедитесь, что API токен имеет права:
```bash
# В Proxmox WebUI
# Datacenter → Permissions → API Tokens
# Проверьте права токена:
# - VM.Config.* (для изменения конфигурации)
# - VM.PowerMgmt (для start/stop)
```
Или через командную строку:
```bash
pveum user token permissions api-user@pve sv1-api-user
```
## Fallback через SSH
Если API не работает, система автоматически использует SSH:
```bash
ssh root@proxmox "pct set {vmid} --password 'новый_пароль'"
```
Для этого нужно:
1. Настроить SSH ключи:
```bash
ssh-keygen -t rsa -b 4096
ssh-copy-id root@proxmox_ip
```
2. Проверить доступ:
```bash
ssh root@proxmox_ip "pct list"
```
## Деплой исправления
```bash
# На сервере
cd /var/www/ospab-host/backend
git pull
npm run build
pm2 restart ospab-backend
# Проверка логов
pm2 logs ospab-backend --lines 50
```
## Ожидаемые логи при успехе
```
✅ Пароль успешно изменён для контейнера 105
✅ Пароль успешно обновлён для сервера #17 (VMID: 105)
```
## Ожидаемые логи при ошибке
```
❌ Ошибка смены пароля через API: ...
⚠️ Пробуем через SSH...
✅ Пароль изменён через SSH для контейнера 105
```
## Дополнительные ресурсы
- [Proxmox VE API Documentation](https://pve.proxmox.com/pve-docs/api-viewer/)
- [Proxmox VE Administration Guide](https://pve.proxmox.com/pve-docs/pve-admin-guide.html)
- [pct command reference](https://pve.proxmox.com/pve-docs/pct.1.html)

View File

@@ -1,144 +0,0 @@
# Простые команды для создания нагрузки на сервер
# Выполняйте их в консоли вашего LXC контейнера через noVNC или SSH
## 1. БЫСТРЫЙ ТЕСТ (без установки дополнительных пакетов)
### CPU нагрузка (запустить в фоне)
# Создаёт 100% нагрузку на все ядра на 2 минуты
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &
yes > /dev/null &
# Остановить через 2 минуты:
# killall yes
### Memory нагрузка
# Заполнить 500MB оперативки
cat <( </dev/zero head -c 500m) <(sleep 120) | tail &
# Для 1GB используйте:
# cat <( </dev/zero head -c 1000m) <(sleep 120) | tail &
### Disk I/O нагрузка
# Создать файл 1GB и записать его несколько раз
dd if=/dev/zero of=/tmp/testfile bs=1M count=1000 oflag=direct &
# Удалить после теста:
# rm /tmp/testfile
### Network нагрузка
# Скачать большой файл
wget -O /dev/null http://speedtest.tele2.net/100MB.zip &
# Или создать сетевой трафик:
# ping -f 8.8.8.8 -c 10000 &
## 2. С УСТАНОВКОЙ STRESS-NG (рекомендуется)
# Установить stress-ng (один раз)
apt-get update && apt-get install -y stress-ng
### Комплексный тест (5 минут)
# CPU 50%, Memory 50%, Disk I/O
stress-ng --cpu 2 --cpu-load 50 --vm 1 --vm-bytes 512M --hdd 1 --timeout 300s
### Только CPU (80% нагрузка, 3 минуты)
stress-ng --cpu 4 --cpu-load 80 --timeout 180s
### Только Memory (заполнить 70%, 3 минуты)
stress-ng --vm 2 --vm-bytes 70% --timeout 180s
### Только Disk I/O (3 минуты)
stress-ng --hdd 4 --timeout 180s
## 3. PYTHON СКРИПТ (если Python установлен)
# Создать файл test_load.py:
cat > /tmp/test_load.py << 'EOF'
import time
import threading
def cpu_load():
"""CPU нагрузка"""
end_time = time.time() + 180 # 3 минуты
while time.time() < end_time:
[x**2 for x in range(10000)]
def memory_load():
"""Memory нагрузка"""
data = []
for i in range(100):
data.append(' ' * 10000000) # ~10MB каждый
time.sleep(1)
# Запустить в потоках
threads = []
for i in range(4): # 4 потока для CPU
t = threading.Thread(target=cpu_load)
t.start()
threads.append(t)
# Memory нагрузка
m = threading.Thread(target=memory_load)
m.start()
threads.append(m)
# Ждать завершения
for t in threads:
t.join()
print("Test completed!")
EOF
# Запустить:
python3 /tmp/test_load.py &
## 4. МОНИТОРИНГ НАГРУЗКИ
# Установить htop для визуального мониторинга
apt-get install -y htop
# Запустить htop
htop
# Или использовать стандартные команды:
top # CPU и Memory
iostat -x 1 # Disk I/O (нужно установить: apt install sysstat)
free -h # Memory
uptime # Load average
## 5. ОСТАНОВИТЬ ВСЕ ТЕСТЫ
# Остановить все процессы нагрузки
killall stress-ng yes dd wget python3
# Очистить временные файлы
rm -f /tmp/testfile /tmp/test_load.py
## КАК ПРОВЕРИТЬ РЕЗУЛЬТАТЫ
1. Откройте панель управления сервером в браузере
2. Перейдите на вкладку "Мониторинг"
3. Выберите период "1h" или "6h"
4. Вы увидите графики:
- CPU usage (оранжевый график)
- Memory usage (синий график)
- Disk usage (зеленый график)
- Network In/Out (фиолетовый график)
5. Обновите страницу через 1-2 минуты после запуска теста
6. Используйте кнопки периодов (1h, 6h, 24h) для изменения масштаба

View File

@@ -1,168 +0,0 @@
# Тестирование смены root-пароля
## Как это работает
Система использует **3 метода** смены пароля с автоматическим fallback:
### Метод 1: Proxmox API (основной)
```
POST /api/nodes/{node}/lxc/{vmid}/config
Body: password=новый_пароль
```
- Самый быстрый и надёжный
- Работает через API токен
- Не требует SSH доступа
### Метод 2: SSH + pct set (fallback)
```bash
ssh root@proxmox "pct set {vmid} --password 'новый_пароль'"
```
- Запасной вариант если API не работает
- Требует SSH доступа от backend к Proxmox
- Настраивается через `.env`
### Метод 3: Exec внутри контейнера (последний fallback)
```
POST /api/nodes/{node}/lxc/{vmid}/exec
Body: { command: ["bash", "-c", "echo 'root:пароль' | chpasswd"] }
```
- Выполняет команду внутри контейнера
- Работает если контейнер запущен
- Не требует SSH
## Как протестировать
### 1. Через веб-интерфейс
1. Откройте панель управления сервером
2. Перейдите на вкладку "Настройки"
3. Нажмите кнопку "Сменить root-пароль"
4. Подтвердите действие
5. Новый пароль появится на вкладке "Обзор"
### 2. Через API (curl)
```bash
# Получить токен (замените email и password)
TOKEN=$(curl -X POST https://ospab.host:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"yourpassword"}' \
| jq -r '.token')
# Сменить пароль (замените {id} на ID сервера)
curl -X POST https://ospab.host:5000/api/server/{id}/password \
-H "Authorization: Bearer $TOKEN" \
| jq
```
### 3. Проверка нового пароля
#### Через noVNC консоль:
1. Откройте консоль сервера
2. Войдите как `root`
3. Введите новый пароль из панели
#### Через SSH:
```bash
ssh root@IP_СЕРВЕРА
# Введите новый пароль
```
## Логи и отладка
### Backend логи
```bash
# Просмотр логов в реальном времени
pm2 logs ospab-backend
# Или если запущен напрямую
tail -f /var/www/ospab-host/backend/logs/pm2-out.log
```
### Что искать в логах:
**Успешная смена:**
```
✅ Пароль успешно изменён для контейнера 123
✅ Пароль успешно обновлён для сервера #5 (VMID: 123)
```
**Ошибки:**
```
❌ Ошибка смены пароля через API: ...
⚠️ Основной метод не сработал, пробуем через exec...
❌ Ошибка смены пароля через SSH: ...
```
## Возможные проблемы
### Проблема 1: "Не удалось изменить пароль"
**Причина:** Нет доступа к Proxmox API или SSH
**Решение:**
```bash
# Проверьте переменные окружения
cat /var/www/ospab-host/backend/.env | grep PROXMOX
# Должны быть установлены:
PROXMOX_API_URL=https://IP:8006/api2/json
PROXMOX_TOKEN_ID=root@pam!your-token-name
PROXMOX_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
PROXMOX_NODE=proxmox
```
### Проблема 2: SSH метод не работает
**Причина:** Нет SSH ключей или доступа
**Решение:**
```bash
# Настройте SSH ключи (на сервере с backend)
ssh-keygen -t rsa -b 4096
ssh-copy-id root@PROXMOX_IP
# Проверьте доступ
ssh root@PROXMOX_IP "pct list"
```
### Проблема 3: Контейнер не запущен
**Причина:** Exec метод работает только для запущенных контейнеров
**Решение:**
1. Запустите контейнер
2. Подождите 30 секунд
3. Попробуйте снова сменить пароль
## Автоматическое скрытие пароля
Пароль автоматически скрывается через **30 минут** после:
- Создания сервера
- Смены пароля
### Как проверить:
1. Создайте сервер или смените пароль
2. Пароль виден на вкладке "Обзор"
3. Через 30 минут пароль будет заменён на "••••••••"
4. Кнопка "Показать пароль" перестанет работать
### Как показать снова:
Нажмите "Сменить root-пароль" - будет сгенерирован новый пароль и снова виден 30 минут.
## Частые вопросы
**Q: Как часто можно менять пароль?**
A: Без ограничений. Каждая смена генерирует новый случайный пароль.
**Q: Можно ли задать свой пароль?**
A: Нет, система генерирует случайный пароль 16 символов для безопасности.
**Q: Пароль сохраняется в базе?**
A: Да, в зашифрованном виде в таблице `server.rootPassword`.
**Q: Что если я потерял пароль?**
A: Просто нажмите "Сменить root-пароль" - будет сгенерирован новый.
**Q: Работает ли для KVM виртуалок?**
A: Эта реализация для LXC контейнеров. Для KVM нужна доработка.