Перейти к содержанию

Переменные файла .env

Параметры odpm-окружения (порты, сценарий, пути к бэкапам и клонам git) задаются в .env. С 4.7 при чтении odpm объединяет два файла (иерархия, ADR-013):

Файл Роль
~/.odpm/.env Общий профиль пользователя (база)
.env в каталоге проекта Переопределения для этого окружения (overlay, сильнее home)

Мастер первого запуска записывает в project .env, если файл уже есть, иначе в ~/.odpm/.env. В project можно держать только отличающиеся ключи (например ODOO_PORT и ODPM_COMPOSE_PREFIX), а BACKUP_DIR и ODOO_PROJECTS_DIR — в home.

При первом интерактивном запуске odpm задаёт вопросы мастера настройки. На незнакомые пункты можно нажать Enter.

Пример: общее в home, своё в project

~/.odpm/.env:

BACKUP_DIR=/home/dev/backups
ODOO_PROJECTS_DIR=/home/dev/odoo_projects
PATH_TO_SSH_KEY=/home/dev/.ssh/id_ed25519
ODPM_LOCALE=ru_RU

<project>/.env:

ODOO_PORT=8070
ODPM_COMPOSE_PREFIX=acme
ODOO_PLATFORM_DIR=/work/client/odoo/19.0

Переменные

Переменная Назначение Значение по умолчанию
BACKUP_DIR Каталог архивов баз (--db-backup, --db-restore) ~/odoo_backups
ODOO_PROJECTS_DIR Куда клонировать platform и git-зависимости ~/odoo_projects
ODOO_PORT HTTP-порт Odoo на компьютере 8069
POSTGRES_PORT Порт PostgreSQL на компьютере (в сценарии server — только localhost) 5432
POSTGRES_SERVICE_NAME Имя сервиса PostgreSQL в docker-compose.yml и db_host в odoo.conf (без ODPM_COMPOSE_PREFIX) db
ODPM_COMPOSE_PREFIX Префикс для полной изоляции compose-стека: ключи db/odoo, том postgres-data, имя проекта Docker Compose не задан
ODPM_COMPOSE_NETWORK Логическое имя одной compose-сети для всего стека (managed bridge или external); без значения — implicit default network не задан
ODPM_COMPOSE_NETWORK_EXTERNAL 1 / true — сеть уже существует на хосте (external: true); без prefix на имени 0
DEBUGGER_PORT Порт отладчика; см. семантику по backend 5678
ODPM_DEBUGGER_BACKEND debugpy_listen или pydevd_connect debugpy_listen
ODPM_IDE Какие настройки IDE генерировать: vscode, pycharm, both, none vscode
ODPM_DEBUGGER_CONNECT_HOST Хост IDE для pydevd_connect (откуда контейнер подключается к Debug Server) host.docker.internal
ODPM_DEBUGGER_SUSPEND 1 / y — Odoo ждёт IDE после settrace (pydevd_connect) 0
GEVENT_PORT Порт веб-сокетов gevent 8072
ODPM_SCENARIO developer, server или ci developer
ODPM_LOCALE Язык сообщений odpm, напр. ru_RU берется из системы
PATH_TO_SSH_KEY Путь к ключу SSH для git (редко нужен) пусто

Смена POSTGRES_SERVICE_NAME, POSTGRES_PORT или ODPM_COMPOSE_PREFIX относительно сохранённого снимка даёт database drift — см. состояние PostgreSQL.

DEBUGGER_PORT и backend

ODPM_DEBUGGER_BACKEND Что означает DEBUGGER_PORT Compose
debugpy_listen Порт в контейнере, publish на хост (5678:5678) IDE подключается к localhost:DEBUGGER_PORT
pydevd_connect Порт Debug Server на хосте (PyCharm слушает) Порт не публикуется; нужен extra_hosts для host.docker.internal на Linux

Подробный workflow: отладка в IDE.

Поля ODPM_DEBUGGER_CONNECT_HOST и ODPM_DEBUGGER_SUSPEND попадают в .odpm/runtime/config.json всегда; для debugpy_listen runtime их не использует.

Примеры

VS Code / Cursor (по умолчанию)

DEBUGGER_PORT=5678
ODPM_DEBUGGER_BACKEND=debugpy_listen
ODPM_IDE=vscode

PyCharm Debug Server

DEBUGGER_PORT=5678
ODPM_DEBUGGER_BACKEND=pydevd_connect
ODPM_IDE=pycharm
ODPM_DEBUGGER_CONNECT_HOST=host.docker.internal
ODPM_DEBUGGER_SUSPEND=1

Полный фрагмент .env

