Требования и подготовка к установке
Эта страница — чек-лист того, что нужно подготовить до запуска установки серверных ролей LSUS: поддерживаемые ОС, ресурсы хоста, дисковое планирование, параметры ядра, firewall и DNS для автообнаружения клиентов.
Серверные роли LSUS (Master, Site, Edge, PXE) разворачиваются только в Docker-контейнерах. Развёртывание на хост (без Docker) не поддерживается. Пакеты ОС LSUS устанавливают Docker, загружают образы и запускают контейнеры — администратору не нужно настраивать PostgreSQL, nginx или приложение вручную. Эта страница описывает подготовку хоста, на котором будет запущен Docker: ресурсы, диск, ядро, firewall. Клиенты (lsus-client) устанавливаются на хост управляемых машин напрямую — к ним это не относится.
Подробная установка по шагам — в разделе Развёртывание серверов. Полный справочник портов и переменных окружения — в Справочнике портов, контейнеров и переменных.
Поддерживаемые операционные системы#
Серверные роли (Master, Site, Edge, PXE) поставляются пакетами под конкретный дистрибутив ОС — пакет устанавливает Docker и запускает контейнеры роли. На одном хосте можно развернуть только одну серверную роль — пакеты ролей конфликтуют друг с другом (Conflicts со всеми ролями, включая lsus-pxe). Исключение инсталлятора — существующее сочетание master+edge; роль pxe к нему не добавляется и всегда стоит на своём хосте.
| ОС | Версия | Пакет Docker | Пакет Compose | Суффикс пакета |
|---|---|---|---|---|
| Astra Linux Special Edition | 1.7 / 1.8 | docker.io |
docker-compose-v2 |
_astra |
| Debian | 13 (Trixie) | docker.io |
docker-compose |
_debian |
| Ubuntu | 24.04 и новее | docker.io |
docker-compose-v2 |
_ubuntu |
| РЕД ОС / RHEL-совместимые | 7.3, 8 | docker-ce |
docker-compose |
.rpm (dnf) |
| Альт Сервер | 11 (p11) | docker-engine |
docker-compose |
-alt1.noarch.rpm (apt-rpm) |
Примечание
Пакеты ролей различают Astra, Debian и Ubuntu по суффиксу (_astra, _debian, _ubuntu). Для РЕД ОС — общий RPM-пакет (суффикс -1), для Альт Сервера — отдельная линейка APT-RPM (суффикс -alt1), зависящая от docker-engine из p11. На клиентской стороне список поддерживаемых ОС шире — в том числе Oracle Linux 8/9/10 (отдельное семейство, пресеты ОС и зеркала на Edge) — см. Клиент LSUS.
Docker и Docker Compose#
Единственный поддерживаемый способ развёртывания серверных ролей LSUS — Docker-контейнеры через Docker Compose. Установить серверные компоненты (приложение, PostgreSQL, nginx, PgBouncer) напрямую в хост-систему нельзя — они всегда запускаются в контейнерах из образов, поставляемых пакетами LSUS. Развёртывание на хост (bare-metal) не поддерживается.
Docker и Docker Compose ставятся автоматически как зависимости ролевого пакета LSUS (lsus-master, lsus-site, lsus-edge) — отдельно их устанавливать не нужно, если хост имеет доступ к репозиториям ОС.
Требования к версиям:
- Docker Engine —
docker.io(Astra/Debian/Ubuntu),docker-ce(РЕД ОС) илиdocker-engine(Альт Сервер — только из штатного репозитория p11, без docker.com). Конкретная минимальная версия не зафиксирована — используйте версию из штатного репозитория вашей ОС. - Docker Compose — любой из вариантов:
docker-compose-v2(Astra, Ubuntu) — вызов через плагин:docker compose …;docker compose(встроенная команда Docker Engine);docker-compose(Debian, РЕД ОС, Альт) — standalone-бинарь:docker-compose ….- Скрипт
postinstролевого пакета сам перебирает эти три варианта и использует первый доступный.
Совет
Проверьте, что Compose доступен, одной из команд (в зависимости от ОС сработает нужная):
docker compose version # плагин v2 (Astra, Ubuntu)
docker-compose version # standalone (Debian, РЕД ОС, Альт)
Альт Сервер: работа от root
В ОС Альт не используется sudo — административные команды выполняются от root в сеансе su - (обязательно с минусом). Порядок установки и стиль команд для Альта — в разделе Установка на Альт Сервер.
Ресурсы хоста по ролям#
LSUS рассчитан на управление тысячами клиентских хостов, поэтому требования к памяти и диску зависят от ожидаемого количества клиентов и объёма репозиториев.
Оперативная память и CPU#
| Роль | Минимум | Рекомендуется | Обоснование |
|---|---|---|---|
| Master | 4 vCPU / 8 ГБ RAM | 8 vCPU / 16–32 ГБ RAM | Основная нагрузка: веб-админка, приём heartbeats от тысяч клиентов, БД, кеш KB. Плюс ~256 МБ под Redis и до ~512 МБ под раздатчик репозиториев (в простое легче) |
| Site | 2 vCPU / 4 ГБ RAM | 4 vCPU / 8–16 ГБ RAM | Прокси для своего пула клиентов, локальная копия репозиториев. Плюс ~256 МБ под Redis |
| Edge | 2 vCPU / 4 ГБ RAM | 4 vCPU / 8 ГБ RAM | Приём/раздача файлов, зеркала репозиториев в DMZ. Плюс ~256 МБ под Redis |
| PXE | 2 vCPU / 4 ГБ RAM | 4 vCPU / 8 ГБ RAM | proxyDHCP/TFTP, extract ISO, HTTP boot. Свой хост, без PostgreSQL |
| Ollama (AI) | 4 vCPU / 8 ГБ RAM | 8 vCPU / 16–32 ГБ RAM + GPU | Локальный LLM-инференс. Без GPU работает на CPU (медленнее) |
| OpenClaw (AI) | 2 vCPU / 2 ГБ RAM | 2 vCPU / 4 ГБ RAM | Агент-диспетчер, мало ресурсов — основную нагрузку несёт Ollama |
| Клиент | 1 vCPU / 1 ГБ RAM | 1 vCPU / 2 ГБ RAM | Фоновый агент, минимум ресурсов |
Как LSUS использует память
PostgreSQL в контейнере настраивается автоматически при старте: под операционную систему резервируется 40% RAM (LSUS_PG_MEMORY_RESERVE_PERCENT=40), остальное распределяется по параметрам shared_buffers, effective_cache_size, work_mem, max_connections. Поэтому общий объём памяти хоста — ключевой параметр для производительности Master. При нехватке памяти параметры PG можно переопределить через переменные LSUS_PG_* (см. Справочник переменных).
Дисковое пространство#
| Роль | Система, БД, журналы | Репозитории / хранилища |
|---|---|---|
| Master | 120–200 ГБ | от 500 ГБ, чаще 1–3 ТБ |
| Site | 80–150 ГБ | от 300 ГБ, чаще 0,5–2 ТБ |
| Edge | 60–120 ГБ | от 200 ГБ, чаще 0,5–2 ТБ |
| PXE | 20–40 ГБ (система и журналы) | от 100 ГБ store: каждый ISO + extract 4–8 ГБ ×2, плюс remaster |
| Ollama (AI) | 20–50 ГБ | модели LLM: 1–5 ГБ на модель, закладывайте запас |
| OpenClaw (AI) | 2–5 ГБ | не требуется |
| Клиент | 1–2 ГБ | не требуется |
Основной рост диска у серверных ролей дают каталоги repos (зеркала репозиториев пакетов) и kb-cache (кеш баз KB Windows). У AI-стека — модели Ollama в data/ai/ollama/.
Дисковое планирование (LVM)#
Данные контейнеров LSUS хранятся на хосте через bind-mount (см. Структуру каталогов). Поэтому дисковое планирование выполняется на хосте, где запущен Docker.
Совет
- Под систему и БД используйте один диск или один LVM-том.
- Под
repos,kb-cacheиstorageиспользуйте отдельный диск или отдельный том — это упростит расширение и резервное копирование. - Закладывайте запас минимум в 2 раза к начальному расчёту.
Данные LSUS по умолчанию хранятся в /opt/lsus-docker/data/ (см. Справочник переменных, переменная DATA_DIR). DATA_DIR — корень всех данных, включая базу PostgreSQL, поэтому репозитории на отдельный диск выносят монтированием в подкаталог (repos, kb-cache, storage), не меняя DATA_DIR; смена всего DATA_DIR — отдельный сценарий «переезд всех данных вместе с базой». Порядок шагов — в разделе Вынос данных на отдельный диск.
Параметры ядра хоста под нагрузку контейнеров#
Контейнеры LSUS запускаются с network_mode: host (см. Справочник), поэтому сетевой стек ядра хоста напрямую обслуживает трафик контейнеров. При управлении тысячами клиентов сервер обрабатывает большое количество одновременных HTTPS-соединений, и параметры ядра по умолчанию (особенно somaxconn и диапазон портов) могут оказаться узким местом.
Предупреждение
Если ожидаемое количество клиентов превышает несколько сотен, обязательно настройте параметры ниже. При их отсутствии возможны отказы соединений (Too many open files, дропы SYN) под нагрузкой.
Минимальные параметры ядра хоста для серверных ролей:
# /etc/sysctl.d/99-lsus.conf
net.core.somaxconn = 8192
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
fs.file-max = 131072
Применить без перезагрузки:
sudo sysctl --system
Почему именно эти значения
somaxconn = 8192— превышаетbacklog=4096в nginx (иначе «лишние» соединения отклоняются ядром);tcp_tw_reuse = 1и широкий диапазон портов — снижают давление при частых коротких HTTPS-запросах от клиентов;fs.file-max— контейнеры LSUS уже настроены наnofile 65536(ulimits в compose), но лимит файловых дескрипторов хоста тоже должен это позволять.
Проверить текущие значения:
cat /proc/sys/net/core/somaxconn
cat /proc/sys/net/ipv4/ip_local_port_range
ulimit -n
Firewall и сетевые порты#
LSUS использует TCP (HTTPS) для админки и клиентов. Роль PXE дополнительно слушает UDP 67/69/4011 (proxyDHCP и TFTP). gRPC, Redis и другие протоколы в стеке отсутствуют.
Контейнеры запускаются в network_mode: host, поэтому порты открываются на firewall хоста, на котором запущен Docker.
Внешние порты (открыть на firewall хоста)#
| Порт | Назначение | Откуда | Куда |
|---|---|---|---|
| 443 | Master/Site HTTPS (админка + API + репозитории) — при ручном развёртывании из .env.example |
клиенты, администраторы | Master или Site |
| 8443 | Master/Site HTTPS — по умолчанию в пакетах ОС | клиенты, администраторы | Master или Site |
| 18880 | HTTP /repos — по умолчанию в пакетах для Альт Сервера (обязателен для клиентов apt-rpm) |
клиенты | Master или Site |
| 443 / 8540 | Edge HTTPS (единый порт: UI + API + файлы); 8540 — по умолчанию в пакетах ОС | клиенты, Master → Edge | Edge |
| 443 | PXE HTTPS (upload ISO, API точки) | браузер админа, Master | PXE |
| 80 | PXE HTTP boot (boot.ipxe, kernel, initrd, ks) |
устанавливаемые машины | PXE |
| 67/udp, 4011/udp, 69/udp | PXE proxyDHCP + TFTP | PXE-клиенты, DHCP relay | PXE |
| 11434 | Ollama API (LLM-инференс) | Master, OpenClaw | Ollama |
| 18789 | OpenClaw (OpenAI-совместимый шлюз) | Master | OpenClaw |
Нестандартные порты
При ручном развёртывании из .env.example все роли слушают 443. Пакеты ОС при первой установке пишут в .env свои дефолты: Master/Site — 8443, Edge — 8540; в пакетах для Альт Сервера дополнительно HTTP /repos — 18880. Если вы задали порты через LSUS_INSTALL_* или в .env, открывайте именно их. Полная таблица — в Справочнике портов.
Межсерверные соединения#
| Направление | Порт | Назначение |
|---|---|---|
| Site → Master | 443 | Регистрация, синхронизация (LSUS_MASTER_URL=https://master) |
| Edge → Master | 443 | Регистрация, синхронизация (через API-ключ Edge) |
| PXE → Master | 443 | Регистрация точки, heartbeat, progress установок |
| Клиент → Master/Site | 443 | Heartbeat, получение команд, скачивание пакетов с /repos |
network_mode: host
Все контейнеры LSUS запускаются в режиме network_mode: host — без проброса портов. Это значит, что контейнеры слушают порты прямо на сетевом интерфейсе хоста. Поэтому открывать на firewall нужно именно порты хоста (443), а внутренние порты (5432, 6432 и др.) слушаются только на 127.0.0.1 и наружу не торчат. Подробнее — в Справочнике портов.
Пример правил firewall (firewalld)#
# Master/Site: открыть 443 для клиентов и администраторов
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
# Edge: открыть 443
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
# PXE: HTTPS + HTTP boot + proxyDHCP/TFTP
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=67/udp
sudo firewall-cmd --permanent --add-port=69/udp
sudo firewall-cmd --permanent --add-port=4011/udp
sudo firewall-cmd --reload
На Альт Сервере команды выполняются от root (su -, без sudo) и порты берутся из дефолтов Альт-пакетов — Master/Site 8443 + HTTP /repos 18880, Edge 8540:
# Master/Site (Альт Сервер)
# firewall-cmd --permanent --add-port=8443/tcp
# firewall-cmd --permanent --add-port=18880/tcp
# firewall-cmd --reload
Пример правил (iptables / ufw)#
# ufw (Ubuntu/Debian)
sudo ufw allow 443/tcp
# iptables
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Клиентам не нужен интернет
Клиентские хосты требуют только исходящего HTTPS до сервера LSUS (Master или Site). Прямой доступ в интернет клиентам не нужен — пакеты тянутся с /repos сервера LSUS. Edge выступает точкой выхода в интернет за репозиториями для Master, но клиенты к Edge напрямую не обращаются.
Подготовка DNS для автообнаружения клиентов#
Для корпоративного развёртывания — обязательный шаг
Если в инфраструктуре есть корпоративный DNS — опубликуйте записи до массовой установки агентов. Без них администратору придётся вручную указывать server_url на каждой машине. Рекомендуемый путь — TXT _lsus.<домен> (одна запись в зоне, без узла _tcp). SRV _lsus._tcp — запасной путь для зон, где _tcp создавать можно. На MS DNS запись SRV _lsus._tcp создаёт узел _tcp и может перекрыть _ldap / _kerberos.
Как это работает#
Клиент LSUS при первом запуске определяет домен хоста по FQDN и запрашивает TXT _lsus.<домен>. Если ни одна строка не подошла (нет записи или чужой cidr) — запрашивает SRV _lsus._tcp.<домен>. Если машина называется ws-007.example.com, домен будет example.com.
Кто ещё использует эти записи
Те же TXT/SRV-записи читают агент конфигураций (lsus-config-agent — если у него и у lsus-client не задан явный адрес) и Windows-агент. Одна запись в зоне обслуживает всех агентов LSUS на хосте.
Windows-агент определяет зону сам, как Linux, если в lsus-client.conf не задан ни ServerUrl, ни ServerDiscoveryDomain: он перебирает домен AD, суффикс FQDN, первичный DNS-суффикс и суффиксы адаптеров, поэтому запись находится и на хосте вне домена. Если задан ServerDiscoveryDomain, запрашивается только эта зона. Подробности и режимы — в Клиенте Windows.
Если FQDN не совпадает с зоной, в которой опубликованы записи, задайте домен явно:
[server]
server_discovery_domain = example.com
Отключить DNS-поиск (закрытый контур): dns_discovery = false.
TXT _lsus.<домен> (рекомендуется, в том числе для MS DNS)#
Несколько TXT на одном имени — по строке на площадку:
_lsus.example.com. IN TXT "v=lsus1;host=master.example.com;port=8443"
_lsus.example.com. IN TXT "v=lsus1;cidr=10.52.0.0/16;host=site-msk.example.com;port=8443;prio=10"
| Поле | Значение |
|---|---|
v=lsus1 |
обязательная версия формата |
host |
FQDN сервера LSUS (TLS проверяется на нём, не на _lsus) |
port |
порт HTTPS API (должен совпадать с MASTER_PORT/SITE_PORT в .env) |
cidr |
необязательно; несколько через запятую. Нет поля — запись для всех (Master) |
prio |
меньше — выше; учитывается при равной длине префикса |
Клиент оставляет строки, где хотя бы один его IPv4 входит в cidr (или cidr нет). Несколько подходящих: longest prefix, затем меньший prio, затем зонд GET /api/v1/health. Чужой cidr игнорируется. Куски одной TXT RR (лимит 255 байт) склеиваются.
Готовые строки для копирования в оснастку DNS — кнопка «Записи DNS» на вкладке подсетей в админке Master.
SRV _lsus._tcp (запас)#
Там, где узел _tcp создавать можно (BIND, FreeIPA, dnsmasq):
_lsus._tcp.example.com. 3600 IN SRV 10 5 8443 master.example.com.
Клиент опрашивает каждую цель GET /api/v1/health и выбирает минимальный RTT; если зонд недоступен — priority, подсеть, weight.
Порт в DNS должен совпадать с `.env`
Порт в TXT/SRV обязан совпадать с MASTER_PORT/SITE_PORT/EDGE_PORT в /opt/lsus-docker/.env.
Зависимость клиента от dnspython#
python3-dnspython не обязателен: Linux-клиент запрашивает TXT/SRV встроенным UDP/TCP-резолвером. Пакет по-прежнему в Recommends (на ALT — в зависимостях) и используется, если установлен.
Приоритет источников URL на клиенте#
| Приоритет | Источник | Когда срабатывает |
|---|---|---|
| 0 | URL, назначенный Master (assigned_server_url) |
Master уже переадресовал клиента на Site |
| 1 | DNS TXT _lsus.<домен> |
Рекомендуемый путь для нового хоста |
| 2 | DNS SRV _lsus._tcp.<домен> |
Если TXT нет или ни одна строка не подошла по cidr |
| 3 | server_url из /etc/lsus-client/lsus-client-common.conf |
Пилот, нет DNS |
Если DNS не настроен и server_url не задан — клиент напишет в журнал ошибку.
Что делать, если DNS-сервера нет#
- Поднимите минимальный DNS (например,
dnsmasqна LSUS-сервере); - Или задавайте
server_urlв/etc/lsus-client/lsus-client-common.conf(вручную или через Ansible/Salt/ADMX).
Краткий чек-лист подготовки#
Перед установкой серверной роли убедитесь, что выполнено:
- [ ] Выбрана ОС из таблицы поддерживаемых. Docker и Docker Compose ставить отдельно не нужно — пакет LSUS сам вытянет их как зависимости.
- [ ] Хост соответствует требованиям по CPU/RAM для выбранной роли.
- [ ] Подготовлен диск под систему/БД и отдельный том под
repos/kb-cache(данные контейнеров хранятся на хосте через bind-mount). - [ ] Настроены параметры ядра хоста (
sysctl) при ожидаемой нагрузке от сотен клиентов — контейнеры работают вnetwork_mode: hostи используют сетевой стек хоста. - [ ] На firewall хоста открыт порт 443 (или нестандартные порты, заданные в
.env) — контейнеры слушают порты хоста. - [ ] Для роли PXE открыты TCP 80/443 и UDP 67/69/4011; диск store ≥100 ГБ; Secure Boot на целевых машинах выключен (MVP = iPXE).
- [ ] Если планируется AI-стек — порты 11434 (Ollama) и 18789 (OpenClaw) открыты между AI-хостом и Master.
- [ ] (При наличии DNS-сервера) создана DNS TXT-запись
_lsus.<домен>(рекомендуется) или запасной SRV_lsus._tcp.<домен>. Обязательный шаг для корпоративного развёртывания.