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/— модули OCAproprietary/— проприетарные модули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 станет простым и предсказуемым процессом.