BACKUP_DIR=/home/user/odoo_backups
ODOO_PROJECTS_DIR=/home/user/odoo_projects
PATH_TO_SSH_KEY=
ODOO_PORT=8069
POSTGRES_PORT=5432
POSTGRES_SERVICE_NAME=db
DEBUGGER_PORT=5678
ODPM_DEBUGGER_BACKEND=debugpy_listen
ODPM_IDE=vscode
GEVENT_PORT=8072
ODPM_SCENARIO=developer
ODPM_LOCALE=ru_RU

SSH и git

Мастер настройки не спрашивает путь к SSH-ключу. Обычно достаточно настройки OpenSSH (~/.ssh/config, ssh-agent).

Переменная PATH_TO_SSH_KEY нужна, если git не может использовать стандартный SSH (типично на изолированной машине сборки):

PATH_TO_SSH_KEY=/home/user/.ssh/id_ed25519

Один ключ применяется ко всем указанным удалённым репозиториям.

POSTGRES_SERVICE_NAME

Имя сервиса PostgreSQL в docker-compose.yml и значение db_host в odoo.conf (DNS внутри docker-сети). Допустимы строчные буквы, цифры, _ и -; имя должно начинаться с буквы. После смены перегенерируйте docker-compose.yml и odoo.conf (обычный запуск odpm).

Не используется, если задан ODPM_COMPOSE_PREFIX — postgres получает имя {prefix}db (например acme-db), с предупреждением в логе.

ODPM_COMPOSE_PREFIX

Опциональный префикс для изоляции полного compose-стека на общем хосте: несколько odpm-проектов в одном каталоге или параллельные копии без коллизий имён сервисов, томов и scope Docker Compose.

Режим Поведение
Не задан Как в 4.6: postgres — из POSTGRES_SERVICE_NAME (по умолчанию db), odoo — odoo, том — postgres-data
Задан (acme или acme-) Сервисы acme-db, acme-odoo; том acme-postgres-data; project name / docker compose -pacme

Нормализация: lowercase, символы [a-z0-9-], имя начинается с буквы; завершающий - в .env опционален. Невалидное значение игнорируется (префикс отключён, warning в логе).

В odpm.json sidecar по-прежнему указывают логические имена (depends_on: ["db"]); odpm переписывает их в physical при генерации docker-compose.yml.

Пример:

ODPM_COMPOSE_PREFIX=acme

См. ADR-012, состояние PostgreSQL.

ODPM_COMPOSE_NETWORK / ODPM_COMPOSE_NETWORK_EXTERNAL

Опционально объявить одну именованную Docker Compose-сеть для всего odpm-стека (db, odoo, sidecars). Без этих переменных odpm не добавляет секцию networks: в docker-compose.yml — сервисы остаются в implicit default network проекта (как в 4.6).

Режим .env Поведение
По умолчанию переменные не заданы Без networks: в YAML
Managed ODPM_COMPOSE_NETWORK=stack networks: { stack: { driver: bridge } }, все сервисы без своего networks подключаются
External ODPM_COMPOSE_NETWORK=proxy + ODPM_COMPOSE_NETWORK_EXTERNAL=1 external: true; имя без prefix (общая сеть reverse proxy)

С ODPM_COMPOSE_PREFIX=acme managed-сеть stack становится physical acme-stack; external proxy остаётся proxy.

Нормализация имени: как у prefix ([a-z0-9-], с буквы). Невалидное значение отключает сеть (warning). ODPM_COMPOSE_NETWORK_EXTERNAL без имени сети не действует.

Типичный split (ADR-013):

~/.odpm/.env:

ODPM_COMPOSE_NETWORK=proxy
ODPM_COMPOSE_NETWORK_EXTERNAL=1

<project>/.env:

ODPM_COMPOSE_PREFIX=acme
ODPM_COMPOSE_NETWORK=stack

Sidecar в manifest с networks: ["stack"] согласован только при ODPM_COMPOSE_NETWORK=stack; иначе odpm manifest validate выдаёт warning. См. плагины, ADR-014.

Смена сети не даёт database drift (не в снимке last_run.json); перегенерируется docker-compose.yml при следующем materialize.

Переменные для подстановки в manifest

Помимо встроенных ключей odpm в .env можно задавать произвольные имена для ${VAR} в odpm.json и user_settings.json (например ODOO_PLATFORM_DIR, OCA_WEB_PATH, GIT_HOST). Они не управляют портами или сценарием сами по себе — только подставляются в whitelist-поля manifest при чтении JSON.

Приоритет для ${VAR}: переменные процесса odpm перекрывают effective .env (merge home + project). Пустой default в manifest: ${VAR:-}.

Типичный фрагмент project .env для локальной разработки:

ODOO_PLATFORM_DIR=/home/dev/odoo/19.0
DEVELOPING_PROJECT_DIR=/home/dev/my_addons
OCA_WEB_PATH=/home/dev/src/oca/web
GIT_HOST=git.company.example

См. odpm.json, user_settings.json, иерархия конфигурации.