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,139 +0,0 @@
# Конфигурация сети и хранилища для Proxmox
## Обзор
Теперь вы можете настроить сетевой интерфейс и диск для контейнеров/VM через переменные окружения в `.env` файле.
## Переменные окружения
### 1. Сетевой мост (Network Bridge)
```env
PROXMOX_NETWORK_BRIDGE=vmbr0
```
**Как узнать доступные мосты:**
1. Войдите в Proxmox веб-интерфейс
2. Перейдите: `Datacenter → Node (sv1) → Network`
3. Посмотрите список доступных мостов (обычно `vmbr0`, `vmbr1`, `vmbr2`)
**Изменение:**
- Просто измените значение в `.env` на нужный мост
- Например: `PROXMOX_NETWORK_BRIDGE=vmbr1`
### 2. Хранилище для дисков (Storage)
```env
PROXMOX_VM_STORAGE=local
PROXMOX_BACKUP_STORAGE=local
PROXMOX_ISO_STORAGE=local
```
**Как узнать доступные хранилища:**
1. Войдите в Proxmox веб-интерфейс
2. Перейдите: `Datacenter → Storage`
3. Посмотрите список доступных хранилищ (обычно `local`, `local-lvm`, `nfs-storage`)
**Изменение:**
- Измените значения в `.env` на нужные хранилища
- Например: `PROXMOX_VM_STORAGE=local-lvm`
## Применение изменений
После изменения `.env` файла:
### На локальной машине (разработка):
```bash
cd backend
npm run build
npm run dev
```
### На production сервере:
```bash
cd /var/www/ospab-host/ospabhost/backend
# 1. Редактируем .env файл
vim .env
# 2. Изменяем нужные переменные
# PROXMOX_NETWORK_BRIDGE=vmbr1 # например, на другой мост
# PROXMOX_VM_STORAGE=local-lvm # например, на другое хранилище
# 3. Пересобираем и перезапускаем
npm run build
pm2 restart ospab-backend
# 4. Проверяем логи
pm2 logs ospab-backend --lines 30
```
## Проверка настроек
После создания нового контейнера проверьте его конфигурацию:
```bash
# SSH на Proxmox сервер
ssh root@sv1.ospab.host
# Посмотреть конфигурацию контейнера (замените 100 на VMID)
pct config 100
# Проверить сетевой интерфейс (должен показать ваш мост)
# net0: name=eth0,bridge=vmbr0,ip=dhcp
# Проверить хранилище (должен показать ваше хранилище)
# rootfs: local:100/vm-100-disk-0.raw,size=20G
```
## Примеры конфигураций
### Конфигурация 1: Стандартная (по умолчанию)
```env
PROXMOX_NETWORK_BRIDGE=vmbr0
PROXMOX_VM_STORAGE=local
```
### Конфигурация 2: Отдельная сеть + LVM хранилище
```env
PROXMOX_NETWORK_BRIDGE=vmbr1
PROXMOX_VM_STORAGE=local-lvm
```
### Конфигурация 3: NFS хранилище
```env
PROXMOX_NETWORK_BRIDGE=vmbr0
PROXMOX_VM_STORAGE=nfs-storage
PROXMOX_BACKUP_STORAGE=nfs-storage
```
## Решение проблем
### Ошибка: "storage 'xxx' does not exist"
- Проверьте, что хранилище существует в Proxmox (Datacenter → Storage)
- Убедитесь, что имя написано правильно (чувствительно к регистру)
### Ошибка: "bridge 'xxx' does not exist"
- Проверьте, что мост существует в Proxmox (Node → Network)
- Убедитесь, что имя написано правильно (обычно `vmbr0`, `vmbr1`)
### Контейнер создаётся, но не имеет сети
- Проверьте, что мост активен и настроен правильно
- Убедитесь, что DHCP работает в вашей сети (или используйте статический IP)
## Логирование
При создании контейнера в логах backend вы увидите:
```
Создание LXC контейнера с параметрами: {
...
net0: 'name=eth0,bridge=vmbr0,ip=dhcp',
rootfs: 'local:20',
...
}
```
Проверьте эти значения, чтобы убедиться, что используются правильные настройки.

View File

