Установка модулей Odoo через командную строку и git: полное руководство

08.01.2026
19:40

Odoo — мощная ERP-система с модульной архитектурой. Стандартная установка включает базовые модули, но реальная сила Odoo раскрывается через тысячи дополнительных модулей от сообщества и коммерческих разработчиков. В этом руководстве мы разберём профессиональный подход к установке модулей: через командную строку и систему контроля версий git.

Почему командная строка и git

Установить модуль через веб-интерфейс Odoo просто — нажал кнопку, загрузил ZIP-файл, готово. Но этот подход имеет серьёзные ограничения:

Нет контроля версий. Вы не знаете, какая именно версия модуля установлена, когда он обновлялся, какие изменения были внесены.

Сложность обновления. Каждый модуль нужно обновлять вручную через интерфейс. Если модулей десятки — это часы работы.

Проблемы с зависимостями. Модули часто зависят друг от друга. Через интерфейс приходится вручную отслеживать и устанавливать зависимости.

Невозможность автоматизации. Нельзя автоматизировать установку модулей в CI/CD пайплайнах, Docker-контейнерах или при развёртывании новых инстансов.

Отсутствие истории изменений. Если модуль сломал систему, откатиться к предыдущей версии практически невозможно.

Профессиональный подход использует git для управления модулями и командную строку для установки. Это даёт полный контроль, воспроизводимость и автоматизацию.

Архитектура модулей в Odoo

Прежде чем устанавливать модули, важно понимать, как Odoo их организует.

Структура директорий

Odoo ищет модули в директориях, указанных в параметре addons_path конфигурационного файла. Стандартная структура выглядит так:

/opt/odoo/
├── odoo/                    # Базовый код Odoo
│   └── addons/             # Встроенные модули
├── addons/                  # Официальные модули Enterprise
└── custom-addons/          # Ваши кастомные модули
    ├── module1/
    ├── module2/
    └── module3/

Каждый модуль — это отдельная директория с определённой структурой:

module_name/
├── __init__.py             # Инициализация Python-пакета
├── __manifest__.py         # Метаданные модуля
├── models/                 # Модели данных
│   ├── __init__.py
│   └── model_name.py
├── views/                  # XML-представления
│   └── view_name.xml
├── security/               # Права доступа
│   ├── ir.model.access.csv
│   └── security.xml
├── data/                   # Данные для загрузки
│   └── data.xml
├── static/                 # Статические файлы (CSS, JS, изображения)
│   ├── description/
│   │   └── icon.png
│   └── src/
└── i18n/                   # Переводы
    ├── ru.po
    └── en.po

Файл манифеста

Каждый модуль обязательно содержит файл __manifest__.py с метаданными:

{
    'name': 'Module Name',
    'version': '16.0.1.0.0',
    'category': 'Sales',
    'summary': 'Short description',
    'description': 'Detailed description',
    'author': 'Author Name',
    'website': 'https://example.com',
    'license': 'LGPL-3',
    'depends': ['base', 'sale'],
    'data': [
        'security/ir.model.access.csv',
        'views/view_name.xml',
    ],
    'demo': [
        'demo/demo_data.xml',
    ],
    'installable': True,
    'application': False,
    'auto_install': False,
}

Параметр depends критически важен — он указывает зависимости модуля. Odoo автоматически устанавливает зависимые модули.

Подготовка окружения

Перед установкой модулей нужно подготовить систему.

Проверка установки Odoo

Убедитесь, что Odoo установлен и работает:

sudo systemctl status odoo

Проверьте версию Odoo:

odoo --version

Или через Python:

python3 -c "import odoo; print(odoo.release.version)"

Определение путей addons

Найдите конфигурационный файл Odoo:

sudo find / -name odoo.conf 2>/dev/null

Обычные расположения:

  • /etc/odoo/odoo.conf
  • /etc/odoo.conf
  • ~/.odoorc

Посмотрите текущие пути addons:

grep addons_path /etc/odoo/odoo.conf

Создание директории для кастомных модулей

Создайте отдельную директорию для сторонних модулей:

sudo mkdir -p /opt/odoo/custom-addons

Назначьте владельца директории пользователю Odoo:

sudo chown -R odoo:odoo /opt/odoo/custom-addons

Добавьте эту директорию в конфигурацию:

sudo nano /etc/odoo/odoo.conf

Найдите или добавьте строку addons_path:

addons_path = /opt/odoo/odoo/addons,/opt/odoo/addons,/opt/odoo/custom-addons

Порядок имеет значение — Odoo проверяет директории слева направо. Если модуль с одинаковым именем находится в нескольких директориях, используется первый найденный.

Установка модулей через git clone

Git — основной способ установки модулей от сообщества. Большинство модулей размещены на GitHub или GitLab.

Поиск модулей

Основные источники модулей Odoo:

Odoo Community Association (OCA):

  • Репозиторий: https://github.com/OCA
  • Высокое качество кода
  • Регулярные обновления
  • Строгий код-ревью

GitHub:

  • Поиск: https://github.com/search?q=odoo+module
  • Огромное количество модулей
  • Разное качество

Odoo Apps Store:

  • https://apps.odoo.com
  • Официальный маркетплейс
  • Платные и бесплатные модули

Клонирование одного модуля

Перейдите в директорию кастомных модулей:

cd /opt/odoo/custom-addons

Клонируйте репозиторий модуля:

git clone https://github.com/OCA/sale-workflow.git

Эта команда создаст директорию sale-workflow со всеми модулями из репозитория.

Клонирование конкретной версии

Модули Odoo привязаны к версиям. Для Odoo 16.0 нужна ветка 16.0:

git clone -b 16.0 https://github.com/OCA/sale-workflow.git

Проверьте доступные ветки перед клонированием:

git ls-remote --heads https://github.com/OCA/sale-workflow.git

Клонирование нескольких репозиториев

Создайте скрипт для массовой установки модулей:

nano /opt/odoo/install-modules.sh

Содержимое скрипта:

#!/bin/bash

ADDONS_DIR="/opt/odoo/custom-addons"
BRANCH="16.0"

cd $ADDONS_DIR

repos=(
    "https://github.com/OCA/sale-workflow.git"
    "https://github.com/OCA/account-financial-tools.git"
    "https://github.com/OCA/project.git"
    "https://github.com/OCA/stock-logistics-warehouse.git"
)

for repo in "${repos[@]}"; do
    repo_name=$(basename $repo .git)
    if [ -d "$repo_name" ]; then
        echo "Обновление $repo_name..."
        cd $repo_name
        git pull origin $BRANCH
        cd ..
    else
        echo "Клонирование $repo_name..."
        git clone -b $BRANCH $repo
    fi
done

sudo chown -R odoo:odoo $ADDONS_DIR
echo "Установка завершена"

Сделайте скрипт исполняемым:

chmod +x /opt/odoo/install-modules.sh

Запустите установку:

sudo /opt/odoo/install-modules.sh

Клонирование с определённым коммитом

Иногда нужна конкретная версия модуля, а не последняя в ветке:

git clone -b 16.0 https://github.com/OCA/sale-workflow.git
cd sale-workflow
git checkout abc123def456

Или клонируйте с определённой глубиной истории:

git clone --depth 1 -b 16.0 https://github.com/OCA/sale-workflow.git

Флаг --depth 1 скачивает только последний коммит без истории, экономя время и место.

Работа с submodule репозиториями

Многие Odoo-проекты используют git submodules для управления зависимостями.

Добавление модулей как submodules

Инициализируйте git-репозиторий для вашего проекта:

cd /opt/odoo
git init

Добавьте модули как submodules:

git submodule add -b 16.0 https://github.com/OCA/sale-workflow.git custom-addons/sale-workflow

Зафиксируйте изменения:

