Skip to Content

Разработка Odoo с применением VS Code и Docker

Данная статья является переводом и адаптацией материала интегратора 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.. Более подробную информацию об этом случае можно найти здесь.


po​stgres: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 вашего проекта.

  1. Скопируйте из settings.json все переменные, начинающиеся с «odoo». Они находятся под комментарием "Docker Debug Variables".
  2. Скопировать все задачи из tasks.json
  3. Скопировать конфигурацию запуска из 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  -  описывает задачи для автоматизации работы. 

В нашем случае он содержит две задачи:

  1. odoo-debug — запускает Odoo внутри Docker-контейнера с нужными параметрами, пробросом портов и подключением к локальным файлам.
  2. 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.

Поделиться этой записью