@@ -1,132 +0,0 @@
# PM2 Шпаргалка
## 🚀 Основные команды
```bash
# Запуск
pm2 start ecosystem.config.js --env production
# Остановка
pm2 stop ospab-backend
# Перезапуск (без даунтайма)
pm2 reload ospab-backend
# Полный перезапуск
pm2 restart ospab-backend
# Удаление из PM2
pm2 delete ospab-backend
# Список процессов
pm2 list
# Детальная информация
pm2 show ospab-backend
```
## 📊 Мониторинг
```bash
# Логи в реальном времени
pm2 logs ospab-backend
# Последние 100 строк
pm2 logs ospab-backend --lines 100
# Только ошибки
pm2 logs ospab-backend --err
# Очистка логов
pm2 flush
# Интерактивный мониторинг
pm2 monit
```
## 💾 Сохранение и автозапуск
```bash
# Сохранить текущую конфигурацию
pm2 save
# Настроить автозапуск при перезагрузке
pm2 startup
# Отменить автозапуск
pm2 unstartup
# Удалить сохранённую конфигурацию
pm2 kill
```
## 🔧 Управление через npm
```bash
npm run pm2:start # Запуск
npm run pm2:stop # Остановка
npm run pm2:restart # Перезапуск
npm run pm2:logs # Логи
npm run pm2:monit # Мониторинг
npm run pm2:status # Статус
```
## 📦 Обновление PM2
```bash
# Обновить PM2
npm install -g pm2@latest
# Обновить процессы PM2
pm2 update
```
## 🐛 Отладка
```bash
# Показать переменные окружения
pm2 env 0
# Информация о системе
pm2 info ospab-backend
# Метрики
pm2 describe ospab-backend
```
## ⚡ Быстрые сценарии
### Деплой нового кода
```bash
git pull origin main
cd backend
npm install
npm run build
pm2 reload ospab-backend
pm2 save
```
### Полный перезапуск системы
```bash
pm2 kill
pm2 start ecosystem.config.js --env production
pm2 save
pm2 startup # Выполнить команду, которую выведет
```
### Проверка статуса
```bash
pm2 list
pm2 logs ospab-backend --lines 50
curl http://localhost:5000
```
## 🎯 Текущая конфигурация
- **Название**: ospab-backend
- **Экземпляры**: 4
- **Режим**: cluster
- **Порт**: 5000
- **Логи**: ./logs/pm2-error.log, ./logs/pm2-out.log
- **Автоперезапуск**: Да
- **Лимит памяти**: 500 MB/процесс

View File

@@ -1,186 +0,0 @@
# 🚀 Быстрый старт PM2
## Запуск Backend в 4 экземплярах
### Через npm scripts (рекомендуется):
```bash
# 1. Сборка проекта
npm run build
# 2. Запуск PM2
npm run pm2:start
# 3. Проверка статуса
npm run pm2:status
```
### Через скрипты:
```bash
# Дать права на выполнение (только один раз)
chmod +x start-pm2.sh restart-pm2.sh stop-pm2.sh
# Запуск
./start-pm2.sh
# Перезапуск
./restart-pm2.sh
# Перезапуск с пересборкой
./restart-pm2.sh --build
# Перезапуск с обновлением из Git
./restart-pm2.sh --update
# Остановка
./stop-pm2.sh
```
### Через PM2 напрямую:
```bash
# Запуск
pm2 start ecosystem.config.js --env production
# Сохранение конфигурации
pm2 save
# Настройка автозапуска
pm2 startup
# Выполните команду, которую выведет pm2 startup
```
## ⚙️ Настройка автозапуска
Чтобы backend автоматически запускался при перезагрузке сервера:
```bash
# 1. Запустить процесс
npm run pm2:start
# 2. Настроить автозапуск
pm2 startup
# 3. Выполнить команду, которую выведет pm2 startup
# Например:
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u root --hp /root
# 4. Сохранить текущую конфигурацию
pm2 save
```
## 📊 Мониторинг
```bash
# Просмотр логов
npm run pm2:logs
# Интерактивный мониторинг
npm run pm2:monit
# Статус всех процессов
npm run pm2:status
# Детальная информация
pm2 show ospab-backend
```
## 🔄 Обновление кода
```bash
# Вариант 1: Вручную
git pull origin main
npm install
npm run build
npm run pm2:restart
# Вариант 2: Через скрипт
./restart-pm2.sh --update
```
## 🛑 Остановка
```bash
# Через npm
npm run pm2:stop
# Через скрипт
./stop-pm2.sh
# Напрямую
pm2 stop ospab-backend
pm2 delete ospab-backend
pm2 save
```
## 📝 Полезные команды
```bash
# Логи в реальном времени
pm2 logs ospab-backend --lines 100
# Очистка логов
pm2 flush
# Перезапуск без даунтайма
pm2 reload ospab-backend
# Обновление PM2
npm install -g pm2@latest
pm2 update
# Резервная копия конфигурации
pm2 save --force
```
## 🔍 Проверка работы
После запуска проверьте:
```bash
# 1. Статус процессов (должно быть 4 инстанса "online")
pm2 list
# 2. Backend доступен
curl http://localhost:5000
# 3. Логи без ошибок
pm2 logs ospab-backend --lines 50
```
## ⚠️ Устранение проблем
### PM2 не запускается
```bash
# Проверить версию Node.js
node -v
# Переустановить PM2
npm install -g pm2@latest
# Удалить старую конфигурацию
pm2 kill
rm -rf ~/.pm2
# Запустить заново
npm run pm2:start
```
### Процессы крашатся
```bash
# Посмотреть ошибки
pm2 logs ospab-backend --err
# Увеличить лимит памяти в ecosystem.config.js
# max_memory_restart: '1G'
# Уменьшить количество инстансов
# instances: 2
```
## 📚 Подробная документация
См. [PM2_SETUP.md](./PM2_SETUP.md) для детальной информации.

