Это старая версия документа!
Содержание
Конфигурация и secrets: контракт сборки
Тип: contract · Статус: сведения требуют сверки с действующей установкой; архитектурные правила сформулированы как целевой контракт.
Разделение
.env.example описывает имена настроек без секретов. Реальная .env принадлежит экземпляру установки и не копируется в публикационные комплекты.
Изменение
После правки примера выполняется нормализация окружения штатным инструментом и проверка различий. Подключение каждого модуля и интеграции осуществляется по отдельному контракту с безопасными значениями по умолчанию.
Терминология
Установка может предоставлять настраиваемые человекочитаемые термины, но не переименовывает идентификаторы моделей и API. Контентные переводы и локализация статического UI также имеют разные источники.
Связанные понятия
Роли и installation-local настройки
bin/install.cfg ссылается на conf-real/bin/install.cfg. conf хранит
примеры/генераторы, conf-real — реальные данные и локальную историю;
root ignore не отменяет самостоятельный repository. Не публиковать secrets.
Основные defaults в example (существующее локальное значение не заменяется):
DEPLOY_USER="sharix_open_deploy" DEPLOY_GROUP="sharix_open_deploy" RUNTIME_USER="sharix_open" RUNTIME_GROUP="sharix_open" DEPLOY_HOME="" DEPLOY_OPERATORS_GROUP="" DEPLOY_JOURNAL_ACCESS=1 NGINX_ENABLED=0
Пустой home означает /home/$DEPLOY_USER; пустая operators group — DEPLOY_GROUP.
Первое — персональный home login/Git/tools, не root приложения; второе — Unix
группа доверенных операторов, не путь. Namespace задаёт SYSTEMD_SERVICE_NAME
корневого env, существующее имя сохраняется. DEPLOY_JOURNAL_ACCESS=1 даёт
чтение журналов всего хоста; значение 0 не отзывает ранее выданное членство.
Deploy — доверенный владелец исходников и конфигов. Это эксплуатационное
разделение, не защита от злонамеренного deploy, редактирующего потребляемый root config.
Файловая политика веб-доступа
В начале физического root/module/handler env, до первого assignment:
# @env.file.web: read
| Значение | Веб | Права runtime |
|---|---|---|
hidden | Нет в списке; прямое открытие 404. | Читает для загрузки приложения. |
read | Разрешённые прежним ACL поля отображаются без изменения; POST 403. | Только чтение. |
write | Валидируемое сохранение разрешённых параметров. | Файл и атомарная замена только в отдельном owner-каталоге. |
Локальный заголовок важнее example. Если обоих нет — read; root example явно write для первого запуска. Повторный/невалидный заголовок блокирует installer, web writer скрывает файл. Из веба заголовок не меняется. Политика не выдаёт Django/LDAP роль и не расширяет owner allowlist, secret widgets/file-only keys. Hidden не означает «runtime не может прочитать настройки».
Хранилище и запись
Физически: conf-real/env/root/.env, conf-real/env/<module>/.env,
conf-real/env/handlers/.env. Рабочие .env и исторические адреса остаются
совместимыми ссылками; conf/env/<owner> зеркалит структуру ссылками на actual
data/example владельца, а не копирует secrets в Git. Миграция сохраняет байты,
backups и конфликтную историю; разные physical copies/foreign symlink не затираются.
Canonical env читается первым, runtime не обязан обходить старый закрытый каталог.
First-run/menu/handler selection/source/repository snapshots размещаются в
изолированных conf-real/state/<owner>/ с совместимыми адресами. Runtime не
получает write ко всему conf-real, systemd, nginx, sudoers или deploy home.
Config read, mutable state, media/themes/local_versions, static и logs — разные
классы путей. Atomic writers ставят нужные ACL до replace. Backups env:
conf-real/backups/env/<owner>/<timestamp>/.env. Не делать chmod 600 после writer:
он срежет named runtime ACL mask. Внешние group mode bits — это ACL mask, не
полный ответ о фактических правах; проверять getfacl и actual runtime identity.
После смены заголовка из deploy login:
cd /opt/sharix-open-webapp-base && ./bin/install.sh deploy --strict --use-current-checkouts \ --permissions=check --deps=check --no-restart
Это обычный deploy, не config-only и не read-only. Он согласует bounded ACL до/после записи; write → read/hidden отзывает запись, не переписывая значения шаблоном. Если новая схема ещё не подготовлена, сначала пройти root bootstrap/activate из основного руководства. Не давать всему conf-real рекурсивный runtime write.
Нормализация
maybe obsolete — ключ не найден в example, а не приказ удалить значение.
Generated enable flags могут быть действующими. normalize_env.py –check
и module_env_layout.py –root . –check выявляют разные классы расхождений;
–write не предлагает интерактивный выбор каждого unknown key. Writer запускать
через installer role context, чтобы сохранить owner/ACL/backup contract.
Не заменять env файлом example и не переносить вручную чужие токены.
Проверенная реализация и границы доказательств
Сверено 2026-10-27 по опубликованному Open root
ec9bf2a
и Open config
84597d4.
Проверены исполняемые пути install.sh, install_roles.sh, install_permissions.py,
deploy_control.sh, install_nginx.sh и env/state helpers; не только сообщения Git.
Владелец подтвердил успешный запуск Open после исправлений. Установка nginx
с новым вопросом и повторная независимая проверка Testopen ещё требуют
отдельной host-приёмки. Это не объявление релиза и не подтверждение production.
Редакционный status=review относится к статье, не к наличию реализации.