有几种方式去设置odoo的开发环境,我们将逐个介绍他们。
如果你之前没有接触过odoo的开发环境,那么有几个必要的概念你是需要了解的。在这一章节中,我们首先介绍odoo的生态。然后我们在进行介绍odoo开发环境的安装。
在这一章节中,我们主要涉及以下内容。
- 理解odoo的生态
- 源码安装
- 管理odoo的数据库
- 存储实例配置
- 激活odoo开发环境
- 更新插件列表
一、理解odoo的生态
妞妞为开发者提供了开箱即用的开发模式。这可以让开发者很快完成项目建设。
odoo的版本
妞妞有两个版本,第一个是社区版,也是开源的。第二个是企业版。是需要软件授权的。企业班只是在社区版的基础上增加了一些新的功能。社区版基于LGPLv3协议开源,并集成了基础的ERP应用。企业版是妞妞公司独有的协议。社区版有更强大的功能。比如全套的记账,开发,以及网络电话等设企业半夜将提供无限制的bug修复。下面这张表格说明了企业版于社区版的关系。
Git 存储库
妞妞的源码都是托管在github上。
每年妞妞都会发布。一般主要的版本(Long-Term Support LTS)以及一些小版本。小版本主要使用在SaaS服务上。
Runbot
Runbot是妞妞的自动测试环境。它可以自动拉去github中最新的4次提交,并进行构建。在这,你可以使用企业版以及他们的分支。(源码是看不到的)
每次构建有不同的颜色,这代表这测试用例的情况。绿色代表通过,红色代表失败。你可以查看具体的日志。每次构建会有两个数据库,一个是安装了全部模块的数据库,一个是基础数据库。每次构建都会安装一些模拟数据。
Note
访问:http://runbot.odoo. com/runbot.
几个基本的账户
- admin,admin
- demo,demo
- portal,portal
这是一个公开的测试环境,任何人都可以使用。所以说在你测试的时候也有可能其他人也在测试相同的分支。
妞妞的app商城
正如其名,商城,大家上去看看就懂了。
妞妞社区协会
**Odoo Community Association (OCA)**非盈利组织,管理者不少好模块。但是有不少模块都是老版本的了,跟新的版本不一定兼容。如有需要,需要自己修改。地址如下:https://github.com/OCA
官方的帮助论坛
有问题先上论坛,有很多坑其实大家都在踩。https://help.odoo.com.help.odoo.com.
妞妞的在线学习平台
官方的视频教程,访问地址:https://www.odoo.com/slides.
二、源码安装
官方推荐ubuntu,这本书使用的是Ubuntu Server 18.04 LTS版本。
个人的开发环境最好跟生产环境相同,避免不少坑。
准备
Ubuntu 18.04、管理员账户
一些配置可能需要账户名,可通过whoami命令获取用户名。
步骤
- 安装依赖
$ sudo apt-get update
$ sudo apt install git python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools libpng12-0 libjpeg-dev gdebi -y
- 下载安装wkhtmltopdf
$ wget https://github.com/wkhtmltopdf/wkhtmltopdf/ releases/download/0.12.5/wkhtmltox_0.12.5-1.trusty_amd64. deb
$ sudo dpkg -i wkhtmltox_0.12.5-1.trusty_amd64.deb
- 安装postgresql数据库
$ sudo apt install postgresql -y
- 配置PostgresSQL:
$ sudo -u postgres createuser --superuser $(whoami)
- 配置git
$ git config --global user.name "Your Name"
$ git config --global user.email youremail@example.com
- 下载源码
$ mkdir ~/odoo-dev
$ cd ~/odoo-dev
$ git clone -b 14.0 --single-branch --depth 1 https:// github.com/odoo/odoo.git
- 安装odoo14的虚拟环境并激活(个人使用的是pipenv)
$ python3 -m venv ~/venv-odoo-14.0
$ source ~/venv-odoo-14.0/bin/activate
- 安装依赖
$ cd ~/odoo-dev/odoo/
$ pip3 install -r requirements.txt
- 创建odoo实体
$ createdb odoo-test
$ python3 odoo-bin -d odoo-test –i base --addons- path=addons --db-filter=odoo-test$
- 登录系统http://localhost:8069,账户名密码设置为admin
工作原理
步骤1,安装核心依赖,用于安装odoo。
步骤2,安装wkhtmltopdf。
PostgreSQL配置
步骤3,安装数据库。
步骤4,创建一个与当前用户相同的用户。-s 是授予用户超级权限。odoo通过psycopg2连接数据库。为了访问数据库,odoo使用如下默认配置:
- 默认psycopg2通过当前系统用户相同的用户名去连接本地数据库,支持无密码登录。
- 本地连接使用的是Unix domain sockets。
- 数据库默认使用5432端口。
因为我们使用的是开发环境,因此我们给用户授予了超级权限。但在生产环境下,要使用 --createdb命令替换--superuser。我们可以通过--pwprompt参数创建密码。如果用户已存在,可重置密码。
psql -c "alter role $(whoami) with password 'newpassword'"
如果报错说数据库不存在,是我们再步骤4中没有创建数据库引起的。可通过在步骤4命令的用户名后面添加 --dbname db_1。
Git 配置
通过git,我们可方便的调整部署的版本。
步骤5,我们创建git用户。
步骤6,下载最新的源码。用到的命令git clone及--depth 1(可下载一层commit)。
虚拟环境
python虚拟环境是为了避免环境污染。
步骤7,我们在~/venv-odoo-14.0文件夹中创建了python的环境及安装所需的包。我们可通过source ~/venv-odoo-14.0/bin/activate命令激活虚拟环境。
安装pyhon包
步骤8,安装odoo所需的python包。
启动实体
步骤9,启动实体
odoo-bin所用到的参数
- -d 指定数据库
- --db-filter=database_name$: 仅连接database_name$(正则匹配)的数据库。一次安装,可同时启动多个实例(连接不同的数据库)。这个参数可以限制实体所能使用的数据库。
- --addons-path=directory1, directory2。这个参数是指定实例所载入的模块路径。
- -i base:这是为了安装base模块。这是一切的基础哦。
或使用的数据库并不是系统登录账户,可通过如下参数进行配置。
- --db_host=IP地址:使用TCP连接数据库服务器。
- --db_user=database_username:数据库账户。
- --db_password=database_password:数据库密码。
其他的参数,可通过 odoo-bin --help参数查看。
当odoo启动了一个空的数据库,odoo将创建运行所需的基础表结构。同时将扫描addons-path目录中可用的模块,并加载到数据库中。默认的账户密码是admin。
登录系统http://localhost:8069/,如下截图
管理odoo的数据库
准备
已经在运行的odoo实例
步骤
odoo的数据库管理工具提供了数据库的创建、复制、删除、备份及恢复。还可以数据库管理工具的管理密码,限制非授权用户对数据库的操作。
访问数据库接口
- 进入登录页面
- 点击Manager Database链接。将进入/web/database/manager页面。
设置和修改管理工具密码
创建新的数据库
按步骤创建就行,如果点击Continue之后又进入了登录页面。可能是刚刚填写的Database Name不符合之前设置的--db_filter指定的的数据库正则。
复制数据库
有时我们需要对在用的数据进行测试,但是又不能操作生产库。那么我们可以将数据库复制一份,在复制的数据库中进行操作。
删除数据库
慎重操作,需输入数据库管理工具的管理密码。
备份数据库
同样需要管理密码。
恢复备份的数据库
按提示操作就行。
原理
管理密码是存储在odoo.conf配置文件中的。
odoo使用PostgreSQL的createdb工具创建新的数据库,并调用odoo内部的函数初始化数据库。
如果想复制数据库,可通过createdb --template 数据名。通过这种方式,比通过页面的上的backup、restore要快很多。
备份和恢复使用的是pg_dump及pg_restore工具。当使用zip的格式的数据库备份时,备份将包含一些文件的副本(在配置odoo时用到但并未存储在数据库中的文档)。这些在odoo14中是默认选项。这些文件默认存储在~/.local/share/odoo/filestore中。
如果备份太大,可能会导致下载失败。odoo无法在内存中处理大文件、http的response设置的太小等都会导致这个问题。同样,restore也一样。
餐后甜点
直接通过命令行操作数据库是非常方便的。
用演示数据初始化新的数据库
$ createdb testdb && odoo-bin -d testdb
我们还可以同时安装模块,-i sale, purchase, stock。
复制数据库,停用服务并启动
$ createdb -T dbname newdbname
$ cd ~/.local/share/Odoo/filestore # adapt if you have changed the data_dir
$ cp -r dbname newdbname
$ cd -
在开发环境的上下文中,文件存储经常被忽略。
命令行createdb -T操作数据库需在数据库没有被使用的情况下哦,也就是复制数据库需要odoo停用的情况下进行。
移除数据库实体,可通过
$ dropdb dbname
$ rm -rf ~/.local/share/Odoo/filestore/dbname
创建备份,假定数据库在本地
$ pg_dump -Fc -f dbname.dump dbname
$ tar cjf dbname.tgz dbname.dump ~/.local/share/Odoo/filestore/ dbname
恢复备份,可通过如下
$ tar xf dbname.tgz
$ pg_restore -C -d dbname dbname.dump
注意!
如果odoo使用不同的用户连接数据库,那么你需要传参-U username来为恢复的数据库指定拥有者。
存储实例的配置
odoo-bin脚本支持几十个参数的配置,我们可通过配置文件简化记忆。默认存储在/etc/odoo/odoo.conf中。
步骤
- 生成配置文件
$ ./odoo-bin --save --config myodoo.cfg --stop-after-init
- 我们可以指定参数,这些参数的值可以存储在生成的配置文件中。通过如下命令获取参数可能的值
$ ./odoo-bin --help | less
- 要从命令行形式转换为配置形式,请使用长选项名,删除开头的破折号,并将中间的破折号转换为下划线。--without-demo变成without_demo。这适用于大多数选项,但也有一些例外情况,将在下面的部分中列出。
- 通过配置文件启动实例
$ ./odoo-bin -c odoo.conf
原理
在实例启动的时候,主要经历三个阶段的配置。第一,所有的配置参数通过源代码设置默认值。第二,加载配置文件并覆盖已有配置。第三,命令行传参将再次覆盖已有配置。
大多数命令行参数都可按照上面说的方式在配置文件中找到。但是如下是不规则的变化:
命令行 | 配置文件 |
--db-filter | dbfilter |
--no-http | http_enable = True/False |
--database | db_name |
--dev | dev_mode |
--il8n-import/--il8n-export | Unavailabe |
下面列出了一些常用的配置:
配置 | 格式 | 说明 |
without_demo | 模块名s | 阻止模块安装延时数据。 all:全部禁用 False:全部开启 列表:sale,purchase |
addons_path | 模块所在的目录 | 多个路径,“,”隔开 |
admin_passwd | 文本 | 主密码 |
data_dir | 数据文件路径 | 存储session、网上下载的add-ons以及文档 |
http_port longpolling_port |
数字 | 在运行多个odoo服务的使用需要指定两个port。 longpolling_port是在workers为非0 的指定。 http_port默认8069,longpolling_port为8072. |
logfile | 文件路径 | odoo的log文件 |
log_level | 日志级别 | critical,error,warn,info,debug,debug_rpc, debug_rpc_answer,debug_sql |
workers | 整数 | worker的进程数量。详见第三章服务开发 |
proxy_mode | True/False | 激活反向代理WSGI包装器。 仅当运行在可信的web代理后时才启用此功能! |
以下是数据库相关的配置
配置 | 格式 | 说明 |
db_host | hostname | 数据库主机ip |
db_user | 数据库用户名 | 若db_host为False,则该项为空。这将使用当前用户连接数据库 |
db_password | 数据库密码 | |
db_name | 数据库名 | This is used to set the database name on which some commands operate by default. This does not limit the databases on which the server will act. Refer to the following dbfilter option for this. |
db_sslmode | 数据库的ssl模式 | 指定数据库的ssl连接模式 |
dbfilter | 正则 | 匹配odoo实例可访问的数据库,若是运行网站,需精确匹配到一个数据库如^databasename$ |
list_db | True/False | 显示或隐藏数据库管理页面。 |
一些配置文件并不会在配置文件中使用,但在开发模式下广泛使用。
配置 | 格式 | 说明 |
-i or --init | 模块名s | 使用“模块”初始化数据库 |
-u or --update | 模块名s | 更新模块 |
--dev | all,reload,qweb, werkzeug,xml |
激活开发者模式
作为odoo的开发者,你需要了解如何激活开发者模式。激活开发者模式之后,可以访问高级的配置以及相映的字段。这些选项通常是隐藏掉的并且在日常到使用过程中当中并不会用到。
步骤
用admin账户登陆系统。
进入配置。
在最下方可以看到开发者工具。
点击 激活开发者模式。
等待页面加载完成。
另外一种激活方式
It is also possible to activate the developer mode by editing the URL. Before the # sign, insert ?debug=1.
For example, if your current URL is http://localhost:8069/ web#menu_id=102&action=94 and you want to enable
developer mode, then you need to change that URL to http:// localhost:8069/web?debug=1#menu_id=102&action=94. Furthermore, if you want debug mode with assets, then change the URL
to http://localhost:8069/web?debug=assets#menu_ id=102&action=94.
退出开发者模式
- 可以直接编辑url,将 ?debug=0。
- 在页面上选择退出激活模式。
- 点击页面上方的bug菜单,点击离开开发者模式。
还有一种更简单的方式是通过插件
小贴士
自odoo13之后,调试模式有所改变。调试模式是存储在sessino中的,即便你移除了url当中的?debug,依旧debug模式。
原理
在开发者模式下会有两个改变
- 当你把鼠标放在form视图和列表视图相应filed的时候会展示这一个字段的技术信息。
- 页面的上方会有一个bug的图标菜单,我们可以访问一些调试工具。
还有另外一种开发者模式-。Developer mode(with assets)。这一个模式下于正常的开发者模式大部分相同,只是多了JavaScript和CSS的相关内容。相应的文件不再进行压缩,方便调试。
注意!
请在非开发者模式下调试你的应用,否则会可能忽略一些潜在的问题。
更新本地模块列表
当你新建了一个模块儿的时候,妞妞其实是不知道的,所以需要你进行手动的刷新。
步骤
这里就放两张图
原理
当我们点击了更新按钮的时候,妞妞会去读取add-ons path中配置的路径中的文件。并查找每一个__manifest__.py文件,这里包含着模块的相关信息。如果在文件当中包含installable=False。那么这一个模块儿信息将不会被写入数据库。如果模块已经存在那么会更新相关信息,如果不存在则新建。
小贴士
手动更新主要是在完成数据库初始化之后新增的模块。
# 数据初始化
python3 odoo-bin -d odoo-test -i base --addons-path=addons --db-filter=odoo-test
# 启动
./odoo-bin -c odoo.conf