Update 3 files
- /docs/10-security.md - /docs/11-backup.md - /docs/12-troubleshooting.md
This commit is contained in:
parent
b48dc0f7a0
commit
6733688c69
124
docs/10-security.md
Normal file
124
docs/10-security.md
Normal file
@ -0,0 +1,124 @@
|
||||
# 10. Безопасность
|
||||
|
||||
## Обзор
|
||||
|
||||
В этом разделе собраны текущие проблемы безопасности инфраструктуры и план их устранения. Документ основан на результатах аудита, проведённого в марте 2026 года.
|
||||
|
||||
## Текущее состояние
|
||||
|
||||
| Область | Статус | Комментарий |
|
||||
|---------|--------|-------------|
|
||||
| SSH (парольная аутентификация) | ✅ | Отключена на всех хостах |
|
||||
| SSH (вход root) | 🔴 | Разрешён на всех хостах |
|
||||
| SSH-ключи | 🟡 | Управляются через Ansible, но требуется проверка на наличие лишних ключей |
|
||||
| Samba (шифрование) | 🟡 | На `media` – `desired`, на `games` – `required` |
|
||||
| Samba (протокол) | 🔴 | На `media` используется `NT1` (SMB1), что небезопасно |
|
||||
| UFW / фаервол | 🔴 | Отключён на всех LXC и ВМ |
|
||||
| Хранение паролей в Ansible | 🔴 | Часть паролей в открытом виде в `all.yml` |
|
||||
| Заголовки безопасности в NPM | 🔴 | Отсутствуют для большинства прокси |
|
||||
| Docker-образы | 🟡 | Используется тег `latest`, неконтролируемые обновления |
|
||||
| Обновления систем | 🟡 | Много пакетов требуют обновления (49 на `media`, аналогично на других) |
|
||||
| Мониторинг | 🟢 | Настроен, но нет алертов на логи и некоторые метрики |
|
||||
| Резервное копирование | 🔴 | Не настроено (будет описано в отдельном разделе) |
|
||||
|
||||
## Критические проблемы (🔴)
|
||||
|
||||
### 1. Вход root по SSH
|
||||
- **Описание**: На всех хостах разрешён вход под пользователем `root` через SSH. При компрометации ключа злоумышленник получает полный контроль над системой.
|
||||
- **Решение**: Создать обычного пользователя (например, `ansible`), добавить его в группу `sudo`, настроить ключи и запретить вход root в `/etc/ssh/sshd_config` (`PermitRootLogin no`). Перезапустить SSH.
|
||||
|
||||
### 2. Samba на media использует SMB1
|
||||
- **Описание**: В конфигурации Samba на хосте `media` установлен `server min protocol = NT1`, что соответствует SMB1. Этот протокол уязвим (EternalBlue и другие атаки).
|
||||
- **Решение**: Изменить на `server min protocol = SMB2` (или `SMB3`). После изменения проверить работу клиентов (Windows, Android, Docker). Если Android не поддерживает SMB2/3, использовать VPN для доступа к шарам.
|
||||
|
||||
### 3. Отсутствие фаервола на всех LXC
|
||||
- **Описание**: UFW отключён на всех LXC-контейнерах. Сервисы доступны из всей локальной сети без ограничений.
|
||||
- **Решение**: Включить UFW на каждом хосте, разрешив только необходимые порты:
|
||||
- SSH (только из подсетей 192.168.1.0/24 и 192.168.45.0/24)
|
||||
- Samba (139, 445) – только из локальной и VPN-подсетей
|
||||
- Порты Docker-сервисов (например, 45131, 45132 и т.д.) – если они должны быть доступны только через NPM, то разрешить только для `gateway` или для всей локальной сети
|
||||
- HTTP/HTTPS (80, 443) – если сервис слушает напрямую, а не через NPM
|
||||
|
||||
### 4. Пароли в открытом виде в Ansible
|
||||
- **Описание**: В файле `group_vars/all.yml` присутствуют пароли в открытом виде (например, `grafana_admin_password`, пароли Samba, PostgreSQL и др.).
|
||||
- **Решение**: Немедленно перенести все секреты в `group_vars/vault.yml` и зашифровать с помощью Ansible Vault. Удалить открытые пароли из `all.yml`.
|
||||
|
||||
### 5. Отсутствие заголовков безопасности в NPM
|
||||
- **Описание**: Для большинства проксируемых доменов не настроены заголовки HSTS, X-Content-Type-Options, X-Frame-Options и другие.
|
||||
- **Решение**: Через веб-интерфейс NPM для каждого публичного прокси добавить заголовки (см. раздел [Проксирование и SSL](07-proxy-ssl.md)).
|
||||
|
||||
## Проблемы высокого приоритета (🟠)
|
||||
|
||||
### 1. Использование Docker-образов с тегом `latest`
|
||||
- **Описание**: Образы, такие как `jc21/nginx-proxy-manager:latest`, обновляются неконтролируемо, что может привести к несовместимости или неожиданным изменениям.
|
||||
- **Решение**: Зафиксировать версии образов в `docker-compose.yml` (например, `jc21/nginx-proxy-manager:2.12.3`).
|
||||
|
||||
### 2. Необновлённые системы
|
||||
- **Описание**: На хосте `media` 49 пакетов требуют обновления, включая Docker и системные библиотеки. Аналогичная ситуация на других хостах.
|
||||
- **Решение**: Выполнить `apt update && apt upgrade` на всех хостах. Настроить автоматические обновления безопасности (`unattended-upgrades`).
|
||||
|
||||
### 3. Прокси с Offline статусом
|
||||
- **Описание**: `qb.zailon.ru` недоступен. Возможно, qBittorrent не запущен или не слушает порт 8080.
|
||||
- **Решение**: Проверить контейнер qBittorrent на `torrent`, убедиться, что порт 8080 открыт, и правило прокси в NPM корректно.
|
||||
|
||||
## Проблемы среднего приоритета (🟡)
|
||||
|
||||
### 1. Шифрование Samba на media
|
||||
- **Описание**: Установлено `smb encrypt = desired` вместо `required`. Это снижает безопасность передачи данных.
|
||||
- **Решение**: После включения VPN для доступа к шарам извне изменить на `required`. Если Android-клиенты не поддерживают шифрование, использовать VPN.
|
||||
|
||||
### 2. Управление SSH-ключами
|
||||
- **Описание**: В `all.yml` указаны три публичных ключа. Необходимо убедиться, что на всех хостах нет лишних ключей, а также что ключи актуальны.
|
||||
- **Решение**: Проверить содержимое `~/.ssh/authorized_keys` на каждом хосте, удалить ненужные. Использовать Ansible для централизованного управления ключами.
|
||||
|
||||
### 3. cAdvisor не включён на всех хостах
|
||||
- **Описание**: В плейбуке роль `cadvisor` закомментирована, поэтому метрики Docker-контейнеров собираются не везде.
|
||||
- **Решение**: Если нужен полный мониторинг, раскомментировать роль в `olimp-deploy.yml` и применить её для хостов с Docker.
|
||||
|
||||
### 4. Отсутствие алертов на логи
|
||||
- **Описание**: Настроены только алерты на метрики. Нет алертов на появление в логах ошибок, попыток взлома и т.п.
|
||||
- **Решение**: Настроить правила алертов в Grafana на основе Loki (например, при появлении `error` в логах NPM или SSH).
|
||||
|
||||
## Рекомендации по улучшению (🟢)
|
||||
|
||||
### 1. Включить автоматические обновления безопасности
|
||||
- На всех хостах установить `unattended-upgrades` и настроить его на автоматическую установку обновлений безопасности.
|
||||
|
||||
### 2. Сегментация сети
|
||||
- Выделить VLAN для умных устройств (IoT) и гостевой сети, чтобы ограничить распространение атаки.
|
||||
|
||||
### 3. Мониторинг роутера
|
||||
- Настроить сбор SNMP-метрик с роутера TP-Link (если поддерживается) для мониторинга нагрузки, ошибок и подозрительного трафика.
|
||||
|
||||
### 4. Резервное копирование
|
||||
- Организовать регулярное резервное копирование конфигураций, баз данных и пользовательских данных. Хранить копии в зашифрованном виде вне основной сети.
|
||||
|
||||
### 5. Двухфакторная аутентификация
|
||||
- Для критических сервисов (Grafana, GitLab, Bitwarden) включить 2FA, если это поддерживается.
|
||||
|
||||
### 6. Регулярный аудит
|
||||
- Проводить периодический аудит безопасности (например, раз в 3 месяца) с использованием специализированных инструментов (Lynis, OpenVAS).
|
||||
|
||||
## План действий
|
||||
|
||||
| Задача | Приоритет | Срок |
|
||||
|--------|-----------|------|
|
||||
| Перенести пароли в Ansible Vault | 🔴 | Немедленно |
|
||||
| Запретить вход root по SSH | 🔴 | Немедленно |
|
||||
| Включить UFW на всех хостах | 🔴 | В течение недели |
|
||||
| Обновить Samba (протокол и шифрование) | 🔴 | В течение недели |
|
||||
| Добавить заголовки безопасности в NPM | 🔴 | В течение недели |
|
||||
| Зафиксировать версии Docker-образов | 🟠 | В течение месяца |
|
||||
| Обновить все системы | 🟠 | В течение месяца |
|
||||
| Настроить автоматические обновления | 🟢 | В течение месяца |
|
||||
| Включить cAdvisor | 🟡 | По мере необходимости |
|
||||
| Настроить алерты на логи | 🟡 | По мере необходимости |
|
||||
|
||||
---
|
||||
|
||||
**Связанные разделы:**
|
||||
- [Samba – файловые шары](05-samba.md)
|
||||
- [Проксирование и SSL (NPM)](07-proxy-ssl.md)
|
||||
- [Мониторинг и логирование](08-monitoring.md)
|
||||
- [Управление конфигурацией (Ansible)](09-ansible.md)
|
||||
- [Резервное копирование](11-backup.md)
|
||||
148
docs/11-backup.md
Normal file
148
docs/11-backup.md
Normal file
@ -0,0 +1,148 @@
|
||||
# 11. Резервное копирование
|
||||
|
||||
## Обзор
|
||||
|
||||
Резервное копирование критически важно для защиты данных и возможности восстановления после сбоев, ошибок или атак. На момент аудита (март 2026) централизованная система резервного копирования **не настроена**. В данном разделе описаны требования, предлагаемая стратегия и план внедрения.
|
||||
|
||||
## Текущее состояние
|
||||
|
||||
- **Отсутствие регулярных бэкапов**: Нет автоматизированного процесса резервного копирования конфигураций, баз данных и пользовательских данных.
|
||||
- **Разрозненные данные**: Данные хранятся на разных томах (RAID6, SSD) и в разных форматах (файлы, базы данных, Docker-тома).
|
||||
- **Ручные копии**: Возможно, эпизодически создавались копии вручную, но это не систематизировано.
|
||||
- **Риски**: Потеря данных при сбое RAID (хотя RAID6 защищает от отказа двух дисков, но не от случайного удаления, ошибок программ или вирусов), невозможность отката после неудачного обновления.
|
||||
|
||||
## Цели
|
||||
|
||||
1. **Надёжность**: Гарантированная возможность восстановления данных после любых инцидентов.
|
||||
2. **Автоматизация**: Регулярные бэкапы по расписанию без участия администратора.
|
||||
3. **Целостность**: Проверка создаваемых копий (тестирование восстановления).
|
||||
4. **Безопасность**: Шифрование бэкапов и хранение вне основной инфраструктуры.
|
||||
5. **Минимизация потерь**: RPO (Recovery Point Objective) – не более 24 часов; RTO (Recovery Time Objective) – не более 4 часов для критических сервисов.
|
||||
|
||||
## Что нужно бэкапить
|
||||
|
||||
### 1. Конфигурации
|
||||
- Ansible: репозиторий с `group_vars`, ролями, плейбуками (включая зашифрованный `vault.yml`).
|
||||
- Nginx Proxy Manager: база данных SQLite (контейнер `npm`), сертификаты Let's Encrypt.
|
||||
- Системные конфигурации: `/etc/ssh`, `/etc/network`, `/etc/samba`, `/etc/fstab`, `/etc/cron*`.
|
||||
- Docker: `docker-compose.yml` всех сервисов, пользовательские тома.
|
||||
|
||||
### 2. Базы данных
|
||||
- **PostgreSQL**: Immich, BookStack, Nextcloud (внутри ВМ), GitLab, Grafana, Loki.
|
||||
- **MySQL/MariaDB**: Ampache, Flibusta, Mealie (SQLite, но можно и файл).
|
||||
- **SQLite**: Bitwarden, Mealie, BookStack (опционально), кастомные приложения.
|
||||
- **Redis**: Nextcloud, GitLab.
|
||||
|
||||
### 3. Пользовательские данные
|
||||
- **Медиафайлы**: `/mnt/video/*`, `/mnt/audio/*`, `/mnt/books/*` на хосте `media`.
|
||||
- **Игры**: `/mnt/games/` на хосте `games`.
|
||||
- **Фотографии**: Immich (папка загрузок, библиотека) на `photo`.
|
||||
- **Документы**: BookStack, Nextcloud.
|
||||
- **Торренты**: qBittorrent (метаданные, настройки).
|
||||
|
||||
### 4. Виртуальные машины и LXC
|
||||
- **Proxmox**: конфигурации ВМ (файлы `.conf`), диски LVM-thin, шаблоны.
|
||||
|
||||
## Стратегия резервного копирования
|
||||
|
||||
### Рекомендуемый инструмент: Proxmox Backup Server (PBS)
|
||||
|
||||
- Установить PBS на отдельную ВМ или физический хост (можно на том же сервере, но лучше выделенный).
|
||||
- Настроить хранилище (желательно на отдельном диске или NAS).
|
||||
- Использовать дедупликацию, сжатие, шифрование.
|
||||
- Настроить расписания бэкапов для каждой ВМ/LXC через Proxmox VE (интеграция с PBS).
|
||||
|
||||
### Альтернатива (если PBS не используется)
|
||||
|
||||
- **Для LXC и ВМ**: встроенные средства Proxmox (VZDump) с сохранением на NFS или SMB.
|
||||
- **Для Docker-контейнеров**: скрипты с `docker exec` дампов БД, архивация томов.
|
||||
- **Для файлов**: `rsync` или `restic` в cron.
|
||||
|
||||
## План внедрения
|
||||
|
||||
### Этап 1: Подготовка (1–2 дня)
|
||||
- Определить список всех ресурсов, подлежащих бэкапу (таблица выше).
|
||||
- Оценить объём данных: примерно (медиа ~8 ТБ, игры ~4 ТБ, фото ~200 ГБ, базы ~10 ГБ, конфиги ~1 ГБ).
|
||||
- Выбрать место для хранения бэкапов: внешний HDD (USB) + дополнительно облако (например, Backblaze B2) для критических данных.
|
||||
- Установить и настроить Proxmox Backup Server (можно в LXC на `olimp` или на отдельной машине).
|
||||
|
||||
### Этап 2: Настройка бэкапов ВМ и LXC (2–3 дня)
|
||||
- В Proxmox VE добавить PBS как хранилище.
|
||||
- Создать расписания для каждой ВМ/LXC:
|
||||
- Критические (базы, GitLab, Nextcloud): ежедневно, хранить 7 дней, еженедельно 4 недели, ежемесячно 3 месяца.
|
||||
- Некритические (медиа, игры): еженедельно, хранить 4 недели.
|
||||
- Настроить уведомления об ошибках.
|
||||
|
||||
### Этап 3: Бэкап данных вне Proxmox (2–3 дня)
|
||||
- Написать скрипты (на базе Ansible или shell) для:
|
||||
- Дампов баз данных PostgreSQL, MySQL, SQLite.
|
||||
- Копирования Docker-томов.
|
||||
- Синхронизации файловых данных (медиа, игры) с бэкап-хранилищем (можно через `restic`).
|
||||
- Запускать скрипты по расписанию (cron или systemd timer) до или после бэкапов ВМ.
|
||||
- Проверить, что бэкапы не дублируют данные (например, диски ВМ уже содержат часть файлов – можно исключить их из файлового бэкапа, если они уже входят в VZDump).
|
||||
|
||||
### Этап 4: Тестирование восстановления (1 день)
|
||||
- Выполнить тестовое восстановление ВМ на изолированной среде (или с переименованием).
|
||||
- Проверить восстановление базы данных из дампа.
|
||||
- Восстановить несколько файлов из бэкапа.
|
||||
|
||||
### Этап 5: Автоматизация и мониторинг (1 день)
|
||||
- Настроить алерты в Grafana на статус бэкапов (через API Proxmox или логи).
|
||||
- Добавить проверку успешности бэкапов в мониторинг.
|
||||
|
||||
## Примеры команд
|
||||
|
||||
### Бэкап базы данных PostgreSQL (например, Immich)
|
||||
|
||||
```bash
|
||||
pg_dump -U immich -h localhost immich > /backup/immich_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
### Бэкап SQLite (Bitwarden)
|
||||
|
||||
```bash
|
||||
sqlite3 /path/to/vaultwarden.db ".backup /backup/vaultwarden_$(date +%Y%m%d).db"
|
||||
```
|
||||
|
||||
### Бэкап Docker-томов (например, Jellyfin)
|
||||
|
||||
```bash
|
||||
tar -czf /backup/jellyfin_config_$(date +%Y%m%d).tar.gz /opt/service/jellyfin/config
|
||||
```
|
||||
|
||||
### Синхронизация файлов с внешним хранилищем (restic)
|
||||
|
||||
```bash
|
||||
restic -r /mnt/backup_drive/restic_repo backup /mnt/video /mnt/audio /mnt/books
|
||||
```
|
||||
|
||||
### Восстановление ВМ из бэкапа через PBS
|
||||
|
||||
- В интерфейсе Proxmox: Datacenter → Storage → PBS → Backups → выбрать backup → Restore.
|
||||
|
||||
## Проблемы и рекомендации
|
||||
|
||||
### 🔴 Отсутствие резервных копий
|
||||
**Проблема**: Критическая уязвимость – потеря всех данных при сбое или ошибке.
|
||||
**Решение**: Немедленно начать внедрение системы бэкапов по плану выше. Минимально: запустить ручной бэкап критических данных (базы, конфиги) на внешний диск.
|
||||
|
||||
### 🟡 Большой объём медиа
|
||||
**Проблема**: Медиафайлы (~8 ТБ) сложно бэкапить часто и хранить в нескольких местах.
|
||||
**Решение**:
|
||||
- Для медиа достаточно еженедельного бэкапа.
|
||||
- Использовать дедупликацию (PBS или restic).
|
||||
- Рассмотреть бэкап только метаданных (библиотеки Jellyfin, настройки), а сами файлы можно перекачать заново (но если они уникальны, то бэкапить полностью).
|
||||
|
||||
### 🟢 Шифрование бэкапов
|
||||
**Рекомендация**: Все бэкапы, хранящиеся вне сервера (на внешних дисках, в облаке), шифровать. PBS поддерживает шифрование на стороне клиента.
|
||||
|
||||
### 🟢 Хранение копий вне сети
|
||||
**Рекомендация**: Хранить как минимум одну копию бэкапов вне основной сети (например, внешний USB-диск, отключаемый после бэкапа, или облачное хранилище).
|
||||
|
||||
---
|
||||
|
||||
**Связанные разделы:**
|
||||
- [Гипервизор Proxmox](02-hypervisor.md)
|
||||
- [Виртуальные машины и LXC](03-vms-lxcs.md)
|
||||
- [Управление конфигурацией (Ansible)](09-ansible.md)
|
||||
- [Безопасность](10-security.md)
|
||||
289
docs/12-troubleshooting.md
Normal file
289
docs/12-troubleshooting.md
Normal file
@ -0,0 +1,289 @@
|
||||
# 12. Решение проблем
|
||||
|
||||
В этом разделе собраны типичные проблемы, возникающие при эксплуатации инфраструктуры, и способы их устранения.
|
||||
|
||||
## Содержание
|
||||
|
||||
- [SSH: не удаётся подключиться](#ssh-не-удаётся-подключиться)
|
||||
- [Samba: не монтируются шары](#samba-не-монтируются-шары)
|
||||
- [NPM: сертификат не выпускается](#npm-сертификат-не-выпускается)
|
||||
- [Docker: контейнер не запускается](#docker-контейнер-не-запускается)
|
||||
- [Proxmox: ВМ не стартует](#proxmox-вм-не-стартует)
|
||||
- [Grafana: нет данных](#grafana-нет-данных)
|
||||
- [Immich: не загружаются фото](#immich-не-загружаются-фото)
|
||||
- [Jellyfin: аппаратное ускорение не работает](#jellyfin-аппаратное-ускорение-не-работает)
|
||||
- [Общие проверки](#общие-проверки)
|
||||
|
||||
---
|
||||
|
||||
## SSH: не удаётся подключиться
|
||||
|
||||
### Симптомы
|
||||
- `Connection refused`
|
||||
- `Permission denied (publickey)`
|
||||
- Таймаут подключения
|
||||
|
||||
### Проверка
|
||||
1. Доступен ли хост по сети:
|
||||
```bash
|
||||
ping 192.168.1.201
|
||||
```
|
||||
2. Слушает ли SSH:
|
||||
```bash
|
||||
ssh -v user@192.168.1.201
|
||||
```
|
||||
3. Проверьте файрвол на хосте:
|
||||
```bash
|
||||
ufw status
|
||||
iptables -L -n -v | grep 22
|
||||
```
|
||||
4. Проверьте конфиг SSH на хосте:
|
||||
```bash
|
||||
grep -E '^(PermitRootLogin|PasswordAuthentication|PubkeyAuthentication)' /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
### Решение
|
||||
- Если порт не слушается: `systemctl status sshd`
|
||||
- Если файрвол блокирует: разрешить порт 22 из нужной подсети
|
||||
- Если проблема с ключами: убедиться, что ключ добавлен в `~/.ssh/authorized_keys` и права на файлы корректны (`600` для ключа, `700` для `.ssh`)
|
||||
|
||||
---
|
||||
|
||||
## Samba: не монтируются шары
|
||||
|
||||
### Симптомы
|
||||
- `mount error(13): Permission denied`
|
||||
- `mount error(112): Host is down`
|
||||
- В Windows не видит шару
|
||||
|
||||
### Проверка
|
||||
1. Работает ли Samba на сервере:
|
||||
```bash
|
||||
systemctl status smbd
|
||||
```
|
||||
2. Правильный ли протокол (версия SMB):
|
||||
```bash
|
||||
smbclient -L //192.168.1.203 -U zailon
|
||||
```
|
||||
3. Проверка конфигурации:
|
||||
```bash
|
||||
testparm
|
||||
```
|
||||
|
||||
### Решение
|
||||
- Убедиться, что пользователь существует в Samba:
|
||||
```bash
|
||||
pdbedit -L
|
||||
```
|
||||
- Проверить `hosts allow` в `smb.conf` – должна быть разрешена подсеть клиента
|
||||
- Для Docker-контейнеров (qbittorrent) проверить, что учётные данные в `/etc/smb-creds/qb` корректны и файл имеет права `600`
|
||||
- Если используется шифрование `required`, убедиться, что клиент его поддерживает (для Windows 10/11 включено по умолчанию)
|
||||
|
||||
---
|
||||
|
||||
## NPM: сертификат не выпускается
|
||||
|
||||
### Симптомы
|
||||
- В интерфейсе NPM сертификат в статусе `Error`
|
||||
- Ошибка `Failed to issue certificate` в логах
|
||||
|
||||
### Проверка
|
||||
1. Доступен ли домен из интернета:
|
||||
```bash
|
||||
dig ab.zailon.ru
|
||||
```
|
||||
2. Открыт ли порт 443 на роутере
|
||||
3. Логи NPM:
|
||||
```bash
|
||||
docker logs npm 2>&1 | grep -i error
|
||||
```
|
||||
|
||||
### Решение
|
||||
- Убедиться, что DNS-запись `A` для домена указывает на внешний IP `188.73.191.202`
|
||||
- Убедиться, что порт 443 на роутере проброшен на `192.168.1.201:443`
|
||||
- Если используется Let's Encrypt, проверить, что не превышен лимит запросов
|
||||
- Для внутренних доменов (без публичного доступа) использовать самоподписанные сертификаты или DNS-челлендж
|
||||
|
||||
---
|
||||
|
||||
## Docker: контейнер не запускается
|
||||
|
||||
### Симптомы
|
||||
- `docker start` выдаёт ошибку
|
||||
- Контейнер падает сразу после запуска
|
||||
- В логах ошибки
|
||||
|
||||
### Проверка
|
||||
1. Посмотреть логи контейнера:
|
||||
```bash
|
||||
docker logs <container_name>
|
||||
```
|
||||
2. Проверить, нет ли конфликта портов:
|
||||
```bash
|
||||
docker ps -a
|
||||
ss -tulnwp | grep <port>
|
||||
```
|
||||
3. Проверить права на монтированные тома:
|
||||
```bash
|
||||
ls -la /path/to/mount
|
||||
```
|
||||
|
||||
### Решение
|
||||
- Исправить ошибки в конфигурации (обычно они видны в логах)
|
||||
- Освободить занятый порт или изменить маппинг портов в `docker-compose.yml`
|
||||
- Убедиться, что пользователь внутри контейнера имеет доступ к смонтированным папкам (UID/GID)
|
||||
|
||||
---
|
||||
|
||||
## Proxmox: ВМ не стартует
|
||||
|
||||
### Симптомы
|
||||
- Ошибка `TASK ERROR: unable to open file '/etc/pve/nodes/olimp/qemu-server/205.conf'`
|
||||
- Ошибка `kvm: no such device`
|
||||
- ВМ зависает на старте
|
||||
|
||||
### Проверка
|
||||
1. Статус служб Proxmox:
|
||||
```bash
|
||||
systemctl status pve-cluster pvedaemon qemu-server
|
||||
```
|
||||
2. Проверить наличие свободного места на хранилище:
|
||||
```bash
|
||||
pvesm status
|
||||
```
|
||||
3. Посмотреть логи:
|
||||
```bash
|
||||
journalctl -u pvedaemon -f
|
||||
```
|
||||
|
||||
### Решение
|
||||
- Если проблема с конфигурационным файлом – восстановить из бэкапа (см. раздел 11)
|
||||
- Если не хватает памяти – остановить другие ВМ или увеличить ресурсы
|
||||
- Если ошибка KVM – убедиться, что виртуализация включена в BIOS и модули загружены:
|
||||
```bash
|
||||
lsmod | grep kvm
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Grafana: нет данных
|
||||
|
||||
### Симптомы
|
||||
- Дашборды не отображают метрики
|
||||
- Ошибка `No data` или `Data source not found`
|
||||
|
||||
### Проверка
|
||||
1. Доступен ли источник данных (VictoriaMetrics, Loki):
|
||||
```bash
|
||||
curl http://192.168.1.208:8428/api/v1/query?query=up
|
||||
curl http://192.168.1.208:3100/loki/api/v1/query_range?query={job="node_exporter"}
|
||||
```
|
||||
2. Работает ли Promtail на хостах:
|
||||
```bash
|
||||
systemctl status promtail
|
||||
```
|
||||
3. Проверить конфигурацию источников данных в Grafana (Settings → Data Sources)
|
||||
|
||||
### Решение
|
||||
- Перезапустить VictoriaMetrics, Loki, Promtail
|
||||
- Проверить сетевые доступы между `manage` и другими хостами (порты 8428, 3100, 9080)
|
||||
- Убедиться, что файлы конфигурации Promtail корректны (пути к логам, метки)
|
||||
|
||||
---
|
||||
|
||||
## Immich: не загружаются фото
|
||||
|
||||
### Симптомы
|
||||
- Ошибка загрузки в веб-интерфейсе или приложении
|
||||
- Файлы не появляются в библиотеке
|
||||
|
||||
### Проверка
|
||||
1. Статус контейнеров Immich:
|
||||
```bash
|
||||
docker ps | grep immich
|
||||
```
|
||||
2. Логи сервера:
|
||||
```bash
|
||||
docker logs immich_server | tail -50
|
||||
```
|
||||
3. Доступность хранилища:
|
||||
```bash
|
||||
df -h /mnt/immich
|
||||
```
|
||||
|
||||
### Решение
|
||||
- Проверить права на папку загрузок: должны быть доступны пользователю внутри контейнера (обычно 1000:1000)
|
||||
- Убедиться, что база данных PostgreSQL работает и доступна
|
||||
- Проверить конфигурацию обратного прокси (NPM) – не обрезает ли большие файлы (должно быть `client_max_body_size 2000m`)
|
||||
|
||||
---
|
||||
|
||||
## Jellyfin: аппаратное ускорение не работает
|
||||
|
||||
### Симптомы
|
||||
- Высокая загрузка CPU при воспроизведении
|
||||
- В логах ошибки `Failed to open VAAPI device`
|
||||
|
||||
### Проверка
|
||||
1. Наличие устройства `/dev/dri` в контейнере:
|
||||
```bash
|
||||
docker exec jellyfin ls -la /dev/dri
|
||||
```
|
||||
2. Установлены ли драйверы на хосте:
|
||||
```bash
|
||||
apt list --installed | grep -E 'intel-media-va-driver|mesa-va-drivers'
|
||||
```
|
||||
|
||||
### Решение
|
||||
- Добавить в `docker-compose.yml`:
|
||||
```yaml
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
||||
```
|
||||
- Установить драйверы на хосте `media`:
|
||||
```bash
|
||||
apt install intel-media-va-driver-non-free
|
||||
```
|
||||
- Включить аппаратное ускорение в настройках Jellyfin (Администрирование → Воспроизведение → Аппаратное ускорение → VAAPI)
|
||||
|
||||
---
|
||||
|
||||
## Общие проверки
|
||||
|
||||
Если проблема не локализована, выполните следующие шаги:
|
||||
|
||||
1. **Логи** – первое, что нужно смотреть:
|
||||
- Системные: `journalctl -xe`
|
||||
- Docker: `docker logs <container>`
|
||||
- Samba: `tail -f /var/log/samba/log.smbd`
|
||||
|
||||
2. **Сеть** – проверить доступность и открытые порты:
|
||||
```bash
|
||||
ping 192.168.1.200
|
||||
traceroute 192.168.1.200
|
||||
nmap -p 22,80,443 192.168.1.201
|
||||
```
|
||||
|
||||
3. **Диски** – проверить свободное место:
|
||||
```bash
|
||||
df -h
|
||||
pvesm status # на Proxmox
|
||||
```
|
||||
|
||||
4. **Файрвол** – временно отключить для теста:
|
||||
```bash
|
||||
ufw disable # только для теста!
|
||||
```
|
||||
|
||||
5. **Перезагрузка** – иногда помогает:
|
||||
```bash
|
||||
reboot
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Связанные разделы:**
|
||||
- [Сеть и доступ](04-network.md)
|
||||
- [Samba – файловые шары](05-samba.md)
|
||||
- [Проксирование и SSL (NPM)](07-proxy-ssl.md)
|
||||
- [Мониторинг и логирование](08-monitoring.md)
|
||||
Loading…
Reference in New Issue
Block a user