Данная статья является переводом и адаптацией материала интегратора Cetmix. В репозитории XXP открыт форк проекта cetmix/docker-odoo-debug, в котором выполнены оптимизации и доработки для работы «из коробки».
Ознакомившись и выполнив по-шаговые инструкции указанные в данной статье, вы можете производить разработку и отладку кода любой версии Odoo в Visual Studio Code на любой ОС. Для этого, мы будем использовать Docker контейнеры, поэтому вам не придётся беспокоиться о проблемах совместимости с вашей операционной системы, устаревших версий Python или релиза Odoo сделанного более трех лет назад. В образе Docker установлены все необходимые зависимости.
1. Docker и Git
Вам необходимо установить Docker и Git в вашей системе. Для этого воспользуйтесь руководствами по установке вашей операционной системы.
Примечание:
- Для установки Docker используйте официальную страницу установки Docker
- Официальная страница установки Git.
Linux:
sudo usermod -a -G docker ${USER}
Mac:
brew install --cask docker
2. Структура каталогов
Для удобства работы с различными версиями Odoo, мы рекомндуем использовать следующую структуру:
* вы можете использовать любую другую, при этом не забудьте обновить файлы конфигурации соответствующим образом.
Основная идея — обеспечить одинаковую структуру каталогов как внутри контейнера, так и на хосте. Это позволяет использовать только одну точку монтирования и значительно упрощает настройку.
$HOME/odoo
Корневой каталог, в котором хранятся все данные, связанные с odoo.
$HOME/odoo/<odoo_version>
# Eg. [ $HOME/odoo/17.0 ]
Папки с исходным кодом Odoo, специфичны для каждой версии.
$HOME/odoo/<odoo_version>/src
$HOME/odoo/<odoo_version>/src/odoo
$HOME/odoo/<odoo_version>/src/enterprise (*опционально)
Структура содержит два каталога: «odoo» и «enterprise», которые представляют собой клонированные Git-репозитории версий Community и Enterprise.
* Репозиторий Enterprise не является обязательным и требуется только при разработке для Odoo Enterprise.
$HOME/odoo/varlib
Каталог ./varlib используется для файлового хранилища Odoo. Он будет смонтирован как внешний том к контейнеру Odoo.
Важно!
Убедитесь, что Odoo контейнер имеет право на запись в этот каталог.
$HOME/odoo/shared_postgres_data
PostgreSQL также работает в контейнере, а его данные хранятся на внешнем томе, смонтированном в этом каталоге. Ниже описаны процессы установки и настройки сервера БД.
$HOME/odoo/docker-odoo-debug
Клонированный репозиторий данного руководства. Он содержит все необходимые файлы конфигурации Odoo и VSCode.
3. Сервер базы данных PostgreSQL
Для работы Odoo нужен сервер базы данных PostgreSQL.
Если у вас уже установлен PostgreSQL, вы можете подключить к нему контейнеры Odoo. Но в нашем решении для разработки используется отдельный контейнер PostgreSQL.
Чтобы сэкономить ресурсы и повысить производительность, все экземпляры Odoo работают с одним контейнером PostgreSQL. Данные базы хранятся на смонтированном томе, поэтому они сохранятся даже после удаления контейнера.
Для установки контейнера PostgreSQL, нужно выполнить следующую команду:
mkdir -p $HOME/odoo/shared_postgres_data && \
docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo \
-e POSTGRES_DB=postgres \
-e PGDATA=/var/lib/postgresql/data \
--shm-size=1g\
--restart always \
-v $HOME/odoo/shared_postgres_data:/var/lib/postgresql/data \
-p 5432:5432 \
--name db-shared postgres:14
Вот некоторые комментарии относительно параметров:
shm-size=1g
Этот параметр необязателен. Он выделяет 1 Gb разделяемой памяти. Вы можете настроить этот параметр в соответствии со своими потребностями и объёмом оперативной памяти, доступным в вашей системе. Или просто опустите его в экземплярах для разработки. Для более точной настройки PostgreSQL в производственных экземплярах можно использовать следующий инструмент.
restart always
Заставляет автоматически запускать контейнер при старте Docker.. Более подробную информацию об этом случае можно найти здесь.
postgres:14
Указывает Docker загрузить и запустить Postgres версии 14. Odoo рекомендует последнюю стабильную версию, но следует учитывать, что слишком свежие релизы могут ещё не поддерживаться.
Доступные образы PostgreSQL можно посмотреть здесь
-v $HOME/odoo/shared_postgres_data:/var/lib/postgresql/data
Монтирует каталог для хранения данных:
- В контейнере данные будут находиться по пути /var/lib/postgresql/data.
-
На вашей системе они сохранятся в папке $HOME/odoo/shared_postgres_data.
Благодаря этому данные не потеряются при удалении контейнера.
-p 5432:5432
Сообщает Docker о необходимости открыть порт PostgreSQL за пределами контейнера, чтобы вы могли получить доступ к своей базе данных напрямую на localhost:5432.
Важно!
Если к PostgreSQL подключается другой контейнер (например, Odoo), в качестве хоста нужно указывать host.docker.internal
, а не localhost
.
*Дополнительную информацию о подключении из контейнера Docker к порту хоста см. по следующей ссылке.
4. Исходный код Odoo
Как упоминалось выше, исходный код Odoo хранится в каталоге
$HOME/odoo/<odoo_version>/src.
Чтобы клонировать исходный код Odoo, скажем версии 17.0, выполните следующую команду:
cd $HOME/odoo/17.0/src && git clone -b 17.0 --single-branch --depth=1 https://github.com/odoo/odoo.git
Эта команда клонирует только ветку 17.0 и только последний коммит, что позволит сэкономить место на диске.
Чтобы обновить исходный код позже, просто выполните:
cd $HOME/odoo/17.0/src/odoo && git pull
5. Файлы Docker и VSCode
В этом руководстве уже подготовлены файлы конфигурации Dockerfile и VS Code.
По умолчанию предполагается, что репозиторий с ними будет находиться в каталоге:
$HOME/odoo/docker-odoo-debug
Склонируйте репозиторий с помощью команды:
cd $HOME/odoo && git clone https://github.com/xxp-odoo-erp/docker-odoo-debug.git
*Кроме того, вы можете загрузить все файлы непосредственно из репозитория.
Важно!
Если вы хотите использовать другое местоположение, убедитесь, что вы соответствующим образом обновили все пути.
6. Файл конфигурации Odoo
В каталоге docker-odoo-debug уже есть готовый файл конфигурации odoo.conf.
По умолчанию он содержит только путь к исходному коду Odoo.
Если вы хотите подключить собственные модули extra-addons
, отредактируйте odoo.conf и добавьте пути к их каталогам в параметр addons_path
.
7. Расширения для VSCode
Для работы с Odoo с использованием Docker в VSCode необходимо установить следующее расширение:
8. Настройка VSCode
Если вы начинаете проект с нуля, просто скопируйте каталог .vscode целиком из docker-odoo-debug в корневую папку своего проекта.
$HOME/odoo/<odoo_version>/extra-addons/<my_project>
Опционально
Если в вашем проекте уже есть файлы конфигурации, вам необходимо скопировать и вставить некоторые данные из файлов docker-odoo-debug/.vscode в те же файлы в каталоге .vscode вашего проекта.
- Скопируйте из settings.json все переменные, начинающиеся с «odoo». Они находятся под комментарием "Docker Debug Variables".
- Скопировать все задачи из tasks.json
- Скопировать конфигурацию запуска из launch.json
Файлы выполняют разные роли:
settings.json
- настройки проекта.
Укажите версию Odoo вашего проекта в переменной odooVersion:
Вам также необходимо вручную изменить номер версии в путях к коду для автодополнения кода.
launch.json
— это файл, в котором хранятся сценарии отладки для Visual Studio Code. Каждый сценарий определяет, как именно запускать и отлаживать проект.
В нашем примере есть одна конфигурация — "Docker Debug". Она запускает Odoo внутри Docker-контейнера. Перед запуском этой конфигурации выполняется задача odoo-debug (описана в tasks.json
), которая создаёт и запускает контейнер с нужными параметрами.
Внутри конфигурации есть раздел "pathMappings", который говорит VS Code, где находится ваш исходный код на компьютере (localRoot) и где он доступен внутри контейнера (remoteRoot). Это нужно, чтобы отладчик мог работать напрямую с кодом в контейнере.
tasks.json
- описывает задачи для автоматизации работы.
В нашем случае он содержит две задачи:
- odoo-debug — запускает Odoo внутри Docker-контейнера с нужными параметрами, пробросом портов и подключением к локальным файлам.
- build-image — собирает Docker-образ Odoo из Dockerfile.
Эти задачи используются вместе с launch.json
для запуска и отладки Odoo прямо из редактора.
Аргументы для запуска Odoo:
-
--database=17.0-xxp
— указывает конкретную базу данных, которую нужно использовать при старте Odoo. -
--without-demo=True
— отключает загрузку демонстрационных данных. -
--update=my_odoo_module
— автоматически обновляет указанный модуль при запуске. -
--init=my_odoo_module
— инициализирует указанный модуль, создавая его структуры данных и настройки. -
--test-enable
— включает выполнение тестов модулей. -
--stop-after-init
— завершает работу Odoo сразу после инициализации.
9. Запуск контейнера с Odoo
Если вы работаете с несколькими проектами на одной версии Odoo, имеет смысл заранее собрать Docker-образ. Это позволит пропустить этап сборки при отладке в IDE и значительно ускорит процесс.
Для сборки собственного образа используйте команду:
docker build -t my-odoo:17.0 $HOME/odoo/docker-odoo-debug/17.0
В этой команде 17.0 — версия Odoo. При работе с другой версией измените её на требуемую, например: 16.0, 18.0 и т.д.
Также путь $HOME/odoo/docker-odoo-debug/17.0 должен соответствовать выбранной версии.
После этого отключите зависимость от задачи docker-build в tasks.json. Вам необходимо //закомментировать следующую строку:
"dependsOn": ["build-image"],
10. Запуск Odoo в Docker
Итак, если вы правильно выполнили все шаги, то VSCode готов к запуску вашего проекта Odoo в Docker.