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_filter
和 queue_job
,请使用:
odoo_role_odoo_server_wide_modules: ['module1', 'module2']
默认情况下,配置的全局模块有 web
和 base
- 因为它们是 Odoo v12 中所有情况的强制模块,以及 db_filter
和 queue_job
(如果相应变量被设置为 true
)。
- 工作进程配置
您还可以定义要使用多少个工作进程来执行作业:
odoo_role_channels: root:2
- sentry 支持
如果您希望使用模块 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"
开发者辅助工具
- 一个带有
ct
别名的 模板 被渲染到/etc/profile.d/
。 - 添加
odoo-backup
和odoo-restore
脚本。
您可以通过将 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