View File

@@ -1,257 +0,0 @@
# Настройка PM2 для Backend
## 📦 Установка PM2 (если ещё не установлен)
```bash
# Глобальная установка PM2
npm install -g pm2
# Проверка версии
pm2 -v
```
## 🚀 Запуск Backend в 4 экземплярах
### Шаг 1: Сборка проекта
```bash
cd /var/www/ospab-host/backend
# или локально:
cd backend
# Установка зависимостей (если нужно)
npm install
# Компиляция TypeScript
npm run build
```
### Шаг 2: Создание папки для логов
```bash
mkdir -p logs
```
### Шаг 3: Запуск с помощью PM2
```bash
# Запуск 4 экземпляров согласно ecosystem.config.js
pm2 start ecosystem.config.js --env production
# Или напрямую (без конфига):
pm2 start dist/src/index.js -i 4 --name ospab-backend
```
### Шаг 4: Сохранение конфигурации для автозапуска
```bash
# Сохранить текущий список процессов
pm2 save
# Настроить автозапуск при перезагрузке сервера
pm2 startup
# Выполните команду, которую выведет pm2 startup
# Обычно это что-то вроде:
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u root --hp /root
```
## 📊 Управление процессами
### Просмотр статуса
```bash
# Список всех процессов
pm2 list
# Детальная информация о процессе
pm2 show ospab-backend
# Мониторинг в реальном времени
pm2 monit
```
### Логи
```bash
# Все логи
pm2 logs
# Логи конкретного процесса
pm2 logs ospab-backend
# Последние 100 строк
pm2 logs ospab-backend --lines 100
# Очистка логов
pm2 flush
```
### Перезапуск
```bash
# Перезапуск без даунтайма (рекомендуется)
pm2 reload ospab-backend
# Полный перезапуск (с кратковременным даунтаймом)
pm2 restart ospab-backend
# Остановка
pm2 stop ospab-backend
# Удаление из PM2
pm2 delete ospab-backend
```
## 🔧 Обновление кода (деплой)
### Вариант 1: Автоматический деплой через PM2
```bash
# Из корня проекта
pm2 deploy ecosystem.config.js production
```
### Вариант 2: Ручной деплой
```bash
cd /var/www/ospab-host
# Обновление кода
git pull origin main
# Переход в backend
cd backend
# Установка зависимостей
npm install
# Сборка
npm run build
# Перезапуск без даунтайма
pm2 reload ospab-backend
# Сохранение конфигурации
pm2 save
```
## 📈 Мониторинг и отладка
### Проверка памяти и CPU
```bash
pm2 monit
```
### Веб-интерфейс (опционально)
```bash
# Установка PM2 Plus (бесплатно для мониторинга)
pm2 link <secret_key> <public_key>
# Или просто веб-дашборд
pm2 web
# Откройте http://localhost:9615
```
## ⚙️ Текущая конфигурация
- **Экземпляры**: 4 процесса в кластерном режиме
- **Порт**: 5000 (балансировка внутри PM2)
- **Автоперезапуск**: Да
- **Лимит памяти**: 500 MB на процесс
- **Логи**: `./logs/pm2-error.log` и `./logs/pm2-out.log`
## 🔍 Проверка автозапуска
После перезагрузки сервера:
```bash
# Проверить, что PM2 запустился
pm2 list
# Должен показать 4 экземпляра ospab-backend в статусе "online"
```
## 🛠️ Устранение проблем
### PM2 не запускается при загрузке
```bash
# Удалить старую конфигурацию
pm2 unstartup
# Создать новую
pm2 startup
# Выполните команду, которую выведет
# Сохранить
pm2 save
```
### Процессы крашатся
```bash
# Проверить логи ошибок
pm2 logs ospab-backend --err
# Увеличить лимит памяти в ecosystem.config.js
# max_memory_restart: '1G'
# Перезапустить
pm2 reload ecosystem.config.js
```
### Высокая нагрузка на CPU
```bash
# Уменьшить количество экземпляров
# В ecosystem.config.js:
instances: 2
# Перезапустить
pm2 reload ecosystem.config.js
```
## 📝 Полезные команды
```bash
# Обновить PM2 до последней версии
npm install -g pm2@latest
pm2 update
# Резервная копия конфигурации PM2
pm2 save --force
# Информация о системе
pm2 info ospab-backend
# Метрики производительности
pm2 describe ospab-backend
```
## 🎯 Быстрый старт (TL;DR)
```bash
# 1. Перейти в папку backend
cd backend
# 2. Собрать проект
npm run build
# 3. Создать папку логов
mkdir -p logs
# 4. Запустить PM2
pm2 start ecosystem.config.js --env production
# 5. Сохранить и настроить автозапуск
pm2 save
pm2 startup
# 6. Проверить статус
pm2 list
```
Готово! Backend запущен в 4 экземплярах и будет автоматически запускаться при перезагрузке сервера. 🚀

