在更深刻了解 Odoo 开发以前,咱们应配置好开发环境并学习相关的基础管理任务。本文中,咱们将学习建立 Odoo 应用所需用到的工具和环境配置。这里采用 Ubuntu 系统来做为开发服务器实例的主机,能够是云服务器、本地服务器或者PC 上的虚拟机。css
本文主要内容有:html
本文将介绍如何在开发电脑上使用源码安装 Odoo,建议使用系统是Ubuntu 18.04 ,也能够选择 Windows 10,文中会介绍到如何在 Windows 下安装 Linux 子系统。相关代码可参见 GitHub 仓库。前端
推荐使用Debian/Ubuntu来运行 Odoo 服务。虽然 Odoo 是一个跨平台的系统,能够运行在不一样的操做系统上,但事实上 Odoo 的研发(R&D)团队把 Debian 系做为参照部署平台。而且 Odoo 本身的 SaaS 平台也运行在 Debian 之上。这也是社区中最主流的选择,说明使用Debian 或 Ubuntu 会更容易寻求到帮助和建议。你也许仅有 Windows 相关背景,但对Debian 系有必定了解也很是重要。node
固然你依然能够选择本身喜欢的系统,如 Windows, Mac 或其它Linux发行版本(如 CentOS)。python
ℹ️本文中介绍的是在一个全新的系统中进行开发,若是你在已有系统中开发,请作好备份以在出错时进行恢复linux
在 Windows 系统中,最简单的方案是使用 Windows 10自带的Linux子系统(WSL – Windows Subsystem for Linux)。经过子系统,咱们能够在 Windows 内运行 Ubuntu 系统,足以应对 Odoo 开发所需的一切。更多 WSL 相关知识请参考官网。git
WSL 是Windows 10最近发布中的一个可选功能,使用前须要先启用。启用后便可在商店中安装 Ubuntu,详见官方帮助文档。github
在写本文时,须要以下步骤来完成安装:web
第一步是要确保 WSL 功能已开启,以管理员身份打开 PowerShell 并运行:正则表达式
以上命令须要在单行执行,而后根据提示重启电脑。而后咱们就能够安装Ubuntu Windows应用,最简单地方式是在自带微软商店中搜索 Ubuntu,在写本文时最新的长期支持版本(LTS)是18.04,按照提示进行安装便可。运行 Ubuntu 应用会打开一个bash 命令行,这里能够输入在 Ubuntu 系统中相同的命令。须要记住在安装时配置的用户名和密码,由于在进行提权操做时会要求输入该信息(如运行 sudo 时)。
咱们还能够选择在电脑上安装 Linux,或在局域网乃至云端安装 Linux 系统。咱们须要一台基于 Debian 的服务器用于 Odoo 服务端开发,若是此前你没有接触过 Linux, 请注意 Ubuntu 是一个基于 Debian 的 Linux 发行版本,因此二者极为类似。Odoo 保证可在当前稳定的 Debian 或 Ubuntu 版本上运行,在写本文时,分别为 Debian 9(Stretch)和Ubuntu 18.04 LTS(Bionic Beaver)。
更推荐选择 Ubuntu,因安装上较 Debian 容易。可从 Ubuntu 官网上下载 ISO 镜像,建议使用最新的 LTS 版本。若是你刚刚接触 Linux,使用预配置的镜像会更容易些。TurnKey Linux提供了含 ISO 的多种格式预安装镜像。ISO 格式能够在任意虚拟化软件上使用,即使是裸机。较优的选择是 LAPP 镜像,已安装了 Odoo 所需的Python 和 PostgreSQL。
为可以进行远程操做,一般需安装OpenSSH服务。在 Ubuntu 的设置助手中有这一服务,但也能够经过以下命令来进行安装:
而后须要使用 SSH(Secure Shell)客户端来链接 Odoo 的宿主机,Windows 中经常使用的有 PuTTY、XShell 和 SecureCRT。
能够经过以下命令来查看服务器的 IP 地址:
使用 SSH 客户端能够远程操做 Linux 主机,还能够得到比在虚拟机终端操做更好的体验,咱们能够更容易的复制粘贴、修改窗口大小、字体等。
补充:关于虚拟机 Hyper-V, VMware, VirtualBox和 Vagrant 都是很好的方案,网上有不少资料,限于篇幅本文再也不介绍。
在本系列文件第一篇使用开发者模式快速入门 Odoo 12中,咱们介绍了快速运行 Odoo 的各类方式,本文中咱们将更深刻一步,直接经过源码来安装、运行 Odoo。
Odoo使用Python 编程语言,数据存储使用 PostgreSQL数据库,这是对 Odoo 主机的两大要求。要使用源码运行 Odoo,首先要安装其所依赖的 Python 库。而后从 GitHub 上下载源代码,虽然能够下载 zip 和 tar 文件,但使用 Git版本管理工具获取代码会更优。
ℹ️具体依赖的安装根据操做系统和安装的 Odoo 版本可能会不一样。若是在上述步骤中存在问题,请参考官方文档,可切换版本查看其它版本的操做步骤。
Odoo 要使用到 PostgreSQL服务,典型的开发设置是使用安装 Odoo 的同一台机器安装PostgreSQL。下面咱们就来安装数据库服务:
最后这条命令为当前系统用户建立了一个PostgreSQL用户,用于 Odoo 实例建立或删除数据库时使用。
若是在 WSL内运行 Ubuntu,注意系统服务不会自动启动。也就是说运行任何须要数据库链接的命令(如createuser或启动 Odoo 服务)时都要手动开启PostgreSQL服务,手动启动PostgreSQL服务执行:sudo service postgresql start。
要运行 Odoo,咱们还须要一些系统包和软件。获取版本控制的源码应安装 Git,安装运行 Odoo要求 Python 3.5或以后的版本、Python 3的 pip 以及一些 Python 包的系统依赖:
Odoo 9, 10, and 11版要用到less CSS 预处理器,因此对这些版本须要执行以下安装:
Odoo 12中无需执行如上命令,但一般咱们也会用到前述版本,若是有此状况则仍需安装。
ℹ️Odoo 12中的修改
CSS 预处理器由 less 改为了 Sass,Sass 编译器无需进行额外安装,在 Odoo 12的 Python 依赖中已经安装了libsass-python。作出这一更改的缘由有:Bootstrap 4由 less 调整为 Sass,已有 Python绑定和避免对 Node.js(或 Ruby)的依赖。
为便于管理,咱们将在家目录下建立一个/odoo-dev目录做为工做目录。在本系列文章中咱们均假设 Odoo 安装在/odoo-dev目录下。
Odoo 使用的是 Python 3(3.5或以后的版本),那么在命令行中咱们将再也不使用python和pip,而是用python3和 pip3。
ℹ️Odoo 11的修改
从版本11开始,Odoo 运行在 Python 3.5及之后的版本上,Odoo 11依然支持 Python 2.7,但 Odoo 12仅能运行在Python 3.5+的环境中。Odoo 10及以前的版本仅可运行在Python 2.7上。
要从源码安装 Odoo,咱们首先要从 GitHub 上克隆一套 Odoo 源代码:
~是用户家目录的简写,好比/home/alan。
若是使用 WSL Windows 子系统,家目录存放在一个Windows 系统文件夹中一个不易于发现的地方。避免这一状况的一个方法是把工做文件放在经常使用的文件夹下,而后在子系统中使用软连接(相似 Windows中的快捷方式)。好比mkdir /mnt/c/Users/Public/odoo-dev建立C:\Users\Public\odoo-dev工做目录,而后ln -s /mnt/c/Users/Public/odoo-dev ~/odoo-dev建立~/odoo-dev Linux目录,其实是 Windows 目录的连接。如今就可使用~/odoo-dev运行全部的命令,好比前述的 git clone,文件将存放在C:\Users\Public\odoo-dev下。
Git命令中的-b 12.0明确代表要下载 Odoo 12.0分支,在写本文时,这显得有些多余,由于这正是当前默认的分支。–depth=1表示仅下载当前修订版本,而不是全部历史修改记录,这会使下载更快、内容更少。
小贴士:如需在后续下载历史提交内容,能够运行git fetch –unshallow
在运行 Odoo 以前,应安装requirements.txt中所声明的 Python 依赖:
补充:安装时如因requirements.txt指定了Babel==2.3.4而报错,请修改Babel==2.3.4为Babel或 Babel>=2.3.4后再从新执行以上命令;另内存太小也可能致使不易察觉报错,测试时1G 内存报错,调整为2G 后正常安装
这其中的不少依赖均可以经过 Debian 包安装,如python3-lxml,因此使用 apt 包管理器是一个有效的替代方案。这样的优点是在必要时能够自动安装系统依赖,使用的依赖列表能够在./odoo/debian/control中找到。
还有一些requirements.txt中未包含的 Python 包,亦可安装来避免警告或用于开启额外的功能:
小贴士:pip3工具能够经过好几种方式安装:系统包的方式和原生 Python 的方式。若是pip3报了 import error,在系统中从新安装或能解决问题。对应的命令为sudo python3 -m pip uninstall pip && sudo apt install python3-pip –reinstall
如今,经过以下命令可启动 Odoo 实例:
如需中止服务并回到命令行,按下 Ctrl + C。
小贴士:Odoo 10中的修改
如今启动 Odoo的脚本是./odoo-bin,而以前的 Odoo 版本中为./odoo.py
默认Odoo 实例监听8069端口,因此在浏览器中访问http://<server-address>:8069 就能够访问到 Odoo 实例。对于开发者来讲,咱们会须要使用到多个数据库,因此在命令行中建立会更为方便,后面会介绍如何实现。如今在命令行终端中按下Ctrl + C 中止 Odoo 服务并回到命令行。
要按照 Odoo 的数据模式建立和初始化 Odoo 数据库,咱们应使用-d 参数运行 Odoo 服务:
初始化 testdb 数据库可能要花上一分钟,通常会以Modules loaded的 INFO 日志信息结束。它有可能不是最后一条日志信息,但在倒数三到四行中能够找到。此时,服务器就能够监听用户请求了。
ℹ️Odoo 9中的修改
从 Odoo 9开始,若是数据库不存在会被自动建立。但在 Odoo 8中并不是如此,需使用PostgreSQL命令行中的createdb命令手动建立
默认状况下,数据库初始化时会带有演示数据,做为开发数据库这一般颇有用。至关于在前端建立数据库时勾选了Load demonstration data。如在初始化时无需带有演示数据,在命令行中添加–without-demo=all。
小贴士:在写本文时Ubuntu WSL中有一个针对 PostgreSQL 的问题,该环境下没法新建空数据库。一个解决方案是手动经过createdb 12-library命令建立空数据库。这样会重复提示WARNING: could not flush dirty data: Function not implemented。虽然存在警告信息,但数据库正常建立了。按下Ctrl + C中止警告,使用命令行便可启动 Odoo 并初始化数据库。
当前用户须要是 PostgreSQL 的超级用户才能建立新数据库,前文中在安装过程当中已经进行相关操做。
小贴士:对于开发环境,使用数据库超级用户来运行 Odoo 实例毫无问题。但在生产环境中,Odoo最佳安全实践推荐不要使用数据库超级用户权限的用户来运行生产实例。
Odoo 实例已经运行起来了,如今咱们能够经过http://<server-name>:8069在浏览器中进行访问。这时会出现登陆界面,若是不知道主机名能够经过 hostname 命令查看或经过 ifconfig 查看 IP 地址。默认管理员的用户名和密码均为 admin。登陆后便可看到 Apps菜单,及可安装的应用。
在命令终端中按下Ctrl + C能够中止 Odoo 服务实例并回到命令行。按下上方向键能够回到上一条命令,这样能够经过一样的命令再次快速启动 Odoo。
前面咱们学习了如何经过命令行建立和初始化 Odoo 数据库。管理数据库还有更多的命令值得咱们学习。虽然 Odoo 服务能够自动地进行数据库管理,咱们仍是可使用以下命令来手动建立 PostgreSQL 数据库:
更有趣的是,Odoo 能够经过–template 参数拷贝已有数据库来建立新的数据库。要进行这一操做,被拷贝的数据库不能被链接,因此要确保 Odoo 实例已中止而且没有其它应用链接该数据库。命令以下:
事实上,每当建立数据库时都会使用一个模板,若是没有指定模板,会使用一个名为 template1的预设模板。
要在系统中列出已有数据库,须要使用 PostgreSQL 的 psql 工具及-l 参数:
执行上述命令会列出咱们截至目前所建立的数据库。若是执行了前述操做,能够看到列表中有MyDB和MyDB2。列表中还会显示 每一个数据库所使用的编码,默认为UTF-8,这也是 Odoo 所须要的数据库编码。
如需删除数据库,执行dropdb命令:
如今咱们已学习了数据库的基本知识。要了解更多 PostgreSQL请参见官方文档或PostgreSQL使用汇总。
警告:dropdb操做是不可撤销的,在对重要数据库执行该命令时请务必备份数据库
Odoo 服务还支持一些其它参数,可经过–help 来查看更多参数:
咱们在下面的部分将会学习一些重要参数,首先咱们先学习下如何把当前使用参数保存到配置文件中。
大多数的参数均可以保存到配置文件中。默认 Odoo 使用.odoorc文件。Linux 系统中缺省的路径是在家目录($HOME)中,而在 Windows 中则和运行 Odoo 的可执行文件放在同一个目录中。
ℹ️在老版本的 Odoo/OpenERP 中,默认的配置文件为.openerp-serverrc,为保持向后兼容,存在该文件且没有.odoorc文件的状况下会使用该文件。
一个全新安装中不会自动建立.odoorc配置文件,咱们应使用–save参数来保存,若是配置文件不存在则会建立默认配置文件:
此处咱们还使用–stop-after-init参数以在执行结束后中止服务。这一参数常在运行测试或要求运行模块升级来检测是否正确安装时使用。
小贴士:命令行参数能够缩短到保持不混淆的程度,如–stop-after-init可缩写为–stop。
如今能够经过以下命令来查看缺省配置文件:
以上命令会显示全部配置项及配认值,编辑文件后在下一次启动 Odoo 实例后生效,输入 q 回到命令行。
咱们还可使用–conf(或-c)参数来指定配置文件。配置文件无需包含全部配置项,仅包含需修改默认值的配置项便可。
–http-port=(或-p)参数能够修改实例的监听端口(默认端口8069),不一样的端口可让咱们在同一台机器上运行多个实例。
Odoo 11的修改:在 Odoo 11中引入–http-port参数以替代此前版本使用的–xmlrpc-port
下面就能够作个尝试,打开两个终端,第一个中输入
第二个中输入
此时就在同一台机器上使用不一样端口运行了两个 Odoo 实例,这两个实例可使用同一个数据库或不一样数据库。这取决于咱们使用的配置参数,而且两个端口上也能够运行相同或不一样版本的 Odoo。
小贴士:不一样 Odoo 版本必须使用不一样的数据库。尝试在不一样版本上使用相同数据库将没法正常运行,由于各大版本采用了不兼容的数据库模式。
进行 Odoo 开发时,常常会使用多个数据库,有时还会用到不一样版本。在同一端口上中止、启动不一样服务实例,或在不一样数据库间切换,会致使网页客户端会话异常。由于浏览器会存储会话的 Cookie。
在浏览器中使用私有模式访问实例能够避免这一问题。另外一优良实践是在服务实例上开启数据库过滤器,这样能够确保实例仅容许对指定数据库的请求,而忽略其它请求。
Odoo 11中的修改:
从Odoo 11开始,–database(或-d)参数可接收逗号分隔的多个数据库名,设置–database参数时也会自动设置–db-filter参数,这样仅有这个数据库才能为服务实例使用。对于 Odoo 11以前的版本,咱们须要使用–db-filter来限制可访问的数据库。
–db-filter可限制 Odoo 实例所能使用的数据库。它接收一个正则表达式来过滤可用数据库名,要精确匹配一个名称,表达式须要以^开头并以$结束。例如,仅容许testdb数据库,咱们可使用以下命令:
使用–database和–db-filter参数来匹配同一数据库是一个良好的实践。事实上从 Odoo 11开始默认会为–database设置对应的–db-filter。
–log-level 参数可用于设置日志级别,这有助于了解服务的情况。例如要开始调试日志级别,使用–log-level=debug参数。还有以下选项:
其实–log-level是设置Odoo 日志级别的简化方式,此外经过更完整的–log-handler参数能够有选择地打开/关闭日志记录器。默认状况下日志会做为标准输出(打印到屏幕),可是能够经过logfile=参数来指定日志存储文件。
在 Odoo 实例中产生新的模块并安装,对于初学者总会容易搞不清。下面一块儿来熟悉这一点。
网络上有不少 Odoo 模块,Odoo应用商店能够下载一系列模块安装到系统中。另外一个重要的资源是Odoo 社区联盟(OCA – Odoo Community Association)维护的模块,可在 GitHub 上查找。OCA 是一个协调社区贡献的非营利组织,它同时提高软件质量,推广最佳开发实践和开源价值观。可经过https://odoo-community.org/来进一步了解 OCA。
为 Odoo 添加模块,仅需将其拷贝到官方插件的 addons 文件夹中便可,按前述安装即为~/odoo-dev/odoo/addons/。但这不是一个好的实践,咱们安装的 Odoo 是由 Git 版本控制的代码仓库,将会与上游 GitHub 仓库保持同步,在其中加入外部插件会不利于管理。
避免这一点,咱们能够选取一个或多个存放模块的目录,让 Odoo 服务也会从该目录中查找模块来使用。咱们不只能够把自定义模块放在一个不一样的目录下不与官方的混在一块儿,还能够经过不一样目录组织这些模块。
咱们能够经过下载系统课程的代码来准备供 Odoo 安装的插件模块,获取 GitHub 上的源码,执行以下命令:
此时与/odoo同级的/library文件夹中将包含一些模块,如今就需告知 Odoo 这个新的模块目录。
Odoo 服务有一个addons_path参数可设置查找插件的路径,默认指向Odoo 服务所运行处的/addons文件夹。咱们能够指定多个插件目录,这样就能够把自定义模块放到另外一个目录下,无需与官方插件混到一块儿。
经过以下命令可包含新的模块路径来运行服务:
仔细看服务日志,会发现有一行报告插件路径,信息相似INFO ? odoo: addons paths: […],确认下里面是否有library/目录。
维护多个 Odoo 版本的代码在 Odoo 开发中很常见,须要整理一下来保持项目在同一台开发机器上并行。改变版本有时会须要上下文的切换。好比,如今 Odoo 的启动执行文件是odoo-bin,而在老版本中是odoo.py。迁移到 Python 3后又更易混淆了,咱们要知道是选择python/pip仍是python3/pip3,这取决于使用的 Odoo 版本。
Python 有一个在同机器上管理独立环境的工具virtualenv。每一个环境有本身的Python 可执行文件和库文件,仅需在使用时激活环境,而后python和 pip 无需指定就能够在相应的安装了 Python库的环境下运行。要在Debian/Ubuntu上使用virtualenv,执行以下命令:
若是咱们使用的工做目录是~/odoo-dev,并把 Odoo 12源代码克隆到~/odoo-dev/odoo目录中,咱们能够这样进行虚拟环境的建立:
一旦激活了虚拟环境,咱们能够在其中安装 Odoo,能够经过 pip 来进行操做:
以上代码会将~/odoo-dev/odoo中的 Odoo源代码安装到虚拟环境中。-e 参数很是重要,这是一个可编辑安装。它不会复制一份代码到虚拟环境中,仅仅只是保留了一个到原地址 Odoo 代码的引用。由于使用到了源代码,源代码的修改在当前环境中也一样生效。
Odoo 的 Python 依赖会被自动安装,因此无需使用requirements.txt来进行手动安装。咱们也能够经过 pip 来安装其它所需的 Python 库:
注意咱们无需记住使用的是 Python 2仍是 Python 3,这里的pip 命令会指向正确的版本。而后就能够运行 Odoo 了,pip 安装建立了一个bin/odoo命令,可在任何位置运行,无需涉及源代码所在目录。
小贴士:若是决定使用虚拟环境,任何要使用odoo-bin运行的命令,均可以替换为 odoo
如下命令会启动并关闭所安装版本 Odoo,打印一些日志信息用于肯定 Odoo 版本和使用的插件:
推荐的操做是将配置文件放在虚拟环境文件夹中。如下会为咱们的项目初始化一个12-library 数据库,并建立一个对应的12-library.conf 文件:
自此开始,咱们可经过以下命令启动图书项目 Odoo 服务:
最后在完成后,经过以下命令来退出环境:
假设咱们要在同一台机器上使用 Odoo 10项目,它使用的是 Python 2.7,经过以下命令建立环境、安装 Odoo:
要使得在 Odoo 版本间切换更容易,咱们能够在~/odoo-dev/odoo10目录下再为10.0分支克隆一份源代码。而后建立虚拟环境,激活环境,使用 pip建立一个 Odoo 10可编辑安装。virtualenv没有使用-p 参数指定 Python 版本,默认为 Python 2,也就是 Odoo 10所需的版本。
若是系统中没有 Python 2,Ubuntu 18.04默认就不带 Python 2,则须要执行以下命令来进行安装:
社区贡献的插件能够打包成 Python 库,发布到 Python 包索引(PyPI -Python Package Index),而后像其它库同样使用 pip 安装。为了能使用这一方法,Odoo 自动添加了site-packages/文件夹至插件配置路径,用于安装库文件。打包能够经过setuptools-odoo工具。
OCA 项目使用该工具打包并发布插件至 PyPI。因不一样 Odoo 版本中存在相同模块,模块名以前会加一个 Odoo 版本前缀。例如odoo12-addon-partner-fax 是Odoo 12的partner_fax PyPI 包,它为 partner 添加了一个传真字段。
如需从 PyPI 下载该模块及依赖,并随后安装至odoo12env环境,使用以下命令:
为便于开发者,Odoo 有一个–dev=all参数可激活一些开发者友好的功能。
Odoo 10中的修改:
–dev=…参数是在 Odoo 10中引入的,它取代了此前版本中更简单、功能也更少的–debug参数
这启用了一些有用的功能可加快开发流程,最重要的以下:
–dev=all将在抛出异常时启动 Python调试器(pdb),在服务报错后作后验(postmortem)分析很是有益。注意这一设置对日志输出不产生任何影响。有关 Python 调试器命令详情可参见Python 官方文档。
虽然 all 值适用于大多数状况,–dev还可接一串逗号分隔的选项。缺省状况下会使用Python 调试器 pdb。有些人会倾向安装、使用其它调试器,来改善功能和易用性。Odoo 是容许咱们指定调试器的,经常使用的有ipdb和pudb。在本系列第八篇Odoo 12开发之业务逻辑 – 业务流程的支持中,咱们将介绍如何在 Odoo 开发中使用调试器。
要自动侦测代码文件的变化 ,服务开发者模式需安装一个额外的依赖python3-watchdog。咱们须要在Ubuntu/Debian系统中安装它以后才可以使用,命令以下:
对于 Odoo 11以前的版本,使用的是 Python 2,则需安装python-watchdog。一样可以使用 pip 安装,命令为pip install watchdog。
在本文中,如们学习了如何在 Ubuntu 系统中安装 Odoo 并从 GitHub 上获取 Odoo源码,以及如何建立Odoo 数据库和运行 Odoo 实例。
如今咱们的 Odoo 环境可正经常使用于开发,而且也能够对数据库和实例进行管理。有了这些,咱们能够进行一步的学习了。在下一篇文章中,咱们将从零开始建立第一个 Odoo 模块,并理解相关的主要元素。