Рекомендации по оптимизации и модернизации конфигурации физического сервера
Дата создания: 2026-01-15
Версия: 1.0
Статус: ✅ Рекомендации готовы к применению
Резюме
Данный документ содержит комплексные рекомендации по оптимизации и модернизации физического сервера DENKART на основе анализа текущей конфигурации. Рекомендации разделены по приоритетам и категориям для удобства планирования работ.
Текущее состояние сервера:
- CPU: Intel Xeon E3-1225 V2 @ 3.20GHz, 4 ядра
- RAM: 31 GB (доступно: 23 GB)
- Диски: 233 GB основной (51% использовано), 916 GB /D (55% использовано)
- Внешний диск: /mnt/mypassport отключен и не используется (2026-01-15)
- ОС: Ubuntu 24.04.3 LTS
- LXD: 6.6 (snap)
- Контейнеры:
- BBB-CONT22-1 (production) - ⚠️ без лимитов CPU/RAM
- BBB-CONT22-2 (резерв) - CPU: 4, RAM: 8GB
- docs-denkart - CPU: 1, RAM: 512MB ✅
- 1c-server - CPU: 4, RAM: 8GB
- postgresql-1c - CPU: 4, RAM: 8GB
1. Критические проблемы безопасности (Приоритет: 🔴 Критический)
1.1 Настройка файрвола UFW
Проблема: UFW не активен, все порты открыты.
Решение:
# Установка UFW (если не установлен)
sudo apt install ufw -y
# Базовые правила
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH (критично - настроить ПЕРЕД активацией!)
sudo ufw allow 22/tcp comment 'SSH'
# HTTP/HTTPS
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# BigBlueButton порты
sudo ufw allow 3478/udp comment 'BBB TURN/STUN UDP'
sudo ufw allow 3478/tcp comment 'BBB TURN/STUN TCP'
sudo ufw allow 16384:32768/udp comment 'BBB WebRTC UDP'
sudo ufw allow 16384:32768/tcp comment 'BBB WebRTC TCP'
# Проверка правил перед активацией
sudo ufw show added
# Активация (после проверки!)
sudo ufw enable
# Проверка статуса
sudo ufw status verbose
Важно: Настройте SSH доступ по ключам перед активацией UFW, чтобы не потерять доступ к серверу!
Приоритет: 🔴 Критический - выполнить немедленно
1.2 Установка и настройка fail2ban
Проблема: Отсутствует защита от брутфорс атак.
Решение:
# Установка
sudo apt install fail2ban -y
# Создание локальной конфигурации
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Редактирование конфигурации
sudo nano /etc/fail2ban/jail.local
Рекомендуемые настройки в jail.local:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
destemail = admin@cdto.life
sendername = Fail2Ban-DENKART
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 7200
[nginx-http-auth]
enabled = true
[nginx-limit-req]
enabled = true
Активация:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status
Приоритет: 🔴 Критический
1.3 Оптимизация привилегий контейнеров
Проблема: Контейнеры используют security.privileged=true, что снижает безопасность.
Текущее состояние:
- BBB-CONT22-1: security.privileged=true + security.nesting=true
- BBB-CONT22-2: security.privileged=true + security.nesting=true
Рекомендация: Попытаться перейти на не-привилегированные контейнеры.
План действий:
- Тестирование на BBB-CONT22-2 (testing):
# Отключение privileged режима
lxc config set BBB-CONT22-2 security.privileged=false
lxc config set BBB-CONT22-2 security.idmap.isolated=true
# Оставляем security.nesting=true (обязательно для Docker в BBB)
# Перезапуск и тестирование
lxc restart BBB-CONT22-2
# Проверка работы сервисов
lxc exec BBB-CONT22-2 -- systemctl status bbb-webrtc-sfu
lxc exec BBB-CONT22-2 -- systemctl status coturn
lxc exec BBB-CONT22-2 -- systemctl status postgresql
- Если без privileged режима не работает:
- Оставить
privileged=trueтолько для BBB контейнеров - Усилить другие меры безопасности (UFW, fail2ban, сетевая изоляция)
- Использовать отдельную сеть для BBB контейнеров
Приоритет: 🟠 Высокий
2. Оптимизация производительности (Приоритет: 🟠 Высокий)
2.1 Оптимизация лимитов ресурсов для контейнеров
Текущая проблема: BBB-CONT22-1 имеет недостаточные ресурсы для production нагрузки.
Рекомендации:
Для BBB-CONT22-1 (production) - ⚠️ КРИТИЧНО: нет лимитов!
# ⚠️ ТЕКУЩАЯ ПРОБЛЕМА: Контейнер работает без лимитов CPU/RAM
# Это может привести к исчерпанию ресурсов хоста!
# Установка лимитов CPU (минимум 4 ядра для видеоконференций)
lxc config set BBB-CONT22-1 limits.cpu=4
# Установка лимитов RAM (минимум 8GB)
lxc config set BBB-CONT22-1 limits.memory=8GB
# Отключение swap для лучшей производительности
lxc config set BBB-CONT22-1 limits.memory.swap=false
# Увеличение диска (для записей конференций)
lxc config set BBB-CONT22-1 limits.disk=200GB
# Приоритет CPU
lxc config set BBB-CONT22-1 limits.cpu.priority=5
Для BBB-CONT22-2 (резерв/testing):
lxc config set BBB-CONT22-2 limits.cpu=4
lxc config set BBB-CONT22-2 limits.memory=8GB
lxc config set BBB-CONT22-2 limits.memory.swap=false
lxc config set BBB-CONT22-2 limits.disk=200GB
Для docs-denkart:
# Минимальные ресурсы достаточно
lxc config set docs-denkart limits.cpu=1
lxc config set docs-denkart limits.memory=512MB
lxc config set docs-denkart limits.memory.swap=false
Приоритет: 🟠 Высокий
2.2 Оптимизация ZFS storage pool
Проблема: Storage pool default (ZFS) имеет ошибки данных и используется для production контейнера.
Рекомендации:
- Проверка и исправление ошибок:
# Проверка состояния ZFS pool
sudo zpool status default
# Если есть ошибки, попытка исправления
sudo zpool scrub default
# Проверка после scrub
sudo zpool status default
- Миграция BBB-CONT22-1 на infra-pool (dir):
# Создание snapshot
lxc snapshot BBB-CONT22-1 before-migration-$(date +%Y%m%d)
# Остановка контейнера
lxc stop BBB-CONT22-1
# Копирование контейнера на infra-pool
lxc copy BBB-CONT22-1 BBB-CONT22-1-new --storage infra-pool
# Проверка нового контейнера
lxc start BBB-CONT22-1-new
lxc exec BBB-CONT22-1-new -- systemctl status bbb-webrtc-sfu
# Если все работает, переименование
lxc stop BBB-CONT22-1-new
lxc stop BBB-CONT22-1
lxc rename BBB-CONT22-1 BBB-CONT22-1-old
lxc rename BBB-CONT22-1-new BBB-CONT22-1
lxc start BBB-CONT22-1
Приоритет: 🟠 Высокий
2.3 Оптимизация ядра Linux для производительности
Рекомендации:
- Настройка параметров ядра для BigBlueButton:
# Редактирование sysctl.conf
sudo nano /etc/sysctl.conf
Добавить следующие параметры:
# Оптимизация для WebRTC и видеоконференций
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.core.netdev_max_backlog = 5000
# Оптимизация для LXD контейнеров
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
# Увеличение лимитов файловых дескрипторов
fs.file-max = 2097152
Применение:
sudo sysctl -p
- Настройка лимитов для пользователя:
# Редактирование limits.conf
sudo nano /etc/security/limits.conf
Добавить:
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 32768
* hard nproc 32768
Приоритет: 🟡 Средний
2.4 Оптимизация PostgreSQL в BBB контейнере
Рекомендации:
- Настройка PostgreSQL для BigBlueButton:
# Вход в BBB контейнер
lxc exec BBB-CONT22-1 -- bash
# Редактирование конфигурации PostgreSQL
sudo nano /etc/postgresql/*/main/postgresql.conf
Оптимизированные параметры:
# Память (для контейнера с 8GB RAM)
shared_buffers = 2GB
effective_cache_size = 6GB
maintenance_work_mem = 512MB
work_mem = 64MB
# Производительность
max_connections = 200
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
# Логирование (для отладки)
log_min_duration_statement = 1000
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
Перезапуск PostgreSQL:
sudo systemctl restart postgresql
Приоритет: 🟡 Средний
3. Оптимизация дискового пространства (Приоритет: 🟠 Высокий)
3.1 Внешний диск /mnt/mypassport
Статус: ✅ Диск отключен и не используется (2026-01-15)
Примечание: Внешний диск /mnt/mypassport был отключен и больше не используется в текущей конфигурации сервера. Директория /mnt/mypassport существует, но пуста, так как диск не смонтирован.
Приоритет: ✅ Задача выполнена (диск отключен)
3.2 Оптимизация Timeshift
Текущее состояние: /D/timeshift занимает 151 GB.
Рекомендации:
- Настройка автоматической очистки старых снимков:
# Редактирование конфигурации Timeshift
sudo nano /etc/timeshift/timeshift.json
Оптимизированные настройки:
{
"schedule_monthly": "true",
"schedule_weekly": "true",
"schedule_daily": "false",
"count_monthly": "3",
"count_weekly": "2",
"count_daily": "0"
}
- Ручная очистка старых снимков:
# Просмотр снимков
sudo timeshift --list
# Удаление старых снимков
sudo timeshift --delete --snapshot 'YYYY-MM-DD_HH-MM-SS'
Приоритет: 🟡 Средний
3.3 Оптимизация хранения записей BigBlueButton
Рекомендация: Вынести записи конференций на отдельный том.
Решение:
- Создание директории на хосте:
sudo mkdir -p /D/bbb-recordings
sudo chown 1000:1000 /D/bbb-recordings
- Настройка bind mount в контейнере:
# Остановка контейнера
lxc stop BBB-CONT22-1
# Добавление устройства
lxc config device add BBB-CONT22-1 recordings disk \
source=/D/bbb-recordings \
path=/var/bigbluebutton/published/presentation
# Запуск контейнера
lxc start BBB-CONT22-1
- Настройка автоматической очистки старых записей:
# В контейнере BBB
lxc exec BBB-CONT22-1 -- bash
# Создание скрипта очистки
cat > /usr/local/bin/cleanup-old-recordings.sh << 'EOF'
#!/bin/bash
# Удаление записей старше 90 дней
find /var/bigbluebutton/published/presentation -type d -mtime +90 -exec rm -rf {} + 2>/dev/null
find /var/bigbluebutton/unpublished/presentation -type d -mtime +90 -exec rm -rf {} + 2>/dev/null
echo "$(date): Cleanup completed" >> /var/log/bbb-cleanup.log
EOF
chmod +x /usr/local/bin/cleanup-old-recordings.sh
# Добавление в crontab (еженедельно)
echo "0 2 * * 0 /usr/local/bin/cleanup-old-recordings.sh" | crontab -
Приоритет: 🟡 Средний
4. Мониторинг и алертинг (Приоритет: 🟠 Высокий)
4.1 Настройка Prometheus + Grafana
Рекомендация: Развернуть систему мониторинга в контейнере infra-management.
План действий:
- Запуск контейнера infra-management:
lxc start infra-management
lxc exec infra-management -- bash
- Установка Docker в контейнере:
# Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
- Создание docker-compose.yml для мониторинга:
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus:/etc/prometheus
- prometheus-data:/prometheus
ports:
- "9090:9090"
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
volumes:
- grafana-data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
ports:
- "9100:9100"
restart: unless-stopped
volumes:
prometheus-data:
grafana-data:
- Конфигурация Prometheus (
prometheus/prometheus.yml):
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'lxd-containers'
static_configs:
- targets: ['localhost:9100']
Приоритет: 🟠 Высокий
4.2 Настройка алертов
Рекомендация: Настроить алерты для критических метрик.
Примеры алертов:
- Высокое использование CPU (>80%):
groups:
- name: system_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
annotations:
summary: "High CPU usage detected"
- Недостаток дискового пространства (<10%):
- alert: LowDiskSpace
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
for: 5m
annotations:
summary: "Low disk space on root filesystem"
- Недоступность сервисов:
- alert: ServiceDown
expr: up == 0
for: 1m
annotations:
summary: "Service is down"
Приоритет: 🟡 Средний
4.3 Мониторинг BigBlueButton
Рекомендация: Настроить специфичный мониторинг для BBB.
Метрики для мониторинга:
- Статус сервисов BBB:
# Создание скрипта проверки
cat > /usr/local/bin/check-bbb-services.sh << 'EOF'
#!/bin/bash
BBB_CONTAINER="BBB-CONT22-1"
services=("bbb-webrtc-sfu" "coturn" "postgresql" "redis-server")
for service in "${services[@]}"; do
if lxc exec $BBB_CONTAINER -- systemctl is-active --quiet $service; then
echo "✓ $service - OK"
else
echo "✗ $service - FAILED"
# Отправка алерта
fi
done
EOF
chmod +x /usr/local/bin/check-bbb-services.sh
- Мониторинг активных сессий:
# Скрипт для получения количества активных сессий
lxc exec BBB-CONT22-1 -- bbb-conf --status | grep -i "active"
Приоритет: 🟡 Средний
5. Автоматизация резервного копирования (Приоритет: 🟠 Высокий)
5.1 Настройка автоматического резервного копирования
Текущая проблема: Резервное копирование выполняется только вручную.
Решение:
- Создание systemd service для резервного копирования:
sudo nano /etc/systemd/system/backup-daily.service
Содержимое:
[Unit]
Description=Daily backup service
After=network.target
[Service]
Type=oneshot
ExecStart=/home/cdto/DENKART/scripts/backup-full-server.sh
StandardOutput=journal
StandardError=journal
SyslogIdentifier=backup-daily
[Install]
WantedBy=multi-user.target
- Создание systemd timer:
sudo nano /etc/systemd/system/backup-daily.timer
Содержимое:
[Unit]
Description=Daily backup timer
Requires=backup-daily.service
[Timer]
OnCalendar=daily
OnCalendar=*-*-* 02:00:00
RandomizedDelaySec=1800
Persistent=true
[Install]
WantedBy=timers.target
- Активация:
sudo systemctl daemon-reload
sudo systemctl enable backup-daily.timer
sudo systemctl start backup-daily.timer
sudo systemctl status backup-daily.timer
Приоритет: 🟠 Высокий
5.2 Резервное копирование BigBlueButton
Рекомендация: Настроить отдельное резервное копирование для BBB.
Скрипт резервного копирования BBB:
cat > /home/cdto/DENKART/scripts/backup-bbb.sh << 'EOF'
#!/bin/bash
# Резервное копирование BigBlueButton
set -e
BBB_CONTAINER="BBB-CONT22-1"
BACKUP_DIR="/D/backups/bbb"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
echo "Creating BBB backup: $DATE"
# 1. Snapshot контейнера
echo "Creating container snapshot..."
lxc snapshot "$BBB_CONTAINER" "backup-$DATE"
# 2. PostgreSQL дамп
echo "Creating PostgreSQL dump..."
lxc exec "$BBB_CONTAINER" -- pg_dumpall > "$BACKUP_DIR/postgresql_$DATE.sql"
gzip "$BACKUP_DIR/postgresql_$DATE.sql"
# 3. Резервное копирование записей (если вынесены)
if [ -d "/D/bbb-recordings" ]; then
echo "Backing up recordings..."
tar -czf "$BACKUP_DIR/recordings_$DATE.tar.gz" -C /D bbb-recordings
fi
# 4. Резервное копирование конфигураций
echo "Backing up configurations..."
lxc exec "$BBB_CONTAINER" -- tar -czf /tmp/bbb-config.tar.gz \
/etc/bigbluebutton/bbb-webrtc-sfu/production.yml \
/etc/turnserver.conf \
/etc/nginx/sites-available/bigbluebutton
lxc file pull "$BBB_CONTAINER/tmp/bbb-config.tar.gz" "$BACKUP_DIR/config_$DATE.tar.gz"
# Удаление старых бэкапов (старше 30 дней)
find "$BACKUP_DIR" -type f -mtime +30 -delete
echo "Backup completed: $BACKUP_DIR"
EOF
chmod +x /home/cdto/DENKART/scripts/backup-bbb.sh
Приоритет: 🟠 Высокий
6. Сетевая оптимизация (Приоритет: 🟡 Средний)
6.1 Оптимизация сетевых настроек для BigBlueButton
Рекомендации:
- Проверка и оптимизация TURN сервера:
# В контейнере BBB
lxc exec BBB-CONT22-1 -- bash
# Проверка конфигурации coturn
sudo nano /etc/turnserver.conf
Оптимизированные настройки:
# Внешний IP
external-ip=89.179.242.240
# Relay IP (IP контейнера)
relay-ip=10.218.14.37
# Оптимизация портов
min-port=24577
max-port=32768
# Логирование для отладки
verbose
log-file=/var/log/turnserver/turnserver.log
- Проверка работы TURN:
# Из контейнера
turnutils_stunclient 89.179.242.240:3478
# Извне
turnutils_stunclient school.cdto.life:3478
Приоритет: 🟡 Средний
6.2 Оптимизация Nginx для BigBlueButton
Рекомендации:
- Настройка буферов для WebSocket:
# В конфигурации Nginx BBB
proxy_buffering off;
proxy_read_timeout 86400;
proxy_send_timeout 86400;
- Оптимизация для медиа трафика:
# Увеличение буферов
client_max_body_size 100M;
client_body_buffer_size 128k;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
Приоритет: 🟡 Средний
7. Аппаратные рекомендации (Приоритет: 🟢 Низкий)
7.1 Рекомендации по обновлению железа
Текущие ограничения:
- CPU: 4 ядра (ниже рекомендуемых 8+ для BigBlueButton)
- Диск: 233 GB основной (ниже рекомендуемых 500 GB)
Рекомендации:
- CPU:
- Рассмотреть обновление до 8+ ядер для лучшей производительности BigBlueButton
-
Текущий CPU достаточен для небольших нагрузок (10-15 участников)
-
Диск:
- Основной диск (233 GB) достаточен для системы
- Использовать
/D(916 GB) для данных приложений и записей -
Рассмотреть SSD для лучшей производительности
-
RAM:
- 31 GB достаточно для текущих задач
- При увеличении нагрузки рассмотреть расширение до 64 GB
Приоритет: 🟢 Низкий (текущее железо достаточное для текущих задач)
8. План внедрения (Приоритизированный)
Фаза 1: Критическая безопасность (1-2 дня)
- ✅ Настроить UFW (2 часа)
- ✅ Установить fail2ban (1 час)
- ✅ Настроить SSH безопасность (30 мин)
Итого: ~4 часа
Фаза 2: Критические проблемы (1 день)
- ✅ Внешний диск /mnt/mypassport отключен (2026-01-15)
- ⏳ Оптимизировать лимиты ресурсов для BBB (1 час)
- ⏳ Мигрировать BBB на infra-pool (4 часа)
Итого: ~7 часов
Фаза 3: Автоматизация (1 неделя)
- ✅ Настроить автоматическое резервное копирование (4 часа)
- ✅ Настроить мониторинг Prometheus + Grafana (1 день)
- ✅ Настроить алерты (4 часа)
Итого: ~2 дня
Фаза 4: Оптимизация (2 недели)
- ✅ Оптимизация ядра Linux (2 часа)
- ✅ Оптимизация PostgreSQL (2 часа)
- ✅ Оптимизация сетевых настроек (4 часа)
- ✅ Настройка автоматической очистки записей BBB (2 часа)
- ✅ Тестирование миграции на не-привилегированные контейнеры (1 день)
Итого: ~3 дня
9. Чек-лист внедрения
Безопасность
- [ ] UFW настроен и активен
- [ ] fail2ban установлен и настроен
- [ ] SSH доступ только по ключам
- [ ] Контейнеры используют минимальные привилегии (где возможно)
Производительность
- [ ] ⚠️ КРИТИЧНО: Установлены лимиты CPU/RAM для BBB-CONT22-1 (сейчас unlimited!)
- [ ] Лимиты ресурсов оптимизированы для всех контейнеров
- [ ] BBB мигрирован на infra-pool
- [ ] Параметры ядра оптимизированы
- [ ] PostgreSQL оптимизирован для BBB
Дисковое пространство
- [x] Внешний диск /mnt/mypassport отключен (2026-01-15)
- [ ] Timeshift настроен на автоматическую очистку
- [ ] Записи BBB вынесены на отдельный том
- [ ] Настроена автоматическая очистка старых записей
Мониторинг
- [ ] Prometheus + Grafana развернуты
- [ ] Настроены алерты для критических метрик
- [ ] Настроен мониторинг BBB сервисов
Резервное копирование
- [ ] Автоматическое резервное копирование настроено
- [ ] Резервное копирование BBB настроено
- [ ] Тестирование восстановления выполнено
10. Заключение
Данные рекомендации помогут оптимизировать и модернизировать конфигурацию физического сервера DENKART. Приоритет следует отдавать критическим проблемам безопасности и производительности.
Ключевые моменты:
1. 🔴 Критично: Настроить UFW и fail2ban немедленно (UFW не активен!)
2. 🔴 Критично: Установить лимиты CPU/RAM для BBB-CONT22-1 (сейчас unlimited - может исчерпать ресурсы!)
3. ✅ Выполнено: Внешний диск /mnt/mypassport отключен (2026-01-15)
4. 🟠 Высокий приоритет: Оптимизировать ресурсы для всех контейнеров
5. 🟠 Высокий приоритет: Настроить автоматическое резервное копирование
6. 🟠 Высокий приоритет: Развернуть систему мониторинга
После выполнения критических задач система будет готова к production использованию с необходимым уровнем безопасности, производительности и надежности.
Дата создания: 2026-01-15
Следующий пересмотр: 2026-02-15
Версия: 1.0