基本概念
理解 Odoo 结构中的各个层以及我们要使用的各类型组件的作用大有裨益。下面我们先总览下 Odoo 应用结构,然后把应用开发解构为对应组件。
然后 Odoo 发布有两个版本的定期更新:社区版和企业版,我们应了解两者之前的差别以及大版本发布对开发和部署所带来的变化。首先来看看 Odoo 的应用结构:
Odoo 结构
Odoo 遵循多层结构,即前述的数据层、逻辑层和展示层:
数据层是最底端一层,负责数据持久化存储,Odoo 借助 PostgreSQL来实现。Odoo 出于设计考虑仅支持 PostgreSQL 数据库,而不支持MySQL 这一类数据库(有第三方应用可集成 MySQL)。文件附件、图片一类的二进制文件通常存储在一个称为 filestore(目录) 的文件系统中。
“ 小贴士:也就是说 Odoo 实例的完整备份需包含数据库和 filestore 的拷贝。”
逻辑层负责与数据层的所有交互,并由 Odoo 服务完成。通常,底端数据库不应通过这一层获取,只有这样才能保证权限控制和数据一致性。在 Odoo的核心代码中包含供这一接口使用的 ORM (对象关系映射Object-relational Mapping)引擎。ORM 提供插件模块与数据交互的 API。
比如像客户和供应商这样的 partner 数据实体,是通过模型的 ORM 体现的。这一模型是一个 Python 对象,支持多种交互方法:create()方法用于创建新的伙伴记录,read()方法用于查询已有记录和对应数据。通用方法可在特定模型中实现指定业务逻辑,如 create()方法可以设置默认值或强化验证规则,read()方法可支持一些自动计算字段或根据执行操作的用户来实施权限控制。
展示层用于展示数据并与用户交互,通过客户端实现用户体验。客户端与 ORM API 交互来读、写、验证或执行其它操作,通过 RPC 调用 ORM API 方法。这些操作发往 Odoo 服务器端操作,然后结果发送回客户端做进一步处理。
对于展示层,Odoo 自带全面功能的 web 客户端。该客户端支持所有业务应用所需功能:登录会话、导航菜单、数据列表、表单等等。全局展示不会像前端工程师所认为的那样可深度定制,但易于创建功能性和连贯的用户体验。配套的展示层包含网站框架,可像其它 CMS 框架一样灵活地创建网页,当然需要额外的操作和 web 相关知识。网站框架支持通过 web 控制器实现代码来展示特定逻辑,而与模型内在逻辑进行区隔。前端工程师不会有什么操作上的障碍。
Odoo 服务端 API 非常开放,包含所有服务端功能。Web 客户端使用的 API 与其它应用的 API 并无不同。因此,其它的客户端实现均可做到,并且可以在任何平台上使用任意编程语言进行实现。可以创建桌面和移动端应用来提供不同用户界面,这充分利用了 Odoo 为业务逻辑和数据持久性而生的数据和逻辑层。
Odoo社区版 vs. 企业版
Odoo 是这款软件的名称,同时也是发布软件的公司名称。Odoo 采取核心开源的业务模式,社区版(CE)完全免费开源,而企业版(EE)则是一款付费产品。社区版提供了全部的框架功能和大多数与 Odoo 捆绑的业务应用基础功能。Odoo 采取 LGPL 开源协议,允许在开源模块之上添加专属扩展。企业版建立在社区版基础之上,包含社区版所有功能和额外的独有功能。值得一提的是企业版带有一个移动端优化的用户界面,两个版本的用户界面底层完全相同。Odoo 在线 SaaS 服务使用的是企业版,会部署一些企业版大版本发布之后的中间版本。
Odoo 的版本政策
在写本文时,Odoo 的稳定版本号是12,在 GitHub 上的分支为12.0,这也是本系列文章所采用的版本。近年来 Odoo 的大版本都是按年发布, Odoo 12是在2018年10月份的 Odoo 体验大会上发布的。官方支持最近的三个稳定版本,在12.0发布时,官方仍然维护11.0和10.0两个版本,而停止对9.0的支持,也就是不再对 bug和安全漏洞进行修复。
应当注意 Odoo 不同大版本间的数据库并不兼容,比如在 Odoo 11服务端运行早前版本的 Odoo 数据库,系统将无法运行。在不同版本间迁移数据库也颇费周折。对于插件模块也是如此,通常老版本中开发的插件无法在新版本中生效,所以在网上下载社区模块时,应注意选择对应的版本。
此外,大版本(如10.0, 11.0)会被频繁的更新,但这些通常仅仅是 bug 的修复。这些修复会确保 API 稳定,也就是模型数据结构和视图元素标识符也会保持稳定。这点非常重要,因为这意味着我们的自定义模块不会因上游核心模块的不兼容修改而崩溃。
Master 分支中的版本将产生下一个稳定的大版本,但在形成稳定版之前,将不会保持 API 稳定,我们应避免使用它来创建自定义模块。否则会如同在流沙中行进般不确定,我们无法保证什么改变会导致自定义模块的崩溃。
基本工作环境的准备
首先我们需要一个 Odoo 实例来进行学习,本文仅要求运行一个 Odoo 实例,与具体的安装方法无关。想要快速运行,我们可以使用一个预打包的 Odoo 发布,甚或是使用 Odoo SaaS 的试用版本。
“ 小贴士:中国本地化的Odoo SaaS体验版本可访问:【开源智造官网】获取线上测试试用环境”
在 Windows 上安装 Odoo
一键安装包可以在Odoo官网上下载,包含各个版本及主分支,这里有 Windows 安装包(.exe)、Debian 安装包(.deb)和 CentOS 安装包(.rpm)。要在 Windows 上安装,仅需在对应版本的 nightly 文件夹中找到.exe 并进行安装。安装包非常方便,它包含安装 Odoo 所需的所有部分:Python 3、PostgreSQL 数据库、Odoo 服务端以及其它 Odoo 依赖。安装时会创建一个 Windows 服务在开机时自动启动 Odoo 和 PostgreSQL。
“ 小贴士:除了Odoo官网提供的Windows安装包之外,开源智造咨询有限公司也提供了一键安装启动的绿色版Odoo体验包 ”
使用 Docker 容器安装 Odoo
Docker是一个快捷运行应用的跨平台解决方案,在 MacOS, Linux 和 Windows 上均可使用。与传统的虚拟机相比,容器技术使用更为简单、资源利用率更高。首先需要在操作系统中安装 Docker,可从Docker官网上下载免费使用的Docker CE(社区版),最新安装方法可在 Docker官网上查看。
应该注意虚拟化要求在 BIOS配置中进行开启,并且 Windows 版本的 Docker CE 需要有 Hyper-V,它仅在 Windows 10 企业版或教育版才会带有(Windows 系统要求),而 Mac系统需要为 OS X El Capitan 10.11或更新版本。对于其它的 Windows 和 MacOS 版本,应安装 Docker Toolbox,Docker Toolbox打包了 VirtualBox 并提供了预设置的 shell,用于作为操作 Docker 容器的命令运行环境。
在 Odoo 商店中包含 Odoo 镜像,在那里找到对应版本,按照提示进行安装。要使用 Docker运行 Odoo,我们需要两个容器,一个运行 PostgreSQL 数据库,一个运行 Odoo 服务。
安装通过命令行窗口完成,安装 PostgreSQL 容器:
docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:10
此时便会从互联网上下载最新的 PostgreSQL 镜像,并在后台开启一个容器来进行运行。
接下来安装 Odoo 服务容器,并且连接刚刚启动的 PostgreSQL 容器,在本地暴露8069端口:
docker run -p 8069:8069 --name odoo --link db:db -t odoo
此时便可在终端窗口看到实时的 Odoo 服务器日志,在浏览器中输入http://localhost:8069即可打开 Odoo 实例。
“ 小贴士:如果8069端口被占用了,则Odoo 服务启动会失败。此时我们需要停止占用该端口的服务或者使用-p 参数指定其它端口来运行 Odoo,如修改为8070端口(-p 8070:8069)。此时可能还需要通过-d 参数修改实例所需使用的数据库名称。”
以下Docker 的基本指令会有助于管理容器:
- docker stop <name> 停止指定容器
- docker start <name> 启动指定容器
- docker start -a <name> 启动容器并附带输出,如命令终端中输出的服务器日志
- docker attach <name> 重新添加容器输出至当前终端窗口
- docker ps 列出当前 Docker 容器
以上就是操作 Docker 容器的基本命令,万一在运行容器时出现问题,可以执行如下命令(可省略 container)重新来过:
docker container stop db docker container rm db docker container stop odoo docker container rm odoo
Docker 技术的应用非常广泛,更多知识可参见 Docker 官方文档。
其它安装选项
Odoo也有 Linux 系统的安装包,包含 Debian 系(如 Ubuntu)和 Red Hat 系(如 CentOS和 Fedora)。官方文档中有相关说明,也可参考开源智造咨询有限公司所编写的:《OdooERP架构部署指南》一书的有关章节内容。
对于源码安装会相对复杂,但可变性也更强,在第二章开发环境准备中还会详细介绍。

2020-02-23 15:09:40