View File

@@ -1,65 +0,0 @@
# Решение проблемы Foreign Key при удалении тарифов
## Проблема
При попытке удалить тариф через Prisma Studio появляется ошибка:
```
Foreign key constraint violated on the fields: (`tariffId`)
```
## Причина
Тариф используется серверами. MySQL не позволяет удалить тариф, если на него ссылаются записи в таблице `server`.
## Решение
### Способ 1: Безопасный (рекомендуется)
Удаляет только неиспользуемые тарифы, сохраняет серверы.
```bash
mysql -u root -p ospabhost < backend/prisma/safe_tariff_migration.sql
```
### Способ 2: Полная очистка (только для dev!)
Удаляет ВСЕ серверы и тарифы.
```bash
# Сначала бэкап!
mysqldump -u root -p ospabhost > backup.sql
# Потом очистка
mysql -u root -p ospabhost < backend/prisma/clean_slate_migration.sql
```
### Способ 3: Ручное удаление через SQL
```sql
-- 1. Найти тарифы без серверов
SELECT t.id, t.name, COUNT(s.id) as servers
FROM tariff t
LEFT JOIN server s ON s.tariffId = t.id
GROUP BY t.id
HAVING servers = 0;
-- 2. Удалить только неиспользуемые
DELETE FROM tariff WHERE id IN (
SELECT id FROM (
SELECT t.id FROM tariff t
LEFT JOIN server s ON s.tariffId = t.id
GROUP BY t.id
HAVING COUNT(s.id) = 0
) as unused
);
-- 3. Добавить категорию
ALTER TABLE tariff ADD COLUMN category VARCHAR(50) NOT NULL DEFAULT 'vps';
-- 4. Добавить новые тарифы (см. safe_tariff_migration.sql)
```
## Перезапуск backend
```bash
cd backend
npm start
```
Готово! 🎉

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 нужна доработка.