Перейти к основному содержимому

Переменные окружения

Актуально для: SimpleTwo 0.9.x · Проверено: 26.09.2026

Страница собирается из кода

Имена и значения по умолчанию берутся из тех же файлов, что читают сами службы (site/docs-gen/env-variables.py). Поэтому список полон по построению: переменная, которой здесь нет, не читается ни одной службой.

Обычно эти значения задаёт координатор, когда ставит роль: он же пишет файл службы и подставляет туда параметры. Справочник нужен в двух случаях — когда разбираетесь, почему служба ведёт себя не так, и когда ставите её руками.

1. Координатор​

Координатор ведёт реестр своих переменных, и у каждой записано, что стоит её изменение:

КлассЧто значит
restartзначение читается один раз при старте; правка в окружении работающего процесса не делает ничего
hotперечитывается на ходу

Имя не из реестра координатор не считает ошибкой: он пишет предупреждение и продолжает работать. Это решение, купленное простоем: первая версия реестра отказывалась стартовать при незнакомой переменной, и установка встала из-за переменной, которую сама же и поставляла в образе. То, что выполняется раньше службы, не должно уметь её останавливать.

ПеременнаяТипПрименениеЧто делает
ST_ADDRstringrestartадрес и порт HTTP-слушателя: проверка владения именем (ACME HTTP-01) и перенаправление на HTTPS
ST_HTTPS_ADDRstringrestartадрес и порт HTTPS-слушателя; пусто — HTTPS выключен
ST_TOKEN_TTLdurationrestartсрок жизни сессионного токена. Держится коротким: отзыв здесь — это истечение
ST_REFRESH_TTLdurationrestartсрок жизни токена обновления; длинный, но отзывается на сервере
ST_GATEWAY_TTLdurationrestartсколько может не приходить пульс от VPN-узла, прежде чем он считается устаревшим
ST_TRUSTED_PROXIEScsvrestartсети, чьему заголовку X-Forwarded-For можно верить; пусто — заголовок игнорируется
ST_ACME_STAGINGboolrestartвыпускать сертификаты в тестовом контуре Let's Encrypt вместо боевого
ST_TLS_DOMAINstringrestartимя, на которое координатор заказывает сертификат Let's Encrypt; пусто — самоподписанный
ST_TLS_EMAILstringrestartпочта для уведомлений удостоверяющего центра; необязательна
ST_AGENT_BIN_DIRpathrestartкаталог со сборками агента под разные платформы: их координатор раздаёт узлам при установке ролей
ST_DEPLOY_DRYRUNboolrestartпечатать команды установки вместо их выполнения. Значение разбирается строго: False и Off — это ложь, а не мусор, но опечатка отвергается с ошибкой, а не превращается в «включено»
ST_DB_PATHpathrestartпуть к базе координатора (SQLite); пусто — временное хранилище в памяти, то есть стенд
ST_KEYSTORE_PATHpathrestartфайл с мастер-ключом шифрования. Именно путь, и никогда сам ключ: ключ в переменной окружения — это ключ в журнале. Файл должен лежать вне каталога данных, иначе резервная копия данных увезёт с собой и ключ от них
ST_VERSIONstringrestartверсия сборки; подставляется образом, руками не задаётся
ST_TOKEN_SECRET 🔒stringrestartсекрет подписи токенов; общий для координатора и продуктовых служб

2. Служба переписки​

