Files
admin/.wiki/concepts/config-custom-env-mapping-in-mounted-dirs.md

23 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: config-custom-env-mapping-in-mounted-dirs — env бесполезен без mapping-файла
status: live
tags: [config, npm-config, env, books, gotcha]
---
# npm `config` + примонтированный конфиг-дир: env читается только через custom-environment-variables.json
## Проблема (2026-08-23, деплой books)
Код читает `config.get('sched')` (npm-пакет `config`), env-mapping — `config/custom-environment-variables.json` (`"sched": {"adminUrl": "SCHED_ADMIN_URL", ...}`). В контейнерах books (api/web/task-runner) конфиг-дир — примонтированный (bind `/opt/books/*/config` или named volume), и в нём НЕ было `custom-environment-variables.json` (только `default.json`) → **`config.get('sched')` THROW: "Configuration property sched is not defined"**, даже с env-переменными в стеке.
Причина: маунт **затеняет** файлы из образа; env-mapping работает только если mapping-файл лежит в РАБОЧЕМ конфиг-дире (mounted), не в образе.
## Фикс
Положить `custom-environment-variables.json` (с sched-mapping) в каждый примонтированный конфиг-дир:
- slovo: `/opt/books/api/config/`, `/opt/books/task-runner/config/` (host binds)
- volumes: `books-web-config`, `bookva-api-config`, `bookva-web-config`, `bookva-task-runner-config` — через `docker run --rm -v <vol>:/c -v /tmp:/tmp:ro alpine cp /tmp/file /c/`
Нюансы:
- mapping **не создаёт** свойство, если его нет в файлах И env-переменная отсутствует: `config.get('sched')` бросит. Нужны оба: mapping-файл + env в стеке.
- `config` кэшируется на старте процесса — после правки файлов контейнер нужно пересоздать (redeploy).
- Проверка: `docker exec <ctr> sh -c 'cd /usr/src/app/packages/<svc> && node -e "console.log(JSON.stringify(require(\"config\").get(\"sched\")))"'` (cwd ВАЖЕН — конфиг резолвится от него; `cd /usr/src/app/packages/*` ломается на multi-dir).