Справочник портов, контейнеров и переменных
Единый источник правды по сетевым портам, Docker-контейнерам и переменным окружения серверных ролей LSUS и AI-стека. Остальные страницы ссылаются сюда и не дублируют эти данные.
Пошаговая установка — в разделе Развёртывание серверов. Требования к хосту и firewall — в Требованиях и подготовке. Подробно про AI-стек — в разделе AI-стек.
Сетевая модель#
network_mode: host
Все контейнеры LSUS запускаются с network_mode: "host". Это значит:
- Проброс портов (
ports:) не используется — контейнеры слушают порты напрямую на сетевых интерфейсах хоста. - Внешние порты — 443 для всех ролей (админка, API и репозитории). Это значение по умолчанию в
.env.exampleи в пакетах ОС LSUS. - Внутренние порты (5432, 6379, 6432, 6433, 18443, 18444, 18080, 18081, 18540, 18541) — слушаются только на
127.0.0.1и наружу не доступны (PgBouncer и Redis привязаны к127.0.0.1, приложение и nginx общаются через loopback). - Контейнер видит те же сетевые интерфейсы и резолвинг имён, что и хост (
/etc/hostsи/etc/hostnameхоста примонтированы read-only).
Все контейнеры используют общий лимит файловых дескрипторов:
ulimits:
nofile:
soft: 65536
hard: 65536
Это защита от EMFILE (Too many open files) при тысячах одновременно подключённых клиентов.
Порты#
Внешние порты (публикуются на интерфейсах хоста)#
| Порт | Роль | Назначение |
|---|---|---|
| 443 | Master, Site | HTTPS (админка + API /api/v1 + репозитории /repos) — при ручном развёртывании из .env.example |
| 8443 | Master, Site | HTTPS — по умолчанию в пакетах ОС при первой установке |
| 443 / 8540 | Edge | HTTPS, единый порт (UI + API + файлы); 8540 — по умолчанию в пакетах ОС |
| 443 | PXE | HTTPS админ-плоскость (upload ISO, API точки) |
| 80 | PXE | Plain HTTP boot-артефакты (boot.ipxe, kernel, initrd, ks/preseed) |
| 8080 | Master, Site | (Опционально) plain-HTTP для /repos — по умолчанию при ручном развёртывании из .env.example |
| 18880 | Master, Site | plain-HTTP для /repos — по умолчанию в пакетах для Альт Сервера (APT-RPM); обязателен для клиентов apt-rpm |
| 67/udp, 4011/udp | PXE | proxyDHCP (не DHCP-сервер парка) |
| 69/udp | PXE | TFTP chainload iPXE |
| 11434 | Ollama (AI) | API Ollama (LLM-инференс) |
| 18789 | OpenClaw (AI) | OpenAI-совместимый шлюз агента OpenClaw |
| 18445 | Диагностика (необязательно) | Веб-интерфейс модуля lsus-diag. В установку ролей не входит, слушает все интерфейсы хоста. Сам входит в админку и не меняет пароль администратора. Сессия на минуты или часы связывает клики, ответы, запросы в базе и ожидание в пуле. |
Разделение трафика на Master/Site
По умолчанию Master и Site публикуют админку, API и репозитории на одном порту (443). При необходимости классы трафика можно разнести на разные порты через переменные LSUS_ADMIN_PORT / LSUS_API_PORT / LSUS_REPOS_PORT (например, админка на 443, репозитории на 8444). На порту админки /api и /repos закрываются; на порту API/репозиториев корневой запрос возвращает 404. Edge всегда использует единый порт.
Нестандартные порты
Дефолт docker-compose.yml и .env.example (ручное развёртывание) — 443 для всех ролей. Пакеты ОС при первой установке пишут в .env: Master/Site — 8443, Edge — 8540; Альт-пакеты — дополнительно HTTP /repos 18880. Клиент при подключении без явного порта использует DEFAULT_SERVER_PORT = 8443. При любом нестандартном порте укажите его в URL клиенту (server_url) или в DNS TXT/SRV.
Внутренние порты (только 127.0.0.1, loopback)#
| Порт | Компонент | Назначение |
|---|---|---|
| 5432 | PostgreSQL | Основная БД (общая для всех ролей на хосте) |
| 6379 | Redis | Общий кеш процессов приложения: лимиты входа, политики, глобальные настройки (без пароля, только loopback) |
| 6432 | PgBouncer (Master) | Пул соединений веб-приложения к БД |
| 6433 | PgBouncer (Site) | Пул соединений (отдельный порт, чтобы не конфликтовать при совмещении ролей) |
| 18443 | приложение (Master, Site) | Внутренний plain-HTTP приложения (клиентский API), за nginx |
| 18444 | приложение (Master) | Внутренний plain-HTTP админского пула (веб-интерфейс и админ-API), за nginx |
| 18080 | приложение (Master, Site) | Внутренний plain-HTTP /repos пула приложения — точка отката при возврате с раздатчика; сложные запросы (прокси с Пограничного сервера, отсутствие файла) обрабатываются здесь |
| 18081 | раздатчик (Master, Site) | Внутренний plain-HTTP lsus-repod — основная раздача локальных файлов /repos |
| 18540 | приложение (Edge) | Внутренний plain-HTTP edge-app — точка отката на Edge |
| 18541 | раздатчик (Edge) | Внутренний plain-HTTP lsus-edge-repod |
| 18550 | приложение (PXE) | Внутренний plain-HTTP pxe-app, за nginx |
Дефолтные порты ролей (для клиентов)#
Значения по умолчанию — из .env.example (ручное развёртывание) и из .env, создаваемого пакетами ОС при первой установке:
| Роль | Переменная | Ручное развёртывание | Пакеты ОС | Пакеты для Альт Сервера |
|---|---|---|---|---|
| Master | MASTER_PORT |
443 | 8443 | 8443 |
| Master | MASTER_HTTP_PORT |
8080 (опционально) | — | 18880 |
| Site | SITE_PORT |
443 | 8443 | 8443 |
| Site | SITE_HTTP_PORT |
8080 (опционально) | — | 18880 |
| Edge | EDGE_PORT |
443 | 8540 | 8540 |
| PXE | PXE_PORT / PXE_HTTP_PORT |
443 / 80 | 443 / 80 | — (PXE в APT-RPM нет) |
| PostgreSQL | PG_PORT |
5432 | 5432 | 5432 |
Свои порты при необходимости
Если нужны нестандартные порты (например, чтобы освободить 443 для другого сервиса), задайте их переменными LSUS_INSTALL_MASTER_PORT, LSUS_INSTALL_SITE_PORT, LSUS_INSTALL_EDGE_PORT (и LSUS_INSTALL_MASTER_HTTP_PORT / LSUS_INSTALL_SITE_HTTP_PORT для /repos в Альт-пакетах) при первой установке или отредактируйте .env вручную и пересоздайте контейнеры.
TLS и nginx#
- Протоколы: только TLS 1.2 и 1.3 (
ssl_protocols TLSv1.2 TLSv1.3;). - HTTP/2: включён (
http2 on;). - Сертификаты: при первом запуске при отсутствии сертификатов генерируются самоподписанные. Пути в контейнере —
/app/data/certs/server.crtиserver.key. - listen backlog: 4096 (
LSUS_NGINX_LISTEN_BACKLOG). - worker_connections: 16384,
worker_rlimit_nofile 65536. - Ограничение частоты API:
limit_req zone=api rate=50r/s burst=100.
Контейнеры по ролям#
| Роль | Контейнеры |
|---|---|
| Master | lsus-postgres, lsus-redis, lsus-pgbouncer, lsus-master, lsus-master-worker, lsus-master-replication, lsus-repod, lsus-nginx |
| Site | lsus-postgres, lsus-redis, lsus-site-pgbouncer, lsus-site, lsus-site-replication, lsus-site-repod, lsus-site-nginx |
| Edge | lsus-postgres, lsus-redis, lsus-edge, lsus-edge-repod, lsus-edge-nginx |
| PXE | lsus-pxe, lsus-pxe-nginx (без PostgreSQL) |
| Диагностика (необяз.) | lsus-diag — отдельный профиль, в роли не входит |
| Ollama (AI) | lsus-ollama |
| OpenClaw (AI) | lsus-openclaw |
Зачем worker и replication у Master
lsus-master — основной веб-процесс (Flask/gunicorn), у него отключены фоновые задачи (LSUS_DISABLE_BACKGROUND_TASKS=1) и репликация (LSUS_DISABLE_REPLICATION=1). Фоновую работу делают отдельные контейнеры:
- lsus-master-worker — фоновые задачи (синхронизация OVAL, сбор пакетов, расписание);
- lsus-master-replication — приём репликаций от Site/Edge.
Worker и replication ходят в PostgreSQL напрямую (порт 5432), минуя PgBouncer, т.к. им нужны session-состояние и advisory locks, несовместимые с transaction-пулингом.
Что делает раздатчик
lsus-repod / lsus-site-repod / lsus-edge-repod — раздатчик локальных файлов /repos (один образ на все роли). Он не ходит в базу данных: маршруты ему готовит фоновый процесс Master (снимок каталогов). По умолчанию nginx отдаёт /repos в раздатчик; что тот не обслуживает (проксирование с Пограничного сервера, отсутствующие файлы), уходит в прежний пул приложения. Откат — переменной LSUS_REPOS_BACKEND (см. ниже).
Карта образов#
| Образ | Базовый образ | Назначение |
|---|---|---|
lsus-postgres |
postgres:15-bookworm |
PostgreSQL 15 |
lsus-master |
Debian Bookworm Slim | Приложение Master (Python 3.11) |
lsus-site |
Debian Bookworm Slim | Приложение Site (Python 3.11) |
lsus-edge |
Debian Bookworm Slim | Приложение Edge (Python 3.11) |
lsus-pxe |
Debian Bookworm Slim | Точка развёртывания ОС (dnsmasq proxyDHCP, store ISO) |
lsus-redis |
redis:7-alpine |
Redis: общий кеш процессов (Master/Site/Edge) |
lsus-pgbouncer |
— | Пул соединений PostgreSQL |
lsus-nginx |
— | TLS-фронтенд (nginx) |
lsus-repod |
Debian Bookworm Slim | Раздатчик /repos (один образ для Master/Site/Edge, статический бинарник) |
lsus-diag |
Debian Bookworm Slim | Необязательный модуль диагностики (своя версия LSUS_DIAG_VERSION, веб-интерфейс на порту 18445) |
lsus-ollama |
ollama/ollama:0.31.1 |
LLM-движок Ollama (локальный инференс моделей) |
lsus-openclaw |
openclaw/openclaw |
Агент-диспетчер OpenClaw (OpenAI-совместимый шлюз) |
Все образы имеют тег ${LSUS_VERSION} и pull_policy: never (берутся из загруженных локально, не из registry). AI-образы тегируются отдельной версией ${AI_VERSION} и запускаются через профили compose (--profile ollama, --profile openclaw). Состав пакетов внутри образов — см. Docker и образы.
Переменные окружения#
Переменные задаются в файле .env (каталог /opt/lsus-docker/). При обновлении пакетов существующий .env не перезаписывается — значения сохраняются.
Совет
Переменные, помеченные как «только при первой установке» (префикс LSUS_INSTALL_), обрабатываются только при первом развёртывании. Изменить порт или пароль БД позже можно, отредактировав .env вручную и пересоздав контейнеры.
Базовые переменные (все роли)#
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_VERSION |
из VERSION |
Тег образов (например, 1.0.67) |
DATA_DIR |
./data |
Корень данных. Значение ./data относительно каталога compose (/opt/lsus-docker/), т.е. фактически /opt/lsus-docker/data. При установке через пакеты ОС путь именно такой. |
POSTGRES_PASSWORD |
— | Пароль суперпользователя PostgreSQL (генерируется случайно) |
PG_PORT |
5432 |
Порт PostgreSQL |
LSUS_PG_MEMORY_RESERVE_PERCENT |
40 |
Процент RAM, резервируемый под ОС (остальное — под PG) |
Redis (общий кеш)#
Redis работает на каждой серверной роли (Master/Site/Edge) в контейнере lsus-redis, слушает только 127.0.0.1:6379 — без пароля и без персистентности (данные — только кеш, восстанавливать нечего). При недоступности Redis приложение продолжает работу с кешем внутри процесса.
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_REDIS_URL |
redis://127.0.0.1:6379/0 |
Адрес Redis для приложения |
LSUS_REDIS_MAXMEMORY |
256mb |
Лимит памяти Redis (политика noeviction) |
PostgreSQL — автотюнинг#
Параметры PostgreSQL настраиваются автоматически при старте контейнера (режим auto) на основе объёма RAM хоста. Значение auto для большинства параметров означает расчёт по эмпирическим формулам. Чтобы зафиксировать значение вручную, задайте конкретное число вместо auto.
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_PG_TUNE_MODE |
auto |
Режим тюнинга (auto — пересчёт при старте) |
LSUS_PG_MAX_CONNECTIONS |
auto |
max_connections |
LSUS_PG_SHARED_BUFFERS |
auto |
shared_buffers: четверть RAM хоста, не больше 16 ГБ и не больше бюджета Postgres минус 1 ГБ |
LSUS_PG_EFFECTIVE_CACHE_SIZE |
auto |
effective_cache_size |
LSUS_PG_WORK_MEM |
auto |
work_mem. С PgBouncer считается от числа реальных соединений. Пол 16 МБ, крышка 128 МБ |
LSUS_PG_MAINTENANCE_WORK_MEM |
auto |
maintenance_work_mem, крышка до 2 ГБ |
LSUS_PG_HAS_PGBOUNCER |
пусто | 1 на Master и Site: work_mem от пула PgBouncer и прямых пулов фоновой службы и репликации. Пусто — расчёт от max_connections (Edge) |
LSUS_PG_EXPECTED_BACKENDS |
auto |
Явное число соединений для work_mem. auto — формула |
LSUS_COLLECTION_MEMBERSHIP_BATCH_LIMIT |
100 |
Сколько компьютеров за один проход очереди состава коллекций |
LSUS_UPDATE_LOG_EXCERPT_CHARS |
32768 |
Сколько текста журнала установки остаётся в базе (начало и конец). Полный текст — файл на сервере |
LSUS_PG_CHECKPOINT_TIMEOUT |
15min |
checkpoint_timeout |
LSUS_PG_MAX_WAL_SIZE |
auto |
max_wal_size |
LSUS_PG_RANDOM_PAGE_COST |
1.5 |
random_page_cost (под SSD) |
LSUS_PG_EFFECTIVE_IO_CONCURRENCY |
200 |
Сколько страниц индекса читать вперёд. 200 для SSD и виртуального диска. Для HDD поставьте 1 |
LSUS_PG_LOG_MIN_DURATION_STATEMENT |
1000 |
Логировать запросы дольше N мс |
LSUS_PG_AUTOVACUUM_VACUUM_SCALE_FACTOR |
0.05 |
Агрессивнее дефолта 0.2 (для высокочастотных таблиц) |
Проверить применённые значения:
sudo bash /opt/lsus-docker/scripts/check-postgres-tuning.sh
Master — порты и URL#
| Переменная | По умолчанию | Назначение |
|---|---|---|
MASTER_PORT |
443 |
Внешний HTTPS-порт (админка + API + репо); в пакетах ОС — 8443 |
MASTER_HTTP_PORT |
8080 |
Внешний plain-HTTP порт для /repos; в Альт-пакетах — 18880 |
MASTER_ADMIN_PORT |
= MASTER_PORT |
Отдельный порт админки (если разделить трафик) |
MASTER_API_PORT |
= MASTER_PORT |
Отдельный порт API |
MASTER_REPOS_PORT |
= MASTER_PORT |
Отдельный порт репозиториев |
LSUS_HOSTNAME |
lsus |
FQDN/имя хоста Master (для генерации URL клиентам) |
LSUS_SCHEDULE_TIMEZONE |
пусто = UTC |
IANA-пояс cron-расписаний репозиториев и окон кампаний, если хост свой пояс не сообщил. Часы в формах («02:00», «10:00–12:00») — настенные в этом поясе. Задаётся и в UI: Администрирование → Настройки → Сервер |
LSUS_ADMIN_INITIAL_PASSWORD |
— | Пароль admin; пусто — случайный при первом старте (data/master/data/.initial_admin_password) |
LSUS_ADMIN_INTERNAL_PORT |
18444 |
Внутренний порт админского пула. Веб-интерфейс обслуживается отдельным пулом воркеров и не замедляется при массовом опросе агентами. Пусто — пул не поднимается (откат к одному пулу) |
GUNICORN_ADMIN_WORKERS / GUNICORN_ADMIN_THREADS |
3 / 8 |
Воркеры/треды админского пула. При GUNICORN_WORKERS=auto автотюнер вычитает их из рекомендации клиентского пула — суммарная память не растёт. При регулярных импортах ISO/MSU поднимите воркеры до 4. Если в .env явно стоит прежнее значение GUNICORN_ADMIN_THREADS=4, обновление заменяет его на 8; другое число не меняется |
MALLOC_ARENA_MAX |
2 |
Сколько арен памяти выделяет glibc процессам Master, фоновой службы и репликации. Меньше арен — процесс после тяжёлой работы отдаёт память системе |
LSUS_WORKER_MAX_RSS_MB |
3072 |
Фоновая служба сама останавливается и контейнер перезапускается, если заняла больше этого объёма (МиБ). 0 — не следить |
LSUS_WORKER_MEM_LIMIT / LSUS_WORKER_MEMSWAP_LIMIT |
4g / 4g |
Жёсткий потолок памяти контейнера фоновой службы, чтобы она не вытесняла веб и базу в своп. Своп не используется: на очень больших каталогах LDAP полная синхронизация может упереться в потолок — тогда поднимите оба значения |
GUNICORN_HTTP_WORKERS / GUNICORN_HTTP_THREADS |
2 / 8 |
Воркеры/треды пула приложения /repos: хвост сложных запросов (проксирование с Пограничного сервера) и точка отката; локальные файлы по умолчанию отдаёт раздатчик. Второй воркер добавляет примерно 0.3–0.4 ГБ; на узлах меньше 4 ГБ оставляйте GUNICORN_HTTP_WORKERS=1. При массовых установках через проксирование с Edge или лимитах канала филиала поднимите воркеры/потоки |
LSUS_WEB_POOL_NICE_APP / LSUS_WEB_POOL_NICE_REPOS |
0 / 5 |
Приоритет CPU пулов (os.nice, только понижение). Клиентский API по умолчанию не замедляется — приоритет админки достигается изоляцией пулов; пул /repos — фон |
LSUS_NGINX_REPOS_CACHE_ENABLED |
1 |
Кеш раздачи /repos в nginx: при массовом опросе одни и те же индексы отдаются из кеша (заголовок X-Cache: HIT). Управляется и из UI: Администрирование → Настройки → Сервер |
LSUS_NGINX_REPOS_CACHE_MAX_SIZE |
10g |
Верхняя граница кеша /repos на диске (том data/master/nginx-cache) |
LSUS_NGINX_REPOS_CACHE_META_TTL |
60s |
TTL успешных индексов (InRelease, Packages, repomd.xml…) в кеше; публикация репозитория видна клиентам с задержкой не больше этого значения. Ответ «файла нет» для тех же имён держится 5 минут, чтобы клиент не повторял запрос отсутствующего индекса |
LSUS_REPO_NEGATIVE_CACHE_TTL |
300 |
Секунды, сколько раздатчик помнит отсутствующий файл репозитория и не ходит в базу повторно (0 — выключить) |
LSUS_NGINX_REPOS_CACHE_PKG_TTL |
0 |
TTL пакетов: 0 — не кешировать (стрим), включать при проксировании на Edge или медленном хранилище. Не больше LSUS_REPO_REVISION_GRACE_MINUTES. Кеш пакетов обходит лимит канала филиала — при заданных лимитах оставляйте 0. При выключении кеша том data/master/nginx-cache очищается |
LSUS_NGINX_REPOS_CONNECT_TIMEOUT |
5s |
Таймаут соединения nginx → пул /repos. При насыщении пула быстрый отказ вместо минуты ожидания. Формат NNs / NNms |
LSUS_MASTER_DB_POOL_SIZE |
10 |
Размер пула соединений к БД |
LSUS_MASTER_DB_USE_NULLPOOL |
1 |
NullPool (т.к. пул держит PgBouncer) |
LSUS_REPO_FALLBACK_ENABLED |
1 |
Отдавать пакет из сохранённой ревизии, если путь исчез из активной после переключения (заголовок X-LSUS-Revision-Fallback); только пакеты, не индексы |
LSUS_REPO_REVISIONS_KEEP |
3 |
Сколько предыдущих ревизий атомарной публикации удерживать (минимум 2) |
LSUS_REPO_REVISION_GRACE_MINUTES |
60 |
Ревизия живёт минимум это время после публикации — клиент, начавший установку до переключения, дочитывает пакеты |
LSUS_REPO_EDGE_DOWN_TTL |
10 |
Секунд не ходить на пограничный сервер после ошибки соединения при раздаче /repos (0 — выключить) |
LSUS_CAS_ENABLED |
0 |
|
LSUS_BACKFILL_SLEEP_MS |
20 |
|
LSUS_CAS_GC_ENABLED |
0 |
GC блобов CAS: 0 — только отчёт, 1 — удаление (rename в .trash + повторная проверка nlink) |
LSUS_CAS_GC_GRACE_DAYS |
7 |
Блоб младше этого возраста GC не трогает (параллельный линк обновляет ctime и выводит из кандидатов) |
Раздатчик репозиториев#
Включён по умолчанию на всех ролях: nginx отдаёт /repos в контейнер раздатчика. Существующий .env при обновлении не перезаписывается — если LSUS_REPOS_BACKEND в нём не задана, работает дефолт compose (раздатчик).
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_REPOS_BACKEND |
пусто = раздатчик | Куда nginx отдаёт /repos. Пусто или отсутствие — контейнер раздатчика. Откат на пул приложения: 127.0.0.1:18080 (Master/Site) или 127.0.0.1:18540 (Edge); после смены пересоздать фронт (up -d lsus-nginx, на Site — lsus-site-nginx, на Edge — lsus-edge-nginx) |
LSUS_REPOD_INTERNAL_PORT |
18081 |
Loopback-порт раздатчика на Master/Site. При конфликте смените здесь и укажите тот же адрес в LSUS_REPOS_BACKEND |
LSUS_EDGE_REPOD_INTERNAL_PORT |
18541 |
Loopback-порт раздатчика на Edge |
LSUS_REPOD_GO_MEMLIMIT_MB |
512 |
Мягкий лимит памяти раздатчика (МБ): после пиков распаковок индексов память возвращается ОС. 0 — лимит выключен |
Кеш nginx /repos и карточка «Кеш раздачи репозиториев» в настройках сервера не зависят от раздатчика и работают как раньше. Админка и опрос агентов обслуживаются другими пулами — раздатчик их не заменяет.
Master — backpressure#
Защита от шторма клиентов
При превышении лимита одновременных запросов на горячих эндпоинтах сервер возвращает 503 + Retry-After, а не падает. Клиент уважает Retry-After и откладывает повтор. 0 в любом лимите отключает соответствующий gate.
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_PROTECTION_ENABLED |
1 |
Включить backpressure |
LSUS_MAX_CLIENT_HEARTBEAT_CONCURRENCY |
8 |
Лимит одновременных heartbeat'ов |
LSUS_MAX_CLIENT_SETTINGS_CONCURRENCY |
8 |
Лимит одновременных запросов настроек |
LSUS_MAX_CLIENT_COMMANDS_CONCURRENCY |
8 |
Лимит одновременных запросов команд |
LSUS_RETRY_AFTER_SECONDS |
30 |
Заголовок Retry-After при 503 (в /repos — с рандомизацией ±LSUS_RETRY_AFTER_JITTER_PERCENT, чтобы шторм клиентов не ретраил синхронно) |
LSUS_MAX_EDGE_PROXY_CONCURRENCY |
2 |
Лимит одновременных скачиваний с Пограничного сервера на процесс. Действует и на пул /repos, и на раздатчик lsus-repod (шторм одинаковых пакетов — быстрый 503 вместо занятия всего пула; одинаковые файлы склеиваются в один поток, заголовок X-LSUS-Edge-Proxy). Индексы и HEAD — мимо гейта; 0 — выключить |
LSUS_EDGE_PROXY_SPOOL_KEEP_SECONDS |
120 |
Сколько секунд готовый spool-файл пакета живёт после последнего чтения: волны повторов после 503 попадают в диск, а не в новый поток. 0 — удалять сразу. Копии индексов живут отдельно, см. LSUS_EDGE_PROXY_INDEX_STALE_SECONDS |
LSUS_EDGE_PROXY_SPOOL_MAX_GB |
10 |
Лимит суммарного размера spool (ГБ, 0 — не писать spool, только прямой стрим) |
LSUS_EDGE_PROXY_INDEX_TTL_SECONDS |
30 |
Сколько секунд свежая копия индекса с Пограничного сервера отдаётся без повторного запроса |
LSUS_EDGE_PROXY_INDEX_STALE_SECONDS |
3600 |
Если Пограничный сервер не ответил, индекс отдаётся из копии не старше этого срока (заголовок X-LSUS-Edge-Proxy: stale). 0 — не отдавать старую копию |
LSUS_EDGE_PROXY_INDEX_MISS_TTL_SECONDS |
60 |
Сколько секунд помнить, что файла индекса на Пограничном сервере нет, и отвечать 404 без повторного запроса. 0 — не помнить |
LSUS_EDGE_PROXY_INDEX_TIMEOUT_SECONDS |
10 |
Сколько секунд ждать заголовки индекса от Пограничного сервера |
LSUS_REPOD_SITE_LINE_META_TTL_SECONDS |
30 |
На сайте: сколько секунд не переспрашивать мастер об индексе линии. 0 — проверять на каждый запрос |
LSUS_EDGE_MIRROR_KEY_STREAMS |
4 |
Edge: потоков раздачи зеркал на ключ сайта (1–32). Настройка из интерфейса Edge приоритетнее |
LSUS_EDGE_MIRROR_KEY_BYTES_PER_SEC |
0 |
Edge: скорость раздачи на ключ сайта, байт/с (0 — без лимита). Настройка из интерфейса приоритетнее |
LSUS_EDGE_MIRROR_MAX_STREAMS |
авто | Edge: общий предел потоков раздачи. Пусто — не меньше 64 и 4 на каждый ключ; настройка из интерфейса приоритетнее |
LSUS_EDGE_PROXY_SPOOL_DIR |
${LSUS_REPOS_PATH}/.edge-proxy-spool |
Каталог spool Edge-proxy на томе репозиториев (не системный диск data). Пусто — этот путь |
LSUS_REGISTER_REQUIRE_TOKEN |
0 |
Не отдавать существующий api_token на /register без Bearer или окна «Разрешить перерегистрацию» |
LSUS_ACTIVE_SESSION_REQUIRE_TOKEN |
0 |
Требовать Bearer на POST /clients/active-session |
LSUS_REGISTER_RATE_PER_MIN |
30 |
Лимит POST /clients/register с одного IP; при превышении 429 + Retry-After |
LSUS_ACTIVE_SESSION_RATE_PER_MIN |
60 |
Лимит POST /clients/active-session с одного IP; при превышении 429 + Retry-After |
LSUS_WAN_MAX_THROTTLED_STREAMS |
4 |
Потолок одновременных «тяжёлых» отдач (см. LSUS_HEAVY_RESPONSE_BYTES) на канал сайта и на удалённую подсеть — на мастер-приложении, сайте и раздатчике. Репликацию сайта не ограничивает |
LSUS_HEAVY_RESPONSE_BYTES |
52428800 |
Порог «тяжёлого» ответа (50 МБ), с которого действует потолок потоков: cab, MSU, пакеты агента и крупные .deb/.rpm |
LSUS_WAN_HOSTS_SHARE_PERCENT |
70 |
Доля канала сайта (Master↔Site), доступная хостам при обходе LAN. Закачка сайта берёт остаток, но не меньше 10%. Задаётся и в «Параметрах сервера»: изменённое значение уходит сайтам как умолчание, сайт может переопределить |
LSUS_REPLICA_POOL_WORKERS |
4 |
Потоков на отправку команд копий (1..8). Пул создаётся при старте службы репликации. На один сайт — одна копия; копия без движения закрывается через час |
LSUS_EDGE_CONVERT_DELETE_DELAY_SECONDS |
60 |
Пауза при преобразовании репозитория с Edge из копии в proxy: раздача уже переведена на Edge, копия на мастере ещё не удалена — за это время снимок раздачи и кеши подхватывают новый режим (0..600 с) |
LSUS_REPLICA_CONVERT_PAUSE_SECONDS |
30 |
То же для реплики на сайте при преобразовании из копии в прокси: пауза между переключением сайта на прокси и удалением копии на сайте (0..300 с) |
LSUS_DB_STARTUP_WAIT_SEC |
900 |
Сколько секунд при старте ждать, пока PostgreSQL снова принимает подключения (остановка или подъём базы). 0 — не ждать |
LSUS_REPLICA_MAX_ACTIVE |
32 |
Сколько копий репозиториев на сайты идут одновременно. Управляется и из UI («Параметры сервера») |
LSUS_REPLICA_SOURCE_SLOT_MASTER / _EDGE / _SITE |
8 / 8 / 8 |
Слоты источника: сколько копий и рассылок cab идут одновременно с мастера / одного Пограничного сервера / одного сайта. У сайта свой слот сильнее общего только для слота «сайт» |
LSUS_REPLICA_SCHEDULE_SPREAD_MINUTES |
10 |
Минуты, по которым расходятся копии одного срабатывания расписания (1–60). Это не сдвиг проверок Windows |
LSUS_REPLICA_EDGE_COPIES_PER_SITE |
1 |
Сколько копий один сайт берёт с одного Пограничного сервера одновременно (1–4). У ключа сайта на Edge по умолчанию четыре потока раздачи, и одна копия занимает их все: для N копий нужно 4×N потоков на ключ (настройка «Раздача сайтам» на самом Edge). Мастер делит лимит ключа поровну между копиями |
LSUS_REPLICA_EDGE_WAVE_SLOTS |
4 |
На сколько групп разнесён старт сайтов, берущих копию с Edge (1–16): группа сайта — его номер по модулю этого числа |
LSUS_REPLICA_EDGE_WAVE_STEP_SEC |
120 |
Пауза между группами старта, секунды (0–600). 0 — сайты стартуют одновременно |
LSUS_REPLICA_INBOUND_SLOTS |
4 |
Сколько копий сайт принимает одновременно, если в карточке сайта число не задано (1–8). Число, записанное в карточке сайта, сильнее параметра |
LSUS_SITE_API_CONNECT_TIMEOUT |
60 |
Сколько секунд мастер ждёт соединения с сайтом (1–120). Фоновые задания (сверка сайтов, команды копий, перенос раздачи) ждут не дольше 10 секунд независимо от значения: недоступный сайт не держит поток и соединение с БД |
LSUS_HEARTBEAT_EXTRAS_SYNC_SEC |
10 |
Сколько секунд мастер применяет хвосты heartbeat хостов за сайтом прямо в запросе сайта (0–120). Остальные применяются в фоне после ответа: сайт получает подтверждение быстрее своего таймаута в 30 секунд и не шлёт полный батч заново. 0 — всё в фоне |
LSUS_STALL_DUMP_SEC |
20 |
Если запрос интерфейса или API идёт дольше этого числа секунд, в журнал сервера один раз пишется стек потока и снимок активных сессий БД с блокировками (stalled_request). 0 — выключено |
LSUS_STALL_EXIT_SEC |
150 |
Если все потоки воркера веб-пула заняты запросами старше этого числа секунд (воркер принимает соединения, но не отвечает), сторож пишет stalled_worker_exit и завершает воркер, gunicorn поднимает новый. 0 — выключено |
LSUS_REPLICA_PARENT_WAIT_SEC |
3600 |
Сколько секунд копия ждёт готовности сайта-родителя (60–86400) |
LSUS_PEER_SERVE_KBPS |
пусто | Полоса раздачи потомкам, КБ/с. Пусто — 40% канала сайта или 16 МиБ/с. 0 — без лимита. Если пусто, учитывается LSUS_PEER_BYTES_PER_SEC |
LSUS_SCAN_NOW_SPREAD_MINUTES |
60 |
Сдвиг серверных проверок Windows после установки и по расписанию, минуты (разнос по хостам). 0 — без сдвига. Управляется и из UI |
LSUS_UPDATE_AGENT_SPREAD_MINUTES |
30 |
Окно размазки массового обновления клиента: без него весь парк качает пакет агента одновременно. 0 — прежнее поведение. На обновление одного хоста из админки не влияет |
LSUS_EDGE_PULL_PARALLEL |
2 |
Параллельность подтягивания файлов с Пограничного сервера (1..8) |
LSUS_WHO_SERVES |
master |
Режим раздачи хостам: master — с мастера; sites — хосты с сайтом берут со своего сайта |
LSUS_PEER_BYTES_PER_SEC |
0 |
Прежний потолок раздачи потомкам, байт/с. Учитывается, только если LSUS_PEER_SERVE_KBPS не задан. 0 — без лимита |
LSUS_EDGE_HASH_CACHE_ENTRIES / LSUS_EDGE_HASH_CACHE_MB |
8 / 256 |
Кеш индекса хешей зеркала Пограничного сервера в раздатчике: записей и бюджет памяти (МиБ) |
Master — опрос клиентов#
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_CLIENT_APT_CHECK_JITTER_MINUTES |
15 |
Разброс фоновой apt/dnf проверки у клиентов, минут. 0 — все хосты проверяют одновременно. На уже установленных системах значение в .env само не меняется — задайте 15 вручную, если там 0 |
LSUS_CLIENT_TESTING_POLL_INTERVAL_SECONDS |
300 |
Как часто клиент спрашивает назначения тестирования, если сессии есть |
Master — приоритетный хост пользователя#
Параметры страницы «Параметры» (Администрирование → Настройки), переопределяются
окружением. Технические интервалы — только окружение.
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_PRIMARY_HOST_AUTO |
1 |
Автоназначение по статистике. 0 — режим наблюдения: кандидаты считаются, но не назначаются |
LSUS_PRIMARY_HOST_WINDOW_DAYS |
30 (7–90) |
Окно статистики, как в SCCM |
LSUS_PRIMARY_HOST_MIN_DAYS |
5 (1–30) |
Минимум дней работы за хостом в окне |
LSUS_PRIMARY_HOST_MIN_HOURS |
16 (1–200) |
Минимум часов за окно |
LSUS_PRIMARY_HOST_DAY_MIN_MINUTES |
60 (10–480) |
День засчитывается от этого времени работы |
LSUS_PRIMARY_HOST_DAY_CAP_HOURS |
10 (1–24) |
Потолок часов в сутки (заблокированный на ночь сеанс не раздувает статистику) |
LSUS_PRIMARY_HOST_MAX_PER_USER |
1 (1–5) |
Сколько хостов могут быть приоритетными у человека |
LSUS_PRIMARY_HOST_SECONDARY_SHARE |
25 (5–50, %) |
Доля часов за окно, с которой второй и следующие хосты становятся приоритетными |
LSUS_PRIMARY_HOST_COMPARE_DAYS |
14 (3–60) |
Период сравнения часов претендента и текущего хоста |
LSUS_PRIMARY_HOST_SWITCH_RATIO |
1.5 (1.1–5) |
Перевес претендента для смены |
LSUS_PRIMARY_HOST_STALE_DAYS |
14 (1–180) |
Хост без связи дольше этого заменяется сразу, без перевеса |
LSUS_PRIMARY_HOST_EXPIRE_DAYS |
90 (0–730) |
Снятие без замены: столько хост не на связи или человек за ним не работал. 0 — не снимать |
LSUS_PRIMARY_HOST_MANUAL_YIELDS |
1 |
Ручное назначение тоже уступает недоступному хосту при наличии кандидата |
LSUS_PRIMARY_HOST_COUNT_RDP |
0 |
1 — RDP к рабочей станции считается работой (терминальные серверы всё равно исключены) |
LSUS_PRIMARY_HOST_COUNT_TTY |
0 |
1 — текстовая консоль Linux считается работой |
LSUS_PRIMARY_HOST_EXCLUDE_TAGS |
терминальный сервер |
Хосты с этими тегами не бывают приоритетными (через запятую) |
LSUS_PRIMARY_HOST_SKIP_SERVER_OS |
1 |
Windows Server и серверные коллекции не назначаются автоматически |
LSUS_PRIMARY_HOST_SHARED_USERS |
4 (0 — выключено) |
Общий хост: сколько людей за окно |
LSUS_PRIMARY_HOST_SHARED_DAYS |
3 |
Общий хост: дней работы каждого |
LSUS_PRIMARY_HOST_EXCLUDE_USERS |
administrator,администратор,root,guest,гость |
Glob-исключения логинов по части до @ |
LSUS_PRIMARY_HOST_SAMPLE_MINUTES |
10 |
Только окружение: интервал замера активных сессий, минут |
LSUS_PRIMARY_HOST_RECOMPUTE_MINUTES |
60 |
Только окружение: интервал пересчёта, минут |
LSUS_SCAVENGE_PRIMARY_HOST_HISTORY_RETENTION_DAYS |
365 |
Срок хранения истории изменений приоритетных хостов |
Master — обслуживание БД#
| Переменная | По умолчанию | Назначение |
|---|---|---|
LSUS_SCAVENGE_SYNC_EVENTS_STALE_SITE_DAYS |
7 |
Филиал без синка дольше этого срока не держит чистку журнала репликации |
LSUS_SCAVENGE_LOCAL_REPO_EVENTS_RETENTION_DAYS |
90 |
Срок хранения истории действий локальных репозиториев (промоуты со списками пакетов), дней |
LSUS_REPO_PROMOTE_HISTORY_LIST_LIMIT |
1000 |
Потолок имён пакетов в одной записи истории промоута (на категорию). Первый состав ветки — только счётчик и выборка |
LSUS_RETENTION_MAX_ROUNDS |
2000 |
Страховочный потолок чанков за прогон суточной чистки журнала репликации и команд |
LSUS_RETENTION_DEADLINE_SEC |
180 |
Максимум секунд на один прогон суточной чистки (основной ограничитель, не число чанков) |
LSUS_TRACE_LOCAL_REPO_PACKAGES |
0 |
Диагностика: писать стек в лог при каждом чтении каталога пакетов (1 — только на стенде) |
Site#
| Переменная | По умолчанию | Назначение |
|---|---|---|
SITE_PORT |
443 |
Внешний HTTPS-порт |
SITE_HOSTNAME |
lsus-site |
FQDN/имя хоста Site |
LSUS_MASTER_URL |
https://localhost:443 |
URL Master для регистрации/синхронизации |
LSUS_SITE_API_KEY |
— | API-ключ Site для авторизации на Master |
LSUS_SITE_ADMIN_PASSWORD |
!LsusAdminSite2026@ |
Дефолтный пароль admin при первом старте |
Edge#
| Переменная | По умолчанию | Назначение |
|---|---|---|
EDGE_PORT |
443 |
Внешний HTTPS-порт (единый) |
LSUS_SCHEDULE_TIMEZONE |
пусто = UTC |
IANA-пояс cron зеркал и загрузок. Часы в формах («02:00») — настенные в этом поясе. Задаётся и в UI: Настройки → Сервер |
EDGE_UI_PASSWORD |
!LsusAdminEdge2026@ |
Дефолтный пароль пользователя admin веб-интерфейса Edge при первом старте |
EDGE_AV_ENABLED |
false |
Антивирусная проверка файлов |
EDGE_DB_NAME |
lsus_edge |
Имя БД Edge |
EDGE_DB_USER |
lsus_edge |
Пользователь БД Edge |
EDGE_EXPORT_DIR |
./data/edge/export |
Каталог хоста, который монтируется в контейнер Edge как флешка/drop-folder шаттла |
LSUS_EDGE_EXPORT_DIR |
/var/lib/lsus-edge/export |
Путь внутри контейнера Edge к тому экспорта |
Файловый шаттл (закрытый контур)#
Когда интернет-Edge нельзя стыковать с Master по IP, данные едут каталогом-бандлом (флешка, SMB или SFTP). Контейнеры сами ничего не монтируют: флешку или шару на хосте указывает администратор. Master не ходит на Edge ни по одному протоколу.
| Переменная | По умолчанию | Назначение |
|---|---|---|
SHUTTLE_DIR |
./data/master/shuttle |
Каталог хоста Master под флешку/drop-folder (том у lsus-master, worker и replication) |
LSUS_SHUTTLE_DIR |
/mnt/lsus-shuttle |
Путь внутри контейнеров Master |
LSUS_SHUTTLE_POLL_SECONDS |
900 |
Как часто Master смотрит только manifest.json в источниках (новый бандл → уведомление) |
LSUS_SHUTTLE_WSUSSCN2_STALE_DAYS |
35 |
Через сколько дней без нового бандла предупреждать «Устарел wsusscn2.cab» (каталог выходит примерно раз в месяц — 35 = месяц + запас) |
Новые исходящие порты внутри контура Master (не до Edge): SMB 445/tcp и SFTP 22/tcp — только если источник шаттла на файловом перекладчике. Site и PXE не участвуют.
PXE#
Роль exclusive: свой хост, без PostgreSQL. ISO только на точке. Secure Boot в MVP выключен (iPXE).
| Переменная | По умолчанию | Назначение |
|---|---|---|
PXE_PORT |
443 |
Внешний HTTPS (upload ISO, API точки) |
PXE_HTTP_PORT |
80 |
Plain HTTP boot-артефактов |
LSUS_PXE_INTERNAL_PORT |
18550 |
Loopback приложения за nginx |
LSUS_MASTER_URL |
— | URL Master для регистрации точки |
LSUS_PXE_REGISTRATION_KEY |
— | Одноразовый ключ регистрации (как у Site) |
LSUS_PXE_INTERFACES |
(авто) | Интерфейсы dnsmasq через запятую |
LSUS_PXE_BIND_INTERFACES |
1 |
bind-interfaces, чтобы не занимать UDP 67 на всех адресах |
AI-стек (Ollama)#
Переменные задаются в файле ollama.env (каталог /opt/lsus-docker/).
| Переменная | По умолчанию | Назначение |
|---|---|---|
OLLAMA_HOST |
0.0.0.0:11434 |
Адрес и порт API Ollama |
OLLAMA_ORIGINS |
* |
Разрешённые источники (CORS) |
OLLAMA_MAX_LOADED_MODELS |
2 |
Сколько моделей держать в памяти одновременно |
OLLAMA_NUM_PARALLEL |
2 |
Число параллельных запросов инференса |
Модели загружаются через UI Master (импорт .tar.gz) или docker exec lsus-ollama ollama pull <tag>. Для GPU добавьте override docker-compose.gpu.yml (требуется nvidia-container-toolkit).
AI-стек (OpenClaw)#
Переменные задаются в файле openclaw.env (каталог /opt/lsus-docker/).
| Переменная | По умолчанию | Назначение |
|---|---|---|
OPENCLAW_OLLAMA_BASE_URL |
http://127.0.0.1:11434 |
URL Ollama (LLM-движок, по умолчанию локальный) |
OLLAMA_API_KEY |
ollama-local |
API-ключ к Ollama |
OPENCLAW_GATEWAY_PORT |
18789 |
Порт OpenAI-совместимого шлюза OpenClaw |
OPENCLAW_GATEWAY_TOKEN |
(генерируется) | Токен шлюза (при первой установке — openssl rand) |
OPENCLAW_BIND |
lan |
Привязка сетевого интерфейса |
LSUS_API_URL |
https://localhost:8443 |
URL Master (Machine API для навыков агента) |
LSUS_MACHINE_TOKEN |
— | Токен Machine API (выдаётся в UI Master) |
Связь компонентов AI-стека
OpenClaw обращается к Ollama через OPENCLAW_OLLAMA_BASE_URL (по умолчанию локальный 11434), а к Master — через LSUS_API_URL. Master, в свою очередь, вызывает шлюз OpenClaw на порту 18789. Все используют network_mode: host, поэтому могут ссылаться на 127.0.0.1 при размещении на одном хосте.
Базы данных по ролям#
При установке нескольких ролей на разные хосты каждая использует свою БД. При совмещении (не рекомендуется) — разные БД/пользователи в одном PostgreSQL:
| Роль | БД | Пользователь |
|---|---|---|
| Master | lsus |
lsus |
| Site | lsus_site |
lsus_site |
| Edge | lsus_edge |
lsus_edge |
Пароли БД генерируются случайным образом при первой установке и сохраняются в файл credentials-<роль>.txt рядом с .env.
Health-эндпоинты#
Для проверки работоспособности роли используется HTTPS-запрос (примеры ниже — для дефолтного порта 443; при нестандартном порте добавьте :<порт> после хоста):
Master и Site#
curl -k https://master.example.com/api/v1/health
Ожидаемый ответ (HTTP 200):
{"status": "ok", "role": "master"}
Для Site — "role": "site" (или "standalone", если роль не задана явно).
Edge#
curl -k https://edge.example.com/api/v1/health
Ожидаемый ответ (HTTP 200):
{"status": "ok", "role": "edge"}
PXE#
curl -k https://pxe.example.com/api/v1/health
Ожидаемый ответ (HTTP 200):
{"status": "ok", "role": "pxe"}
Boot-плоскость (без TLS):
curl -s http://pxe.example.com/pxe/boot.ipxe | head
Диагностический эндпоинт (с версией сервера)#
Отдельный эндпоинт для клиентской диагностики, без аутентификации:
curl -k https://master.example.com/api/v1/clients/health
Ответ (HTTP 200):
{
"status": "ok",
"server_version": "1.0.67",
"time": "2026-06-16T12:00:00.000Z"
}
Что считать успехом
HTTP 200 и "status": "ok" — сервер жив. Роль в ответе позволяет убедиться, что запрос пришёл именно туда, куда ожидается. Если curl висит — проверьте firewall и порт; если connection refused — контейнер nginx/app не поднялся (см. docker compose ps).
Структура каталогов данных#
При установке через пакеты ОС DATA_DIR=/opt/lsus-docker/data. Дерево по ролям:
/opt/lsus-docker/data/
├── postgres/ # данные PostgreSQL (все роли)
├── master/
│ ├── repos/ # зеркала репозиториев
│ ├── kb-cache/ # кеш баз KB Windows
│ ├── kb-storages/ # KB-хранилища (MSU) + артефакты агента
│ ├── config-files/ # файлы для политик «Файл» конфигураций
│ ├── patches/ # каталоги патчей (staged/enabled/backup)
│ ├── data/ # app-data (сертификаты, server_settings.env)
│ └── log/ # журналы приложения и nginx
├── site/
│ ├── repos/
│ ├── data/
│ └── log/
└── edge/
├── storage/ # хранилище файлов/зеркала
├── data/
└── log/
└── ai/
├── ollama/ # модели и состояние Ollama
└── openclaw/ # конфигурация и workspace OpenClaw
DATA_DIR — корень всех данных роли, включая postgres/, сертификаты и журналы. Чтобы вынести только repos/kb-cache/storage на отдельный диск, смонтируйте его в соответствующий подкаталог DATA_DIR; смена всего DATA_DIR переносит и базу данных — оба сценария и порядок шагов описаны в разделе Вынос данных на отдельный диск.
Раздача с сайта (1.0.122)#
| Переменная | Где | Значение |
|---|---|---|
LSUS_WHO_SERVES |
мастер | master / sites / sites_only — кто раздаёт файлы хостам; sites_only — мастер файлы не хранит. |
LSUS_DEFAULT_SITE_ID |
мастер | Номер выбранного сервера: он первым раздаёт файлы хостам без сайта, затем остальные серверы его площадки. Пусто — мастер, пока он хранит файлы. В окне правки сервер выбирается из списка |
LSUS_SITE_KB_NEEDED_RETENTION_DAYS |
мастер | Срок хранения MSU «только необходимое» на сайте. |
serve_slots / inbound_slots / peer_serve_kbps |
окно сайта | Слоты раздачи потомкам, входящих копий и полоса раздачи. |
SITE_SHUTTLE_DIR |
docker-compose сайта | Каталог носителя рейса шаттла на машине сайта приёма. |