ПеременнаяПо умолчаниюЧто делает
MSG_ACME_CACHE/var/lib/simpletwo/msg-acmeкаталог, где хранится выписанный сертификат
MSG_ACME_EMAIL—почта для уведомлений удостоверяющего центра; необязательна
MSG_ACME_STAGING0тестовый контур Let's Encrypt вместо боевого
MSG_ADDR:9090адрес и порт, на котором служба принимает клиентов
MSG_AI_PROVIDER_KEY_FILE—путь к файлу с ключом провайдера модели. Только файл: значение в окружении попадает в журналы
MSG_AI_PROVIDER_KINDanthropicдиалект провайдера модели: anthropic или openai-совместимый
MSG_AI_PROVIDER_URL—адрес провайдера модели; по умолчанию зависит от диалекта
MSG_CONTROL_ADDR127.0.0.1:9091адрес управляющего интерфейса. По умолчанию только петля: наружу он не смотрит
MSG_CONTROL_TOKEN 🔒—токен управляющего интерфейса; подставляет координатор
MSG_CONVLOG_KEEP10000сколько ревизий журнала беседы хранить
MSG_COORDINATOR_CERT_SHA256—отпечаток сертификата координатора (пин); защищает от подмены
MSG_COORDINATOR_INSECUREfalseне проверять сертификат координатора. Только для стенда
MSG_COORDINATOR_URL—адрес координатора
MSG_DB_DSN—строка подключения к Postgres. Пусто — хранилище в памяти, то есть стенд
MSG_DEPROVISION_RETENTION_DAYS30сколько дней хранятся данные человека, у которого в identity сняли чат и звонки: он сразу отключён (вход закрыт, соединения и пуши остановлены), данные затем удаляются. 0 — удалить при следующем проходе; отсчёт идёт, только пока в identity включено назначение доступа
MSG_DIRECTORY_SOURCE—не читается с messaging 0.199.0: люди и группы — всегда из ленты каталога, когда задан MSG_IDENTITY_URL, права людей — из живой проекции RBAC. Агент координатора 0.x ещё ставит переменную по переключателю консоли
MSG_DOMAIN—собственный домен установки для федерации; пусто — федерация выключена
MSG_FEDERATION_ALLOW—домены установок, с которыми разрешён обмен, через запятую
MSG_IDENTITY_URL—приватный адрес identity: служба читает ленту назначений функции «чат и звонки» и сообщает, что создала или удалила. Пусто — назначения не читаются: пускают всех, никого не отключают
MSG_LIVEKIT_KEY—ключ медиасервера — им подписываются пропуска в комнату
MSG_LIVEKIT_SECRET 🔒—секрет медиасервера
MSG_MAX_MEMBERS10000предел числа участников одной беседы
MSG_MAX_UPLOAD_MB50предел размера одного вложения, мегабайты
MSG_MEDIA_DIR/var/lib/simpletwo/mediaкаталог вложений, когда они лежат на диске, а не в объектном хранилище
MSG_PRESENCE_GRACE_SEC45сколько секунд человек считается в сети после обрыва последнего соединения
MSG_PSTN_CDR_RETENTION_DAYS0сколько дней хранить записи о телефонных звонках (CDR) после их окончания; 0 — по умолчанию, 395 дней
MSG_REDIS_ADDR—адрес шины; нужен для пула SFU, телефонии и нескольких реплик
MSG_REDIS_DB0номер базы Redis
MSG_REDIS_PASSWORD 🔒—пароль шины
MSG_RETENTION_DAYS0срок хранения сообщений в днях; 0 — не удалять
MSG_S3_ACCESS_KEY 🔒—ключ доступа к объектному хранилищу
MSG_S3_BUCKET—бакет для вложений
MSG_S3_ENDPOINT—адрес объектного хранилища
MSG_S3_PREFIX—префикс ключей внутри бакета
MSG_S3_REGION—регион объектного хранилища
MSG_S3_SECRET 🔒—секрет доступа к объектному хранилищу
MSG_SFU_POOL_PATH/var/lib/simpletwo-messaging/sfu-pool.jsonфайл со снимком пула SFU
MSG_TLS_ADDR:443адрес HTTPS-слушателя, когда служба сама терминирует TLS
MSG_TLS_HOST—публичное имя службы; оно же имя в сертификате
MSG_TURN_HOST—имя сервера TURN, выдаваемое клиентам
MSG_TURN_SECRET 🔒—общий секрет TURN, из которого считаются временные учётные данные

3. Служба directory — каталог и вход​

