Skip to main content

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

Актуально для: SimpleTwo 0.9.x · Проверено: 20.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_APNS_KEY_IDидентификатор ключа APNs
MSG_APNS_KEY_P8 🔒содержимое ключа APNs (пуши Apple)
MSG_APNS_KEY_P8_FILEпуть к файлу ключа APNs — предпочтительная форма
MSG_APNS_SANDBOX0отправлять пуши в песочницу Apple вместо боевого контура
MSG_APNS_TEAM_IDидентификатор команды Apple Developer
MSG_APNS_TOPICtopic приложения для пушей (bundle id + «.voip»)
MSG_APNS_TOPIC_MACOSто же для сборки macOS
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_DOMAINсобственный домен установки для федерации; пусто — федерация выключена
MSG_FCM_SA_JSON_FILEпуть к файлу сервисной учётной записи Firebase (пуши Android)
MSG_FEDERATION_ALLOWдомены установок, с которыми разрешён обмен, через запятую
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_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. Служба календарей

ПеременнаяПо умолчаниюЧто делает
CAL_ACME_CACHE/var/lib/simpletwo/calendar-acmeкаталог, где хранится выписанный сертификат
CAL_ACME_EMAILпочта для уведомлений удостоверяющего центра; необязательна
CAL_ACME_STAGING0тестовый контур Let's Encrypt вместо боевого
CAL_ADDR:8085адрес и порт службы календарей
CAL_CALDAV_ENABLED0разрешить полный доступ по CalDAV; по умолчанию выключено
CAL_DB_DSNстрока подключения к Postgres
CAL_DEFAULT_TZUTCчасовой пояс по умолчанию
CAL_MEET_URLадрес, от которого строится гостевая ссылка на встречу (хост координатора). Пусто — ссылка не выдаётся вовсе
CAL_PUBLIC_URLадрес, от которого строятся ссылки подписки. За прокси задаётся обязательно, иначе подписка не обновляется
CAL_SERIES_CAP_YEARSна сколько лет вперёд разворачивается повторяющаяся серия
CAL_TLS_ADDR:443адрес HTTPS-слушателя, когда служба сама терминирует TLS
CAL_TLS_HOSTпубличное имя службы; оно же имя в сертификате
CAL_TOKEN_TTLсрок жизни токена службы
CAL_WORK_DAYS1,2,3,4,5рабочие дни организации (1 — понедельник), через запятую
CAL_WORK_END18:00конец рабочего дня
CAL_WORK_START09:00начало рабочего дня

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

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

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

Дальше