git add .gitmodules custom-addons/sale-workflow
git commit -m "Add sale-workflow module"

Клонирование проекта с submodules

При клонировании проекта с submodules:

git clone https://github.com/yourcompany/odoo-project.git
cd odoo-project

Инициализируйте и обновите submodules:

git submodule init
git submodule update

Или клонируйте сразу с submodules:

git clone --recurse-submodules https://github.com/yourcompany/odoo-project.git

Обновление submodules

Обновите все submodules до последних версий в их ветках:

git submodule update --remote --merge

Обновите конкретный submodule:

git submodule update --remote custom-addons/sale-workflow

Установка Python-зависимостей модулей

Многие модули требуют дополнительные Python-библиотеки.

Поиск requirements.txt

Проверьте наличие файла requirements.txt в модуле:

find /opt/odoo/custom-addons -name requirements.txt

Установка зависимостей

Установите зависимости для конкретного модуля:

pip3 install -r /opt/odoo/custom-addons/sale-workflow/requirements.txt

Или с флагом для системной установки:

sudo pip3 install --break-system-packages -r /opt/odoo/custom-addons/sale-workflow/requirements.txt

Создание единого requirements.txt

Объедините все requirements.txt из установленных модулей:

find /opt/odoo/custom-addons -name requirements.txt -exec cat {} \; | sort | uniq > /opt/odoo/all-requirements.txt

Установите все зависимости разом:

pip3 install -r /opt/odoo/all-requirements.txt

Использование виртуального окружения

Создайте виртуальное окружение для изоляции зависимостей:

python3 -m venv /opt/odoo/venv

Активируйте окружение:

source /opt/odoo/venv/bin/activate

Установите зависимости в окружение:

pip install -r /opt/odoo/all-requirements.txt

Активация модулей через командную строку

После установки файлов модулей их нужно активировать в Odoo.

Обновление списка модулей

Odoo сканирует директории addons при запуске, но не видит новые модули автоматически. Обновите список:

odoo -d your_database -u base --stop-after-init

Параметры команды:

  • -d your_database — имя базы данных
  • -u base — обновить модуль base (триггер пересканирования)
  • --stop-after-init — остановить после инициализации

Установка модуля через CLI

Установите модуль в базу данных:

odoo -d your_database -i module_name --stop-after-init

Установите несколько модулей одновременно:

odoo -d your_database -i module1,module2,module3 --stop-after-init

Обновление установленного модуля

После изменения кода модуля обновите его:

odoo -d your_database -u module_name --stop-after-init

Обновите все установленные модули:

odoo -d your_database -u all --stop-after-init

Использование odoo-bin

Если Odoo установлен из исходников:

cd /opt/odoo/odoo
./odoo-bin -d your_database -i module_name --stop-after-init

С указанием конфигурационного файла:

./odoo-bin -c /etc/odoo/odoo.conf -d your_database -i module_name --stop-after-init

Установка без остановки сервиса

Для продакшн-серверов используйте флаг --no-http:

odoo -d your_database -i module_name --no-http

Odoo выполнит установку в фоне, не запуская веб-сервер.

Работа с Odoo Shell

Odoo Shell — интерактивная Python-консоль для работы с данными.

Запуск Odoo Shell

Запустите shell для конкретной базы данных:

odoo shell -d your_database

С указанием конфигурационного файла:

odoo shell -c /etc/odoo/odoo.conf -d your_database

Установка модуля через Shell

Установите модуль программно:

env['ir.module.module'].search([('name', '=', 'sale_management')]).button_immediate_install()

Установите несколько модулей:

modules = env['ir.module.module'].search([('name', 'in', ['sale_management', 'purchase'])])
modules.button_immediate_install()

Проверка состояния модулей

Проверьте установленные модули:

installed = env['ir.module.module'].search([('state', '=', 'installed')])
for module in installed:
    print(f"{module.name}: {module.latest_version}")

Найдите модули, требующие обновления:

to_upgrade = env['ir.module.module'].search([('state', '=', 'to upgrade')])
for module in to_upgrade:
    print(module.name)

Обновление модуля через Shell

Обновите модуль программно:

module = env['ir.module.module'].search([('name', '=', 'sale_management')])
module.button_immediate_upgrade()

Автоматизация через API

Для полной автоматизации используйте Odoo XML-RPC API.

Подключение к API

Создайте Python-скрипт для подключения:

import xmlrpc.client

url = 'http://localhost:8069'
db = 'your_database'
username = 'admin'
password = 'admin'

common = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common')
uid = common.authenticate(db, username, password, {})

models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')

Установка модуля через API

Найдите модуль по имени:

module_id = models.execute_kw(db, uid, password,
    'ir.module.module', 'search',
    [[('name', '=', 'sale_management')]])

Установите модуль:

models.execute_kw(db, uid, password,
    'ir.module.module', 'button_immediate_install',
    [module_id])

Массовая установка через API

Установите список модулей:

module_names = ['sale_management', 'purchase', 'stock']

for name in module_names:
    module_id = models.execute_kw(db, uid, password,
        'ir.module.module', 'search',
        [[('name', '=', name)]])

    if module_id:
        models.execute_kw(db, uid, password,
            'ir.module.module', 'button_immediate_install',
            [module_id])
        print(f"Установлен: {name}")

Управление версиями модулей

Контроль версий критичен для стабильности системы.

Создание файла versions.txt

Зафиксируйте версии всех установленных модулей:

cd /opt/odoo/custom-addons
find . -maxdepth 2 -name __manifest__.py -exec grep -H "version" {} \; > versions.txt

Или используйте git для отслеживания:

cd /opt/odoo/custom-addons/sale-workflow
git log -1 --format="%H" > VERSION

Создание тегов для версий

Создайте git-тег после успешного обновления:

cd /opt/odoo/custom-addons/sale-workflow
git tag -a v1.0.0 -m "Stable version for production"
git push origin v1.0.0

Откат к предыдущей версии

Если обновление модуля вызвало проблемы:

cd /opt/odoo/custom-addons/sale-workflow
git log --oneline
git checkout <commit-hash>

Затем обновите модуль в Odoo:

odoo -d your_database -u sale_workflow --stop-after-init

Закрепление версий через requirements

Для Python-модулей используйте точные версии:

pip freeze > /opt/odoo/requirements-frozen.txt

При развёртывании используйте этот файл:

pip install -r /opt/odoo/requirements-frozen.txt

Работа с приватными репозиториями

Часто модули хранятся в приватных репозиториях компании.

Настройка SSH-ключей

Сгенерируйте SSH-ключ для пользователя odoo:

sudo -u odoo ssh-keygen -t rsa -b 4096 -C "odoo@yourserver"

Скопируйте публичный ключ:

sudo cat /home/odoo/.ssh/id_rsa.pub

Добавьте ключ в настройки Git-сервера (GitHub, GitLab, Bitbucket).

Клонирование приватного репозитория

Используйте SSH URL вместо HTTPS:

cd /opt/odoo/custom-addons
sudo -u odoo git clone git@github.com:yourcompany/private-modules.git

Использование токенов доступа

Для HTTPS используйте personal access token:

git clone https://YOUR_TOKEN@github.com/yourcompany/private-modules.git

Или настройте credential helper:

git config --global credential.helper store

При первом клонировании введите токен — он сохранится.

Клонирование через HTTPS с аутентификацией

Используйте URL с credentials:

git clone https://username:token@gitlab.com/yourcompany/private-modules.git

Для безопасности используйте переменные окружения:

GIT_USER="username"
GIT_TOKEN="your_token"
git clone https://${GIT_USER}:${GIT_TOKEN}@gitlab.com/yourcompany/private-modules.git

Структурирование кастомных модулей

Организуйте модули для удобства управления.

Разделение по категориям

Создайте структуру директорий по назначению:

mkdir -p /opt/odoo/custom-addons/{oca,proprietary,custom,community}

Размещайте модули по категориям:

  • oca/ — модули OCA
  • proprietary/ — проприетарные модули
  • custom/ — разработанные вами модули
  • community/ — модули от сообщества

Обновите конфигурацию:

addons_path = /opt/odoo/odoo/addons,/opt/odoo/custom-addons/oca,/opt/odoo/custom-addons/proprietary,/opt/odoo/custom-addons/custom,/opt/odoo/custom-addons/community

Использование символических ссылок

Создайте символические ссылки на отдельные модули:

cd /opt/odoo/custom-addons
ln -s /opt/odoo/sources/sale-workflow/sale_order_priority ./

Это полезно, когда в репозитории много модулей, но нужны только некоторые.

Организация через requirements-repos.txt

Создайте файл со списком репозиториев:

# OCA modules
https://github.com/OCA/sale-workflow.git@16.0
https://github.com/OCA/account-financial-tools.git@16.0

# Custom modules
git@github.com:yourcompany/custom-modules.git@main

Напишите скрипт для автоматической установки:

#!/bin/bash

while IFS= read -r line; do
    [[ "$line" =~ ^#.*$ ]] && continue
    [[ -z "$line" ]] && continue

    repo=$(echo $line | cut -d@ -f1)
    branch=$(echo $line | cut -d@ -f2)
    name=$(basename $repo .git)

    cd /opt/odoo/custom-addons
    if [ -d "$name" ]; then
        cd $name
        git pull origin $branch
    else
        git clone -b $branch $repo
    fi
done < requirements-repos.txt

Обновление модулей

Регулярное обновление модулей критично для безопасности и исправления багов.

Обновление через git pull

Обновите модуль до последней версии в ветке:

cd /opt/odoo/custom-addons/sale-workflow
git pull origin 16.0

Массовое обновление всех модулей

Обновите все git-репозитории в директории:

find /opt/odoo/custom-addons -type d -name .git -exec sh -c 'cd "{}" && cd .. && git pull' \;

Или используйте более читаемый скрипт:

#!/bin/bash

for dir in /opt/odoo/custom-addons/*/; do
    if [ -d "$dir/.git" ]; then
        echo "Обновление $(basename $dir)..."
        cd "$dir"
        git pull
    fi
done

Проверка обновлений перед применением

Проверьте доступные обновления без применения:

cd /opt/odoo/custom-addons/sale-workflow
git fetch origin
git log HEAD..origin/16.0 --oneline

Обновление модулей в Odoo после git pull

После обновления файлов модуля обновите его в базе данных:

odoo -d your_database -u sale_workflow --stop-after-init

Обновите все модули, которые изменились:

odoo -d your_database -u all --stop-after-init

Тестирование модулей

Перед установкой модулей на продакшн тестируйте их.

Создание тестовой базы данных

Создайте копию продакшн-базы для тестирования:

createdb -T production_db test_db

Или через psql:

psql -c "CREATE DATABASE test_db WITH TEMPLATE production_db OWNER odoo;"

Установка модуля в тестовую базу

Установите модуль только в тестовую базу:

odoo -d test_db -i new_module --stop-after-init

Запуск автоматических тестов

Запустите тесты модуля:

odoo -d test_db -i new_module --test-enable --stop-after-init

Запустите тесты без установки:

odoo -d test_db --test-enable --test-tags new_module --stop-after-init

Проверка зависимостей

Проверьте, что все зависимости установлены:

odoo -d test_db -i new_module --test-enable --stop-after-init 2>&1 | grep -i "error\|warning"

Удаление модулей

Иногда модуль нужно удалить полностью.

Деинсталляция через CLI

Деинсталлируйте модуль из базы данных:

odoo shell -d your_database

В shell выполните:

module = env['ir.module.module'].search([('name', '=', 'module_name')])
module.button_immediate_uninstall()

Удаление файлов модуля

После деинсталляции удалите файлы:

rm -rf /opt/odoo/custom-addons/module_name

Если модуль был установлен через git:

cd /opt/odoo/custom-addons
git rm -r module_name
git commit -m "Remove module_name"

Очистка базы данных

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

env.cr.execute("DELETE FROM ir_model_data WHERE module='module_name'")
env.cr.execute("DELETE FROM ir_model WHERE model LIKE 'module_name.%'")
env.cr.commit()

Миграция модулей между версиями Odoo

При обновлении Odoo модули нужно мигрировать.

Проверка совместимости

Проверьте, есть ли версия модуля для новой версии Odoo:

cd /opt/odoo/custom-addons/sale-workflow
git branch -r | grep 17.0

Переключение на новую версию

Переключитесь на ветку новой версии:

git fetch origin
git checkout 17.0

Обновление после миграции

После обновления Odoo обновите все модули:

odoo -d your_database -u all --stop-after-init

Создание скрипта миграции

Автоматизируйте миграцию:

#!/bin/bash

OLD_VERSION="16.0"
NEW_VERSION="17.0"
ADDONS_DIR="/opt/odoo/custom-addons"

cd $ADDONS_DIR

for dir in */; do
    if [ -d "$dir/.git" ]; then
        cd "$dir"
        if git branch -r | grep -q "$NEW_VERSION"; then
            echo "Миграция $dir на $NEW_VERSION..."
            git fetch origin
            git checkout $NEW_VERSION
            git pull origin $NEW_VERSION
        else
            echo "Версия $NEW_VERSION недоступна для $dir"
        fi
        cd ..
    fi
done

Troubleshooting: решение типичных проблем

Проблема: Модуль не появляется в списке

Причина: Odoo не просканировал директорию или путь не добавлен в addons_path.

Решение:

Проверьте конфигурацию:

grep addons_path /etc/odoo/odoo.conf

Проверьте права доступа:

ls -la /opt/odoo/custom-addons/module_name

Обновите список модулей:

odoo -d your_database -u base --stop-after-init

Проблема: Ошибка "No module named 'module_dependency'"

Причина: Не установлены Python-зависимости модуля.

Решение:

Найдите requirements.txt:

find /opt/odoo/custom-addons/module_name -name requirements.txt

Установите зависимости:

pip3 install -r /opt/odoo/custom-addons/module_name/requirements.txt

Проблема: Модуль установлен, но не работает

Причина: Не обновлены зависимости или есть конфликт версий.

Решение:

Проверьте логи Odoo:

tail -f /var/log/odoo/odoo-server.log

Обновите модуль принудительно:

odoo -d your_database -u module_name --stop-after-init

Проверьте зависимости в manifest.py:

cat /opt/odoo/custom-addons/module_name/__manifest__.py | grep depends

Проблема: Git authentication failed

Причина: Неправильно настроены SSH-ключи или токены доступа.

Решение:

Проверьте SSH-подключение:

ssh -T git@github.com

Проверьте настройки git:

git config --global --list

Используйте SSH вместо HTTPS:

git remote set-url origin git@github.com:username/repo.git

Проблема: Конфликт версий модулей

Причина: Установлены несовместимые версии зависимостей.

Решение:

Проверьте версии всех модулей:

odoo shell -d your_database

Выполните в shell:

modules = env['ir.module.module'].search([('state', '=', 'installed')])
for m in modules:
    print(f"{m.name}: {m.latest_version}")

Откатите проблемный модуль:

cd /opt/odoo/custom-addons/module_name
git log --oneline
git checkout <previous-commit>

Автоматизация через CI/CD

Интеграция установки модулей в пайплайн развёртывания.

GitLab CI пример

Создайте .gitlab-ci.yml:

stages:
  - test
  - deploy

test_modules:
  stage: test
  script:
    - cd /opt/odoo/custom-addons
    - git pull
    - pip3 install -r requirements.txt
    - odoo -d test_db -i module_name --test-enable --stop-after-init

deploy_production:
  stage: deploy
  script:
    - cd /opt/odoo/custom-addons
    - git pull origin main
    - pip3 install -r requirements.txt
    - odoo -d production_db -u module_name --stop-after-init
    - systemctl restart odoo
  only:
    - main

GitHub Actions пример

Создайте .github/workflows/deploy.yml:

name: Deploy Odoo Modules

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Setup SSH
        uses: webfactory/ssh-agent@v0.5.3
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Deploy to server
        run: |
          ssh user@server "cd /opt/odoo/custom-addons && git pull"
          ssh user@server "pip3 install -r /opt/odoo/custom-addons/requirements.txt"
          ssh user@server "odoo -d production_db -u all --stop-after-init"
          ssh user@server "systemctl restart odoo"

Docker integration

Создайте Dockerfile для Odoo с кастомными модулями:

FROM odoo:16.0

USER root

COPY custom-addons /opt/odoo/custom-addons
RUN pip3 install -r /opt/odoo/custom-addons/requirements.txt

RUN chown -R odoo:odoo /opt/odoo/custom-addons

USER odoo

Соберите образ:

docker build -t mycompany/odoo:16.0 .

Мониторинг модулей

Отслеживайте состояние модулей в продакшене.

Проверка установленных модулей

Получите список установленных модулей:

odoo shell -d your_database

Выполните:

installed = env['ir.module.module'].search([('state', '=', 'installed')])
for m in installed:
    print(f"{m.name} - {m.latest_version}")

Создание отчёта о модулях

Создайте скрипт для генерации отчёта:

#!/usr/bin/env python3
import xmlrpc.client

url = 'http://localhost:8069'
db = 'your_database'
username = 'admin'
password = 'admin'

common = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common')
uid = common.authenticate(db, username, password, {})
models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')

modules = models.execute_kw(db, uid, password,
    'ir.module.module', 'search_read',
    [[('state', '=', 'installed')]],
    {'fields': ['name', 'latest_version', 'author']})

print("Установленные модули:")
for m in modules:
    print(f"- {m['name']}: {m['latest_version']} (by {m['author']})")

Настройка алертов

Настройте мониторинг критичных модулей:

#!/bin/bash

CRITICAL_MODULES=("sale_management" "account" "stock")
DB="your_database"

for module in "${CRITICAL_MODULES[@]}"; do
    status=$(odoo shell -d $DB -c "env['ir.module.module'].search([('name','=','$module')]).state")
    if [ "$status" != "installed" ]; then
        echo "ALERT: Module $module is not installed!"
        # Отправка уведомления
    fi
done

Заключение

Профессиональное управление модулями Odoo через командную строку и git даёт полный контроль над системой. Основные преимущества этого подхода:

Воспроизводимость. Вы точно знаете, какие версии модулей установлены, и можете воссоздать окружение на любом сервере.

Автоматизация. Установка и обновление модулей полностью автоматизируются через скрипты и CI/CD.

Контроль версий. Git позволяет отслеживать изменения, откатываться к предыдущим версиям и работать с ветками.

Командная работа. Несколько разработчиков могут работать с модулями, используя стандартные git-инструменты.

Безопасность. Легко аудитировать изменения в модулях и отслеживать источники кода.

Ключевые команды для ежедневной работы:

Клонирование модулей:

git clone -b 16.0 https://github.com/OCA/sale-workflow.git

Обновление модулей:

cd /opt/odoo/custom-addons/sale-workflow && git pull

Установка в Odoo:

odoo -d your_database -i module_name --stop-after-init

Обновление модуля:

odoo -d your_database -u module_name --stop-after-init

Следуйте этим практикам, и управление модулями Odoo станет простым и предсказуемым процессом.

Содержание:
Закажите новый VPS со скидкой 15%
Любая локация на выбор. Стабильный сервер для ваших проектов по выгодной цене.
Выбрать VPS

Другие статьи