ПеременнаяПо умолчаниюЧто делает
DIR_ACME_CACHE/var/lib/simpletwo/identity-acmeкаталог кеша сертификатов: без него сертификат перевыпускается на каждом старте и упирается в лимит удостоверяющего центра
DIR_ACME_EMAIL—почта для уведомлений удостоверяющего центра; необязательна
DIR_ACME_STAGING0тестовый контур Let's Encrypt вместо боевого
DIR_ADDR:8086адрес и порт приватного HTTP — через него координатор пишет в identity
DIR_ALLOWED_ORIGINS—источники браузера, кроме адреса координатора, которым разрешено читать адресную книгу каталога (/v1/directory/*): через запятую, точно scheme://host[:port]. Нужно, если веб-клиент встроен в страницу другого сайта. Пусто — только адрес координатора
DIR_APNS_KEY_ID—идентификатор ключа APNs
DIR_APNS_KEY_P8_FILE—путь к файлу ключа APNs (.p8) подсистемы notify — пуши iPhone и Mac; агент пишет файл из настроек координатора
DIR_APNS_SANDBOX0отправлять пуши в песочницу Apple вместо боевого контура (сборки из Xcode)
DIR_APNS_TEAM_ID—идентификатор команды Apple Developer
DIR_APNS_TOPIC—VoIP-topic приложения iPhone (bundle id + «.voip»); topic уведомлений — тот же id без суффикса
DIR_APNS_TOPIC_MACOS—bundle id приложения macOS — отдельный topic; пусто — на Mac пуши не уходят
DIR_AUDIT_ALARM_BYTES1073741824размер журнала событий безопасности, при котором /healthz поднимает тревогу о месте; по умолчанию 1 ГиБ
DIR_BREACH_LIST—файл SHA-1 утёкших паролей (выгрузка Pwned Passwords): ищется на диске, в память не грузится. Пусто — только встроенный список частых паролей; сторонние сервисы не вызываются
DIR_COORDINATOR_CERT_SHA256—отпечаток SHA-256 самоподписанного сертификата координатора
DIR_COORDINATOR_INSECURE0доверять самоподписанному сертификату координатора; только вместе с DIR_COORDINATOR_CERT_SHA256
DIR_COORDINATOR_URL—адрес координатора, у которого служба берёт ключ для секретов интеграций. Пусто — ключа нет: секреты остаются как есть, а /healthz показывает "secrets_sealed": false
DIR_DATA_DIR/var/lib/simpletwo/directoryкаталог файлов хранилища на хосте роли: directory.db, notify.db, calendar.db (встроенный SQLite). Пусто — служба не стартует: каталогу без хранилища некуда положить группу
DIR_EXPECTED_SHA256—хеш бинаря, который выдал координатор и проверил агент. Задан — служба на старте хеширует себя и не запускается при несовпадении; пусто — только показывает хеш в /healthz
DIR_FCM_SA_JSON_FILE—путь к файлу сервисной учётной записи Firebase подсистемы notify (пуши Android)
DIR_MAIL_URL—приватный адрес узла почты: через его служебную дверь уходят коды для входа на подтверждённый внешний адрес человека. Координатор пишет его, когда в установке есть почтовый узел; пусто — кодов по почте нет, и переключатель политики их не включает
DIR_PLATFORM—платформа этого каталога (simpletwo, simplezero, simplethree): префикс его расширения схемы — x-<платформа>-… в LDAP и urn:ietf:params:scim:schemas:extension:<платформа>:2.0:User в SCIM, под которым сеется его каталог и куда попадает новый атрибут. Пусто — simpletwo
DIR_PLATFORM_ISSUER—имя эмитента токенов платформы в этой установке — публичный адрес первичного каталога, тот же, что координатор выдаёт проверяющим службам; реплика подписывает токены своими ключами под этим именем, а каждый экземпляр публикует в /oauth/jwks ключи всех экземпляров. Задаёт координатор; пусто — собственный адрес экземпляра
DIR_PROFILES—слои роли на этом хосте, через запятую: base (хранилище линейки: учётки, группы, объекты установки, схема, минимальный вход, SCIM), simpletwo (расширение SimpleTwo: адресные книги и GAL, алиасы, руки переговорных, гости, боты, переезд, доступ к продуктам), calendar. Пусто — все три; base включён всегда; незнакомое имя — отказ при старте
DIR_PUBLIC_URL—адрес службы, как его видят клиенты; координатор публикует его как identity_url
DIR_REPLICATION_PEERS—другие экземпляры каталога этой установки — их SCIM-базы (https://<имя>/scim/v2) через запятую; каталог читает ленту каждого раз в минуту и применяет записи по правилу версий (мульти-мастер). Список задаёт координатор; пусто — партнёров нет
DIR_REPLICATION_ROLE—положение этого экземпляра среди партнёров: executor — исполняет исходящие задания (SCIM-цели, SIEM, HRMS, вышестоящий LDAP, метаданные SAML), replica — не исполняет; серверные двери (LDAP, OIDC/SAML, SCIM, вход) у каждого экземпляра. Пусто — координатор репликацией не управляет, настройки берутся из базы
DIR_SCHEMA_MASTER—origin экземпляра, у которого меняется схема (https://<имя>): здесь двери схемы отвечают 307 на него. Пусто — схема меняется у этого экземпляра
DIR_TLS_ADDR:443адрес HTTPS-слушателя
DIR_TLS_HOST—публичное имя службы. Задано — HTTPS с собственным сертификатом для входа, портала и консоли; пусто — только приватный HTTP
DIR_TOKEN_TTL12hсрок жизни сессии, которую служба продлевает сама; держится равным сроку координатора

4. Служба directory — календарная половина​

ПеременнаяПо умолчаниюЧто делает
DIR_CAL_ADDR:8085адрес и порт службы календарей
DIR_CAL_CALDAV_ENABLED0разрешить полный доступ по CalDAV; по умолчанию выключено
DIR_CAL_COORDINATOR_CERT_SHA256—отпечаток SHA-256 самоподписанного сертификата координатора
DIR_CAL_COORDINATOR_INSECURE0доверять самоподписанному сертификату координатора; только вместе с DIR_CAL_COORDINATOR_CERT_SHA256
DIR_CAL_COORDINATOR_URL—адрес координатора, у которого служба берёт ключ для адресных книг. Пусто — ключа нет: контакты хранятся открыто, а /healthz показывает "books_sealed": false
DIR_CAL_DAV_AUTH—чем человек входит в CalDAV и CardDAV: calendar (по умолчанию) — паролем устройства календаря или паролем приложения identity с областью caldav/carddav; identity — только паролем приложения identity, пароли устройств получают отказ и больше не выдаются. Пишет агент из переключателя dav_auth координатора; identity без DIR_CAL_DIRECTORY_URL и любое другое значение — служба не стартует
DIR_CAL_DB_PATH—файл календаря; по умолчанию calendar.db в каталоге DIR_DATA_DIR
DIR_CAL_DEFAULT_TZUTCчасовой пояс по умолчанию
DIR_CAL_DEPROVISION_RETENTION_DAYS—сколько дней хранятся календари и книги человека, которого удалили или у которого отозвали календарь (шаги задач координатора): доступ закрыт сразу, данные затем удаляются. 0 — удалить при следующем проходе
DIR_CAL_DIRECTORY_URL—приватный адрес identity: служба проверяет там пароли приложений (CalDAV/CardDAV). По умолчанию — свой же приватный адрес directory. Ленту назначений с directory 0.58.0 не читает
DIR_CAL_MEET_URL—адрес, от которого строится гостевая ссылка на встречу (хост координатора). Пусто — ссылка не выдаётся вовсе
DIR_CAL_PUBLIC_URL—адрес, от которого строятся ссылки подписки; по умолчанию https://<DIR_TLS_HOST>/cal — календарь отвечает под /cal на имени directory. За прокси задаётся обязательно, иначе подписка не обновляется
DIR_CAL_S3_ACCESS_KEY—ключ доступа к объектному хранилищу вложений
DIR_CAL_S3_BUCKETsimpletwo-calendarбакет вложений календаря; по умолчанию simpletwo-calendar
DIR_CAL_S3_ENDPOINT—адрес объектного хранилища для вложений календаря; пусто — вложения выключены, служба говорит об этом в /healthz
DIR_CAL_S3_REGION—регион объектного хранилища вложений
DIR_CAL_S3_SECRET—секрет доступа к объектному хранилищу вложений
DIR_CAL_SERIES_CAP_YEARS—на сколько лет вперёд разворачивается повторяющаяся серия
DIR_CAL_SERVICE_KEY_DIR—каталог собственного ключа календарной половины для служебных токенов в режиме keys (подписывает как svc:calendar); пусто — общий ST_SERVICE_KEY_DIR. Пишет агент
DIR_CAL_TOKEN_TTL—срок жизни токена службы
DIR_CAL_WORK_DAYS1,2,3,4,5рабочие дни организации (1 — понедельник), через запятую
DIR_CAL_WORK_END18:00конец рабочего дня
DIR_CAL_WORK_START09:00начало рабочего дня
ST_SERVICE_KEY_DIR—каталог ключа этого хоста (current.json, next.json, previous.json) и закреплённой копии реестра ключей всех служб (registry.json). Ключ создаёт и ротирует агент на самом хосте и регистрирует у координатора; с хоста ключ не уходит. В режиме keys без ключа служба не стартует

5. Почта — роли mail и mx​

ПеременнаяПо умолчаниюЧто делает
MAIL_ACME_CACHE/var/lib/simpletwo/mail-acmeкаталог кеша сертификатов: без него сертификат перевыпускается на каждом старте
MAIL_ACME_EMAIL—почта для уведомлений удостоверяющего центра; необязательна
MAIL_ACME_STAGING0тестовый контур Let's Encrypt вместо боевого
MAIL_ADDR:8087адрес и порт HTTP: JMAP, push, /healthz, внутренний API
MAIL_AUDITsharedжурнал доступа к ящикам: off, shared (общие ящики — по умолчанию) или all
MAIL_CALENDAR_URL—адрес ленты приглашений календаря: каждое приглашение человеку с ящиком здесь приходит письмом
MAIL_COORDINATOR_CERT_SHA256—отпечаток SHA-256 самоподписанного сертификата координатора
MAIL_COORDINATOR_INSECUREfalseдоверять самоподписанному сертификату координатора; только вместе с MAIL_COORDINATOR_CERT_SHA256
MAIL_COORDINATOR_URL—адрес координатора, у которого служба берёт ключи шифрования. Пусто — ключ не получить: допустимо, только пока шифрование выключено
MAIL_DB_DSN—строка подключения к Postgres — оба хоста пары с target_session_attrs=read-write. Пусто — хранилище в памяти, то есть стенд
MAIL_DIRECTORY_SOURCE—не читается с mail 0.92.0: люди и группы — только из каталога (MAIL_IDENTITY_URL). Агент координатора 0.x ещё ставит переменную
MAIL_DMARC_ORG—имя организации в отчётах DMARC (по умолчанию — первый почтовый домен)
MAIL_DMARC_REPORTStrueотправлять ли сводные отчёты DMARC доменам, которые их запрашивают (rua): раз в сутки, по одному на домен (включено; off — не отправлять)
MAIL_DOMAINS—почтовые домены через запятую для первого старта: из них один раз заполняется список принимаемых доменов (первый — основной); дальше список ведётся в консоли, в карточке «Домены», а переменная не читается
MAIL_IDENTITY_CERT_SHA256—отпечаток SHA-256 самоподписанного сертификата identity
MAIL_IDENTITY_INSECUREfalseдоверять самоподписанному сертификату identity; только вместе с MAIL_IDENTITY_CERT_SHA256
MAIL_IDENTITY_URL—адрес identity: люди с адресами, группы с адресом, отправителями и участниками
MAIL_INTERNAL_TOKEN 🔒—токен, которым mx входит во внутренний API
MAIL_LMTP_ADDR:24где mx сдаёт почту по LMTP; отвечает только узлам mx и своему хосту. off — выключено
MAIL_MDNoffуведомления о прочтении: off, internal (только внутри организации) или all
MAIL_MX_NODES—узлы mx, через которые уходит исходящая почта: host:port через запятую, по кругу
MAIL_QUARANTINE_DAYS30сколько дней хранится задержанное письмо (карантин фильтров и антивируса), потом удаляется без уведомления (30; 0 — хранить, пока администратор не решит)
MAIL_RECALL_ALLOW_READfalseразрешать отзыв письма, которое уже прочитали
MAIL_RECALL_MAX_AGE0насколько старое письмо можно отозвать; 0 — без ограничения
MAIL_S3_ACCESS_KEY 🔒—ключ доступа к объектному хранилищу
MAIL_S3_BUCKETsimpletwo-mailбакет для почты
MAIL_S3_ENDPOINTS—объектное хранилище: primary=https://…;secondary=https://…, в этой версии используется первое. Пусто — хранилище в памяти, только для разработки
MAIL_S3_PREFIX—префикс ключей внутри бакета
MAIL_S3_REGION—регион объектного хранилища
MAIL_S3_SECRET 🔒—секрет доступа к объектному хранилищу
MAIL_TLSRPT_ORG—имя организации в отчётах TLS-RPT (по умолчанию — MAIL_DMARC_ORG, а без него первый почтовый домен)
MAIL_TLSRPT_REPORTStrueотправлять ли отчёты TLS-RPT (RFC 8460) доменам, которые их запрашивают записью _smtp._tls: раз в сутки, по одному на домен, на адреса mailto: (включено; off — не отправлять)
MAIL_TLS_ADDR:443адрес HTTPS-слушателя
MAIL_TLS_HOST—публичное имя, на котором служба отвечает по JMAP. Задано — HTTPS с собственным сертификатом, а координатор публикует mail_url, когда имя ответит
MAIL_TOKEN_TTL12hсрок жизни сессии, которую служба продлевает сама
MX_ADDR127.0.0.1:8088адрес служебного слушателя mx (здоровье); никогда не публичный
MX_ARC_TRUSTED—запечатыватели ARC (RFC 8617), которым доверяет локальная политика, — домены через запятую, каждый вместе с поддоменами (lists.example,google.com); пусто (по умолчанию) — никому. Письмо, не прошедшее DMARC при p=reject или p=quarantine, доставляется как обычное, только если цепочка ARC проходит проверку, все её запечатыватели от последнего до поручившегося — из списка и поручившийся у себя увидел DMARC пройденным для этого From:; в Authentication-Results — dmarc=fail с причиной, в агрегатном отчёте — local_policy. Цепочка проверяется и записывается (arc=) всегда, копии групп внешним участникам запечатываются всегда — от этой переменной не зависит
MX_DEVICES—коннекторы для машин без AUTH (МФУ, ERP, мониторинг), JSON-список: name, networks (CIDR или адреса), senders (адреса или @домен из локальных), relay (local/any), rate (писем в минуту с адреса, 60), max_size, tls (optional/require); узнаются на двери :25 по сети источника; ошибка в списке останавливает службу
MX_DKIM_DIR/etc/simpletwo/mx-dkimкаталог ключей DKIM: <домен>/<селектор>.pem, PKCS#8 или PKCS#1, только владельцу; подписывает каждый ключ домена From: (или его родителя); пусто — письма уходят без подписи, и /healthz это показывает
MX_DNSBL_ZONESzen.spamhaus.orgDNS-списки блокировки (RFC 5782), по которым проверяется каждый клиент двери :25, через запятую (`zone=127.0.0.2
MX_DNSWL_ZONES—DNS-списки разрешения: адрес из них не проверяется по спискам блокировки (пусто — нет)
MX_FILTERS—фильтры содержимого почты из интернета — JSON-список [{"name":"rspamd","transport":"milter","address":"inet:127.0.0.1:11332","on_error":"open"}, {"name":"av","transport":"icap","address":"icap://av:1344/respmod","on_error":"closed"}] (пусто — без фильтров); транспорт — milter или icap; on_error — open (без фильтра дальше) или closed (отправителю 451), timeout 30s, eom_timeout 300s; spam_signal у milter — заголовки, по которым письмо уходит в «Спам»; verdict у ICAP — чем антивирус сообщает о находке (headers, header_patterns, on_modified_body, status_codes); on_virus — quarantine (у ICAP по умолчанию: письмо задерживается, отправителю 250) или reject (отправителю 550); milter считается антивирусом, только если on_virus задан; неверный список останавливает службу
MX_FILTERS_FILE—файл с тем же JSON-списком, что MX_FILTERS; если задан, MX_FILTERS не читается, а файл, который не читается, останавливает службу. Так список передаёт агент: регулярные выражения с \ переменная окружения systemd не переносит
MX_FILTER_QUARANTINEheldчто делает карантин фильтра: held (по умолчанию) — письмо задерживается на кластере mail до решения администратора (консоль, «Почта → Карантин»), получатели получают уведомление; junk — письмо в «Спам». Находка антивируса задерживается всегда
MX_HOSTNAME—имя края в EHLO и Received; по умолчанию — имя хоста
MX_INBOUND_AUTHonпроверка SPF, DKIM и DMARC почты из интернета (on по умолчанию; off — без проверок): итог — в Authentication-Results, при p=reject — отказ на DATA, при p=quarantine — в «Спам»
MX_INTERNAL_TOKEN 🔒—токен, который почтовый кластер выдал этому краю
MX_MAIL_API—базовые адреса внутреннего API узлов почты через запятую; пусто — узлы из MX_MAIL_NODES на порту MX_MAIL_API_PORT
MX_MAIL_API_PORT8087порт HTTP почтовой роли для внутреннего API, когда MX_MAIL_API не задан (8087)
MX_MAIL_NODES—узлы почтового кластера для LMTP и внутреннего API: host:port через запятую
MX_MAX_CONNECTIONS500сколько соединений на :25 узел держит одновременно; следующему — 421 (0 — без предела)
MX_MAX_CONNECTIONS_PER_IP20сколько соединений на :25 одновременно с одного адреса; следующему — 421 (0 — без предела); сети коннекторов устройств не считаются
MX_MAX_MESSAGE_BYTES52428800самое большое письмо, которое берёт дверь MX, в байтах (50 МиБ)
MX_RELAY_ADDR:2525дверь для исходящей почты кластера mail (:2525; off — нет): отвечает только адресам из MX_MAIL_NODES, с сертификатом требует STARTTLS
MX_SMARTHOST—куда отдавать всю исходящую почту вместо MX получателей (host:port через запятую); пусто — доставка по MX
MX_SMTP_ADDR:25публичная дверь MX (:25); off — не слушать
MX_SPOOL_DIR/var/lib/simpletwo/mx/spoolкаталог очереди на диске; доступен только владельцу — это почта в пути, в открытом виде
MX_SUBMISSION_MAX_CONNECTIONS0сколько соединений на порты отправки 587 и 465 вместе узел держит одновременно, отдельно от :25; следующему на 587 — 421, на 465 соединение закрывается, и отказ попадает в журнал отказов отправки (0, по умолчанию, — без предела); сети коннекторов устройств не считаются
MX_SUBMISSION_MAX_CONNECTIONS_PER_IP0сколько соединений на 587 и 465 вместе одновременно с одного адреса (IPv6 — с одной сети /64); следующему — как у MX_SUBMISSION_MAX_CONNECTIONS (0, по умолчанию, — без предела). Все, кто за одним NAT, — один адрес: офис, отправляющий через один публичный адрес, делит этот предел
MX_SUBMIT_ADDR:587подача SMTP со STARTTLS и паролем приложения (:587; off — нет); без MX_TLS_CERT не открывается: AUTH открытым текстом не предлагается
MX_SUBMIT_TLS_ADDR:465подача SMTP с TLS с первого байта (:465; off — нет); без MX_TLS_CERT не открывается
MX_TLS_CERT—сертификат для STARTTLS на :25; вместе с MX_TLS_KEY
MX_TLS_KEY—ключ к MX_TLS_CERT

6. Диск — роль drive​

ПеременнаяПо умолчаниюЧто делает
DRIVE_ACME_CACHE/var/lib/simpletwo/drive-acmeкаталог, где хранится полученный сертификат
DRIVE_ACME_EMAIL—контакт для Let's Encrypt
DRIVE_ACME_STAGING01 — тестовый каталог Let's Encrypt
DRIVE_ADDR:8088адрес и порт, на котором служба принимает клиентов
DRIVE_BIN_DAYS30сколько дней удалённый файл ждёт в корзине, прежде чем сборщик сотрёт его байты. То же число, что у почты. 0 — корзины фактически нет: ближайший проход сборщика забирает всё
DRIVE_COORDINATOR_CERT_SHA256—отпечаток SHA-256 самоподписанного сертификата координатора
DRIVE_COORDINATOR_INSECURE—доверять самоподписанному сертификату координатора, у которого диск в режиме identity спрашивает права; только вместе с DRIVE_COORDINATOR_CERT_SHA256
DRIVE_DB_DSN—строка подключения к Postgres. Обязательна: режима «в памяти» у диска нет — диск, теряющий дерево при перезапуске, это не ослабленный режим
DRIVE_DEFAULT_QUOTA_GB0квота пространства по умолчанию, в гигабайтах; 0 — без предела. Своя квота пространства задаётся в консоли и перекрывает это значение
DRIVE_IDENTITY_URL—частный адрес identity: лента назначений, по которой у каждого, кому выдан диск, заводится личный каталог home. Пусто — никому ничего не заводится, и /healthz об этом говорит
DRIVE_MAIL_URL—частный адрес почтового узла: политика хранения ушедших, ответственный за ящик ушедшего и письмо-предупреждение — те же, что для его ящика. Пусто — личный каталог ушедшего хранится бессрочно, только для чтения
DRIVE_MAX_UPLOAD_MB2048предел на один файл, в мегабайтах. Проверяется при открытии загрузки, а не после того, как байты пересекли сеть
DRIVE_PUBLIC_URL—публичный адрес диска — имя, по которому его видят клиенты
DRIVE_S3_ACCESS_KEY—ключ доступа к объектному хранилищу
DRIVE_S3_BUCKETsimpletwo-driveбакет диска; по умолчанию simpletwo-drive
DRIVE_S3_ENDPOINT—адрес объектного хранилища. Пусто — служба работает, но хранит только файлы, помещающиеся в строку каталога, и говорит об этом в /healthz
DRIVE_S3_REGIONus-east-1регион объектного хранилища
DRIVE_S3_SECRET—секрет доступа к объектному хранилищу
DRIVE_TLS_ADDR:443адрес HTTPS-листенера (по умолчанию :443)
DRIVE_TLS_HOST—публичное имя диска; оно же имя в сертификате, который служба получает сама

🔒 — значение секретное: не печатайте его в журналы и не передавайте в переписке. Секреты, которые можно задать файлом, задавайте файлом: значение в окружении видно всем, кто может прочитать состояние процесса.

6. Общие для развёртывания​

ST_TOKEN_SECRET и ST_MESSAGING_URL читают несколько служб: первый — потому что токены подписывает координатор, а проверяют остальные; второй — потому что календарь сообщает службе переписки об изменениях. Значения у них одни и те же во всём контуре, иначе службы просто не поверят друг другу.

Переменные токена платформы одни и те же во всех службах с дверью для людей — переписка, календари, почта, identity; их читает общая библиотека shared/auth, а значения агент берёт из желаемого состояния. Координатор их не читает: переключатель — его собственная настройка. Так же устроены переменные служебного токена ST_SERVICE_*: их читает shared/svcauth. ST_MOVE_STOPGAP_UNTIL получают только identity и календарь — службы, в двери которых ходит утилита миграции.

ПеременнаяЧто делает
ST_PLATFORM_TOKENкакой токен принимают двери для людей: hmac (по умолчанию) — сессионный токен координатора, как раньше; identity — только токен платформы, выпущенный identity, а HMAC-сессия человека отклоняется. Другое значение — служба не стартует. Переключатель один на всю установку, его ставит координатор (PUT /admin/api/settings/platform-token)
ST_PLATFORM_ISSUERиздатель токена платформы — публичный адрес identity, ровно как он пишет iss
ST_PLATFORM_JWKS_URLключи identity (JWKS) на его частном адресе; неизвестный kid перечитывает их не чаще раза в 30 секунд
ST_PLATFORM_JWKSзакреплённая копия JWKS (base64url): ею проверяется токен, когда identity недоступен, в том числе после перезапуска. Координатор забирает её у identity и обновляет при ротации ключей
ST_PLATFORM_REVOCATIONS_URLлента отзывов identity (/v1/revocations/feed): закрытые сессии и отключённые учётные записи, опрос каждые 30 секунд служебным токеном
ST_PLATFORM_RBAC_URLкорень SCIM каталога (<directory>/scim/v2): роли и назначения (/Authz?since=) и учётки (/Users?since=) читаются отсюда от курсора, а не из токена; опрос каждые 15 секунд, при сбое отвечает последняя полученная копия
ST_PLATFORM_REVOCATIONS_STALEпредел устаревания ленты отзыва в режиме identity: если ленту не читали дольше него, токены, выписанные раньше этого предела, отклоняются, а в /healthz — revocations.stale: true; длительность от 1m до 24h, off или пусто — 10 минут. Задаётся в консоли координатора («Настройки → Каталог», карточка «Перевод служб на каталог»)
ST_SERVICE_TOKENкаким токеном службы ходят друг к другу: hmac (по умолчанию) — токен под общим ST_TOKEN_SECRET, как раньше; keys — только токен, подписанный собственным ключом хоста вызывающей службы, а служебный токен под общим секретом отклоняется. Другое значение — служба не стартует. Переключатель один на всю установку, его ставит координатор (PUT /admin/api/settings/service-token)
ST_SERVICE_KEY_DIRкаталог ключа этого хоста (current.json, next.json, previous.json) и закреплённой копии реестра ключей всех служб (registry.json). Ключ создаёт и ротирует агент на самом хосте и регистрирует у координатора; с хоста ключ не уходит. В режиме keys без ключа служба не стартует
ST_SERVICE_KEYS_URLреестр ключей служб у координатора (/v1/service/keys/jwks): неизвестный kid перечитывает его не чаще раза в 30 секунд; когда координатор недоступен, проверяет закреплённая копия
ST_MOVE_STOPGAP_UNTILмомент (RFC 3339), до которого identity и календарь принимают служебный токен svc:move без волны — временный доступ утилиты миграции. Пусто или нет переменной — доступ закрыт (по умолчанию); момент прошёл по часам самой службы — закрыт; дальше 72 часов вперёд или нечитаемое значение — закрыт; в режиме служебного токена keys — закрыт всегда. Каждое использование пишется в журнал службы с причиной stopgap и считается в /healthz (move.stopgap). Задаёт владелец в консоли координатора (Settings → «Утилита миграции: временный доступ svc:move», PUT /admin/api/settings/move-stopgap) с обязательной причиной

Дальше​