BIG_UPDATE deleted vps, added s3 infrastructure.
This commit is contained in:
149
ospabhost/backend/test-scripts/FIX_501_ERROR.md
Normal file
149
ospabhost/backend/test-scripts/FIX_501_ERROR.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# Решение проблемы 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)
|
||||
144
ospabhost/backend/test-scripts/LOAD_TEST_COMMANDS.md
Normal file
144
ospabhost/backend/test-scripts/LOAD_TEST_COMMANDS.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# Простые команды для создания нагрузки на сервер
|
||||
# Выполняйте их в консоли вашего 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) для изменения масштаба
|
||||
168
ospabhost/backend/test-scripts/PASSWORD_CHANGE_TESTING.md
Normal file
168
ospabhost/backend/test-scripts/PASSWORD_CHANGE_TESTING.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# Тестирование смены 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 нужна доработка.
|
||||
81
ospabhost/backend/test-scripts/stress-test.sh
Normal file
81
ospabhost/backend/test-scripts/stress-test.sh
Normal file
@@ -0,0 +1,81 @@
|
||||
#!/bin/bash
|
||||
# Скрипт для создания тестовой нагрузки на сервер
|
||||
# Используйте этот скрипт внутри LXC контейнера
|
||||
|
||||
echo "🔥 Начинаем тест нагрузки сервера..."
|
||||
|
||||
# Установка stress-ng если не установлен
|
||||
if ! command -v stress-ng &> /dev/null; then
|
||||
echo "Установка stress-ng..."
|
||||
apt-get update && apt-get install -y stress-ng
|
||||
fi
|
||||
|
||||
# Проверяем количество ядер
|
||||
CORES=$(nproc)
|
||||
echo "Доступно CPU ядер: $CORES"
|
||||
|
||||
# Функция для CPU нагрузки (30% нагрузка)
|
||||
cpu_stress() {
|
||||
echo "📊 CPU нагрузка: 30-50%..."
|
||||
stress-ng --cpu $CORES --cpu-load 35 --timeout 300s &
|
||||
}
|
||||
|
||||
# Функция для Memory нагрузки (50% памяти)
|
||||
memory_stress() {
|
||||
echo "💾 Memory нагрузка: 50%..."
|
||||
TOTAL_MEM=$(free -m | awk '/^Mem:/{print $2}')
|
||||
TARGET_MEM=$(($TOTAL_MEM / 2))
|
||||
stress-ng --vm 2 --vm-bytes ${TARGET_MEM}M --timeout 300s &
|
||||
}
|
||||
|
||||
# Функция для Disk I/O нагрузки
|
||||
disk_stress() {
|
||||
echo "💿 Disk I/O нагрузка..."
|
||||
stress-ng --hdd 2 --hdd-bytes 50M --timeout 300s &
|
||||
}
|
||||
|
||||
# Функция для Network нагрузки (ping flood)
|
||||
network_stress() {
|
||||
echo "🌐 Network нагрузка..."
|
||||
# Генерируем сетевой трафик
|
||||
dd if=/dev/zero bs=1M count=100 2>/dev/null | dd of=/dev/null 2>/dev/null &
|
||||
}
|
||||
|
||||
# Выбор режима
|
||||
case "${1:-all}" in
|
||||
cpu)
|
||||
cpu_stress
|
||||
;;
|
||||
memory)
|
||||
memory_stress
|
||||
;;
|
||||
disk)
|
||||
disk_stress
|
||||
;;
|
||||
network)
|
||||
network_stress
|
||||
;;
|
||||
all)
|
||||
echo "🚀 Запуск полной нагрузки на 5 минут..."
|
||||
cpu_stress
|
||||
sleep 2
|
||||
memory_stress
|
||||
sleep 2
|
||||
disk_stress
|
||||
;;
|
||||
*)
|
||||
echo "Использование: $0 [cpu|memory|disk|network|all]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo "✅ Нагрузка запущена! Тест будет длиться 5 минут."
|
||||
echo "📈 Откройте панель мониторинга чтобы увидеть графики."
|
||||
echo ""
|
||||
echo "Для остановки теста используйте: killall stress-ng"
|
||||
|
||||
# Ждём завершения
|
||||
wait
|
||||
echo ""
|
||||
echo "✅ Тест завершён!"
|
||||
Reference in New Issue
Block a user