coopdevs.odoo-role

一个 Odoo Ansible 配置角色

这是一个用于配置 Odoo 的 Ansible 角色。它支持:

  • Odoo 12
  • Odoo 11
  • Odoo 10

尚未测试 Odoo 13。

要求

一个 PostgreSQL(9.5 及以上)。

目前此角色仅支持通过对等认证访问 PostgreSQL 数据库。

因此,您需要在 PostgreSQL 中创建一个数据库,一个用户并授予其对该数据库的访问权限,以及一个具有相同用户名的系统用户。

例如,您可以在 PostgreSQL 中创建一个名为 odoo 的用户,并在系统中创建一个名为 odoo 的用户。

角色变量

可用的变量如下所示,带有默认值:

  • 版本

此角色支持使用两种策略安装 Odoo:git(从 git 仓库)和 tar(包或压缩发布文件)。

# Odoo 发布下载策略:tar 或 git
odoo_role_download_strategy: tar

# tar 下载策略的变量
# 支持任何 ansible 解压缩支持的格式,例如 unzip 或 gtar
# 从 Odoo.com 获得的 nightly 版本
odoo_role_odoo_version: 11.0 # 此文件外部不使用
odoo_role_odoo_release: 20190505 # 此文件外部不使用
odoo_role_odoo_url: "https://nightly.odoo.com/{{ odoo_role_odoo_version }}/nightly/src/odoo_{{ odoo_role_odoo_version }}.{{ odoo_role_odoo_release }}.tar.gz"
# 从 Odoo 社区的回包更新派生
# odoo_role_odoo_release: "11.0_2019-05-05"
# odoo_role_odoo_url: "https://gitlab.com/coopdevs/OCB/-/archive/{{ odoo_role_odoo_release }}/OCB-{{ odoo_role_odoo_release }}.tar.gz"
odoo_role_odoo_download_path: "{{ odoo_role_odoo_path }}/../odoo_releases/odoo_{{ odoo_role_odoo_version }}.{{ odoo_role_odoo_release }}.tar.gz"

# git 下载策略的变量
odoo_role_odoo_git_url: "https://github.com/OCA/OCB.git"
# OCA 的 OCB,11.0 分支。可能会支持到 14.0 发布。13.0 计划在 2019 年 10 月发布。
odoo_role_odoo_git_ref: "11.0"
# 定义 pip 版本的变量
odoo_role_pip_version: "23.1.2"

# 变量用于强制重新安装在 pyenv 中存在的 python 版本。当设置为 false 时,角色不会重新安装 python 版本(使用 `--skip-existing` 标志)。
odoo_role_force_pyenv_version: false
  • 用户和组
odoo_role_odoo_user: odoo
odoo_role_odoo_group: odoo
  • 目录结构
odoo_role_odoo_venv_path: /opt/.odoo_venv
odoo_role_odoo_path: /opt/odoo
odoo_role_odoo_bin_path: "{{ odoo_role_odoo_path }}/build/scripts-2.7/odoo"
odoo_role_odoo_python_path: "{{ odoo_venv_path }}/bin/python"
odoo_role_odoo_config_path: /etc/odoo
odoo_role_odoo_log_path: /var/log/odoo
odoo_role_odoo_modules_path: /opt/odoo/modules
  • 数据库
# 角色将创建的数据库数组。
odoo_role_odoo_dbs: [ "odoo" ]
# 在多数据库环境中,多个组使用同一实例并带有隔离视图,每个数据库名称必须与访问时的 DNS 名称匹配,以便 Odoo 将查询指向正确的数据库。
odoo_role_odoo_dbs: [ "odoo.some.coop", "erp.another.org" ]
# 仅在多数据库环境中,根据 HTTP 主机头筛选数据库。
odoo_role_dbfilter_enabled: true
# 这是 Odoo 要求用户输入的密码,以允许他们创建、删除等数据库。
odoo_role_odoo_db_admin_password: 1234
# 是否填充数据库示例数据。
odoo_role_demo_data: false
# 在登录前给出选择数据库的机会(当 dbfilter 禁用时),并启用数据库管理员网页接口。
odoo_role_list_db: false
  • Odoo HTTP 服务器设置
# 当 Odoo 在反向代理后运行时,将其设置为 127.0.0.1
odoo_role_odoo_http_interface: 0.0.0.0
# 当 Odoo 在反向代理后运行时,将其设置为 true
odoo_role_odoo_proxy_mode: false
# 指定您需要多少个 HTTP 工作进程(默认是 1)
odoo_role_workers: 2
  • Odoo 其他服务器设置
# 自定义 Odoo 超时
odoo_role_limit_time_cpu: 60
odoo_role_limit_time_real: 120

# 自定义 Odoo 内存限制
odoo_role_limit_memory_hard: 2684354560
odoo_role_limit_memory_soft: 2147483648
  • 核心模块列表以安装/更新
# 在运行服务器之前安装的模块列表。“共享”部分是所有数据库通用的,特定数据库模块放入它们的“数据库”部分。
odoo_role_odoo_core_modules_dict:
  shared:
    - base
  db1:
    - account
  • 社区模块列表以安装/更新
# 在运行服务器之前安装的模块列表。“共享”部分是所有数据库通用的,特定数据库模块放入它们的“数据库”部分。

odoo_role_odoo_community_modules_dict:
  shared:
    - web_responsive
  db1:
    - mis_reports
  • 强制更新 Odoo 模块 为了强制更新 Odoo 模块或模块列表,在执行配置时使用以下命令:
-e "odoo_role_modules_force_update=['l10n_es']"
  • 开发模式

