Переменные окружения
Актуально для: SimpleTwo 0.9.x · Проверено: 20.09.2026
Имена и значения по умолчанию берутся из тех же файлов, что читают сами службы
(site/docs-gen/env-variables.py). Поэтому список полон по построению: переменная, которой
здесь нет, не читается ни одной службой.
Обычно эти значения задаёт координатор, когда ставит роль: он же пишет файл службы и подставляет туда параметры. Справочник нужен в двух случаях — когда разбираетесь, почему служба ведёт себя не так, и когда ставите её руками.
1. Координатор
Координатор ведёт реестр своих переменных, и у каждой записано, что стоит её изменение:
| Класс | Что значит |
|---|---|
restart | значение читается один раз при старте; правка в окружении работающего процесса не делает ничего |
hot | перечитывается на ходу |
Имя не из реестра координатор не считает ошибкой: он пишет предупреждение и продолжает работать. Это решение, купленное простоем: первая версия реестра отказывалась стартовать при незнакомой переменной, и установка встала из-за переменной, которую сама же и поставляла в образе. То, что выполняется раньше службы, не должно уметь её останавливать.
| Переменная | Тип | Применение | Что делает |
|---|---|---|---|
ST_ADDR | string | restart | адрес и порт HTTP-слушателя: проверка владения именем (ACME HTTP-01) и перенаправление на HTTPS |
ST_HTTPS_ADDR | string | restart | адрес и порт HTTPS-слушателя; пусто — HTTPS выключен |
ST_TOKEN_TTL | duration | restart | срок жизни сессионного токена. Держится коротким: отзыв здесь — это истечение |
ST_REFRESH_TTL | duration | restart | срок жизни токена обновления; длинный, но отзывается на сервере |
ST_GATEWAY_TTL | duration | restart | сколько может не приходить пульс от VPN-узла, прежде чем он считается устаревшим |
ST_TRUSTED_PROXIES | csv | restart | сети, чьему заголовку X-Forwarded-For можно верить; пусто — заголовок игнорируется |
ST_ACME_STAGING | bool | restart | выпускать сертификаты в тестовом контуре Let's Encrypt вместо боевого |
ST_TLS_DOMAIN | string | restart | имя, на которое координатор заказывает сертификат Let's Encrypt; пусто — самоподписанный |
ST_TLS_EMAIL | string | restart | почта для уведомлений удостоверяющего центра; необязательна |
ST_AGENT_BIN_DIR | path | restart | каталог со сборками агента под разные платформы: их координатор раздаёт узлам при установке ролей |
ST_DEPLOY_DRYRUN | bool | restart | печатать команды установки вместо их выполнения. Значение разбирается строго: False и Off — это ложь, а не мусор, но опечатка отвергается с ошибкой, а не превращается в «включено» |
ST_DB_PATH | path | restart | путь к базе координатора (SQLite); пусто — временное хранилище в памяти, то есть стенд |
ST_KEYSTORE_PATH | path | restart | файл с мастер-ключом шифрования. Именно путь, и никогда сам ключ: ключ в переменной окружения — это ключ в журнале. Файл должен лежать вне каталога данных, иначе резервная копия данных увезёт с собой и ключ от них |
ST_VERSION | string | restart | версия сборки; подставляется образом, руками не задаётся |
ST_TOKEN_SECRET 🔒 | string | restart | секрет подписи токенов; общий для координатора и продуктовых служб |
2. Служба переписки
| Переменная | По умолчанию | Что делает |
|---|---|---|
MSG_ACME_CACHE | /var/lib/simpletwo/msg-acme | каталог, где хранится выписанный сертификат |
MSG_ACME_EMAIL | — | почта для уведомлений удостоверяющего центра; необязательна |
MSG_ACME_STAGING | 0 | тестовый контур Let's Encrypt вместо боевого |
MSG_ADDR | :9090 | адрес и порт, на котором служба принимает клиентов |
MSG_AI_PROVIDER_KEY_FILE | — | путь к файлу с ключом провайдера модели. Только фай л: значение в окружении попадает в журналы |
MSG_AI_PROVIDER_KIND | anthropic | диалект провайдера модели: 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_SANDBOX | 0 | отправлять пуши в песочницу Apple вместо боевого контура |
MSG_APNS_TEAM_ID | — | идентификатор команды Apple Developer |
MSG_APNS_TOPIC | — | topic приложения для пушей (bundle id + «.voip») |
MSG_APNS_TOPIC_MACOS | — | то же для сборки macOS |
MSG_CONTROL_ADDR | 127.0.0.1:9091 | адрес управляющего интерфейса. По умолчанию только петля: наружу он не смотрит |
MSG_CONTROL_TOKEN 🔒 | — | токен управляющего интерфейса; подставляет координатор |
MSG_CONVLOG_KEEP | 10000 | сколько ревизий журнала беседы хранить |
MSG_COORDINATOR_CERT_SHA256 | — | отпечаток сертификата координатора (пин); защищает от подмены |
MSG_COORDINATOR_INSECURE | false | не проверять сертификат координатора. Только для стенда |
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_MEMBERS | 10000 | предел числа участников одной беседы |
MSG_MAX_UPLOAD_MB | 50 | предел размера одного вложения, мегабайты |
MSG_MEDIA_DIR | /var/lib/simpletwo/media | каталог вложений, когда они лежат на диске, а не в объектном хранилище |
MSG_PRESENCE_GRACE_SEC | 45 | сколько секунд человек считается в сети после обрыва последнего соединения |
MSG_REDIS_ADDR | — | адрес шины; нужен для пула SFU, телефонии и нескольких реплик |
MSG_REDIS_DB | 0 | номер базы Redis |
MSG_REDIS_PASSWORD 🔒 | — | пароль шины |
MSG_RETENTION_DAYS | 0 | срок хранения сообщений в днях; 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_STAGING | 0 | тестовый контур Let's Encrypt вместо боевого |
CAL_ADDR | :8085 | адрес и порт службы календарей |
CAL_CALDAV_ENABLED | 0 | разрешить полный доступ по CalDAV; по умолчанию выключено |
CAL_DB_DSN | — | строка подключения к Postgres |
CAL_DEFAULT_TZ | UTC | часовой пояс по умолчанию |
CAL_MEET_URL | — | адрес, от которого строится гостевая ссылка на встречу (хост координатора). Пусто — ссылка не выдаётся вовсе |
CAL_PUBLIC_URL | — | адрес, от которого строятся ссылки подписки. За прокси задаётся обязательно, иначе подписка не обновляется |
CAL_SERIES_CAP_YEARS | — | на сколько лет вперёд разворачивается повторяющаяся серия |
CAL_TLS_ADDR | :443 | адрес HTTPS-слушателя, когда служба сама терминирует TLS |
CAL_TLS_HOST | — | публичное имя службы; оно же имя в сертификате |
CAL_TOKEN_TTL | — | срок жизни токена службы |
CAL_WORK_DAYS | 1,2,3,4,5 | рабочие дни организации (1 — понедельник), через запятую |
CAL_WORK_END | 18:00 | конец рабочего дня |
CAL_WORK_START | 09:00 | начало рабочего дня |
🔒 — значение секретное: не печатайте его в журналы и не передавайте в переписке. Секреты, которые можно задать файлом, задавайте файлом: значение в окружении видно всем, кто может прочитать состояние процесса.
4. Общие для развёртывания
ST_TOKEN_SECRET и ST_MESSAGING_URL читают несколько служб: первый — потому что токены
подписывает координатор, а проверяют остальные; второй — потому что календарь сообщает службе
переписки об изменениях. Значения у них одни и те же во всём контуре, иначе службы просто не
поверят друг другу.