Odoo 有一个模式,当代码更改时自动重载服务器并从代码读取视图,以加快开发过程。使用命令行参数 --dev 可以在开发模式下运行 Odoo。

odoo_role_dev_mode: true

如果此模式处于活动状态,则不会创建 systemd 单元,您需要手动运行 Odoo 进程。 可以使用以下命令启动它:

./odoo-bin -c /etc/odoo/odoo.conf --dev all

如果您需要使用 Rest Framework,并希望以开发模式启动服务器,请使用:

odoo_role_enable_rest_framework: true

此选项将 Odoo 配置文件添加部分和开发模式选项:https://github.com/OCA/rest-framework/tree/12.0/base_rest#configuration

如果您需要使用模块 queue_job,请使用:

odoo_role_enable_queue_job: true

此选项将 Odoo 配置文件添加选项,以将 queue_job 作为新线程/进程启用:https://github.com/OCA/queue/blob/12.0/queue_job/README.rst#id12

  • 全局服务器模块

如果您需要安装一些额外的全局服务器模块,除了 db_filterqueue_job,请使用:

odoo_role_odoo_server_wide_modules: ['module1', 'module2']

默认情况下,配置的全局模块有 webbase - 因为它们是 Odoo v12 中所有情况的强制模块,以及 db_filterqueue_job(如果相应变量被设置为 true)。

  • 工作进程配置

您还可以定义要使用多少个工作进程来执行作业:

odoo_role_channels: root:2

如果您希望使用模块 setnry,请使用:

odoo_role_enable_sentry: true
odoo_role_sentry_dsn: https://your_sentry_url
  • i18n 覆盖

我们可以使用以下变量强制进行 i18n 覆盖:

odoo_role_i18n_overwrite: true

您可以在清单中定义此变量,或在执行剧本时使用:

ansible-playbook playbooks/provision.yml -i ../my-inventory/inventory/hosts --ask-vault-pass --limit=host -e "{odoo_role_i18n_overwrite: true}"
  • 环境变量

如果您需要为服务器定义一组环境变量,可以使用 environment_variables 字典变量:

environment_variables:
  var_name1: "var_value1"
  var_name2: "var_value2"
  var_name3: "var_value3"

此选项将在 /etc/default/odoo 中添加一个文件,并在 Systemd 服务中添加 EnvironmentFile 属性,指向 /etc/default/odoo.

角色标签

  • 使用 only-modules 标签

此标签帮助您安装或更新 Odoo 模块,而无需进行完整设置。使用 --tags 选项运行剧本:

ansible-playbook playbook.yml --tags "only-modules"

开发者辅助工具

您可以通过将 odoo_role_dev_helpers 变量设置为 false 来跳过此步骤。

odoo_role_dev_helpers: true

社区角色

部署

要使用社区角色,您需要在服务器上部署这些模块。此角色管理模块的部署,使用 pip

您可以定义一个 requirements.txt 文件来管理模块并确保安装的版本:

# requirements.txt
odoo11-addon-contract==11.0.2.1.0
odoo11-addon-contract-sale-invoicing==11.0.1.0.0
odoo11-addon-contract-variable-qty-timesheet==11.0.1.0.0
odoo11-addon-contract-variable-quantity==11.0.1.2.1

默认的 requirements.txt 文件路径是 "{{ inventory_dir }}/../files/requirements.txt"

您可以使用 odoo_role_community_modules_requirements_path 变量来更改它。

这允许您拥有不同的 requirements.txt 文件并根据条件使用它们。

例如,您可以将其设置为 {{ inventory_dir }}/../files/requirements-dev.txt,并在开发环境中重新定义这个变量。

安装

一旦模块在服务器上,您需要将它们安装到数据库中。

定义一个变量 odoo_role_odoo_community_modules,列出您要安装的模块名称:

# inventory/group_vars/all.yml
odoo_role_odoo_community_modules: 'contract,contract_sale_invoicing'

依赖关系

此角色目前不依赖其他角色(尚未)。

示例剧本

- hosts: odoo_servers
  roles:
    - role: coopdevs.odoo-role
      vars:
        odoo_role_odoo_db_name: odoo-db
        odoo_role_odoo_db_admin_password: "{{ odoo_admin_password }}"
        odoo_role_download_strategy: tar
        odoo_role_odoo_version: 11.0
        odoo_role_odoo_release: 20180424

开发与测试

为了开发和测试此角色,我们使用 devenv 来管理 Linux 环境中的本地虚拟机。

您可以使用 tests 文件夹中的 .devenv 文件来创建虚拟机。

devenv

然后,您可以使用以下命令测试角色:

ansible-playbook devenv.yml -i inventory

这将配置一个包含 PostgreSQL 的虚拟机,并执行该角色。

发布

要发布新版本:

  • 转到 releases,点击 Draft a new release
  • Choose a tag 上创建一个新标签,并更新描述以添加更新日志,如下例所示:
## 更新内容
* feat: 更新的插件路径顺序来自 @oyale,链接:https://github.com/coopdevs/odoo-role/pull/135
* 向开发环境添加 pytest 和 coverage 包,来自 @oyale,链接:https://github.com/coopdevs/odoo-role/pull/136


**完整变更日志**: https://github.com/coopdevs/odoo-role/compare/v0.3.4...v0.3.5
  • 发布版本后,前往 ansible galaxy 导入新版本。您应该在 My content 下找到 odoo-role 仓库。

许可

GPLv3

作者信息

@ygneo http://coopdevs.org

安装
ansible-galaxy install coopdevs.odoo-role
许可证
gpl-3.0
下载
22.4k
拥有者
Coopdevs, Free and Open Source Software for Social and Solidarity Economy.