第一章 环境搭建
本章将讲述如何从头开始搭建一个odoo系统, 适用于对odoo没有经验的小白读者.如果您对odoo已经有经验可以跳过本章.
操作系统的选择
Odoo的最佳操作系统是Ubuntu,如果你对Linux不熟悉,也可以选择Windows进行安装,只是Window上只推荐做开发环境,并不推荐部署生产环境。关于Odoo生产环境的部署,后面会有专门的章节介绍。这里还是推荐读者是使用Linux环境进行学习开发,也可以在Window上使用虚拟机软件(VMWare和VirtualBox)配合ssh终端软件进行环境搭建。
本书将仅详细介绍Linux下的安装步骤,windows,mac以及Docker用户可以到以下地址找到相关安装资料:
不同版本的odoo推荐使用的Ubuntu版本不同,具体参见下表:
Odoo版本 | Python版本 | Ubuntu版本 |
---|---|---|
12.0 | python3.6 | Ubuntu 18.04 |
13.0 | python3.8 | Ubuntu 20.04 |
14.0 | python3.8 | Ubuntu 20.04 |
15.0 | python3.8 | Ubuntu 20.04 |
16.0 | python3.10 | Ubuntu 22.04 |
17.0 | python3.10 | Ubuntu 22.04 |
18.0 | python3.12 | Ubuntu 24.04 |
环境的搭建
Odoo的环境搭建方式多种多样,按方式划分的话可以分为源码安装和安装包安装两种方式。 源码安装的方式相对比较繁琐,但是灵活性较高可以同时安装多个版本的odoo,适合于喜欢自己动手同学。安装包安装的方式比较简洁,多用于部署,适合于喜欢傻瓜式安装软件的同学。两种方式没有优劣之分,取决于你的心情。下面简单介绍一下这两种安装方式。
源码安装
我们首先来看一下,如何使用源码安装的方式进行安装。源码安装的优势是,所有的组件都是自己完成的,相对的灵活可控,不必拘泥于系统安装方式的束缚。缺点是,对用户的动手能力要求很高,安装过程中会碰到各种各样的问题,需要有很强的搜索和解决问题的能力。
数据库的安装
Odoo使用的是Postgresql,我们在正式开始安装之前需要先安装好数据库。使用安装包安装的同学可以跳过这一部分,因为安装包通常会自动把数据库安装好。
本书的环境基于ubuntu,使用centos的同学可以根据centos的命令自行替换。
安装postgresql:
apt-get install postgresql
数据库安装完成后,需要配置odoo用户:
sudo su postgres psql create user odoo with superuser
开启监听模式,默认情况下Postgresql只允许本地访问,因此我们需要将该条件放开。找到/etc/postgres/VERSION/main/postgresql.conf,将listen_addresses改为*:
listen_address="*"
编辑/etc/postgres/VERSION/main/pg_hba.conf文件,针对不同的IP号段设置不同的访问权限。
# Database administrative login by Unix domain socket local a # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 host all all all md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5
peer模式只根据操作系统的用户进行配对校验,需要有同名的系统用户。如果Postgresql的用户是新建的,在操作系统上没有与之对应的用户的话,就可以将认证模式改为md5,md5是通过密码进行认证的。如果你的用户只允许本地访问的话,也可以设置为trust,这样就不必再输入密码即可认证成功。
修改完配置文件后,需要重启postgresql才能生效:
sudo service postgresql restart
切换到postgres用户进行验证:
sudo su postgres
然后进入postgresql数据库:
psql
如果出现下面类似的结果,就说明安装成功了:
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.
postgres=#
安装odoo
使用git将odoo的源码克隆到本地,注意选择你要安装的版本分支。
git clone https://github.com/odoo/odoo -b 18.0 --depth=1
由于众所周知的原因,直接从github拉去代码可能会花费比较长的时间。备选方案是使用国内gitee提供的镜像服务。
代码下载下来之后,进入文件夹使用如下命令进行安装,由于网络的原因,很多插件自动安装不上,需要手动安装,这也是源码安装最为繁琐的地方。
python setup.py install
所有插件安装完成后,即可使用如下的命令启动:
./odoo -r odoo --addons-path='./addons'
其中 --addons-path指向你的安装目录下的addons文件夹路径。
deb包安装
安装包安装相对要省心很多,有点类似windows下的exe安装程序,以ubuntu为例:
添加odoo的官方源:
deb http://nightly.odoo.com/18.0/nightly/deb/ ./
注意将18.0的版本替换为你的目标版本。
odoo官网比较慢的时候可以试试CDN odoocdn.com
更新源列表
apt-get udpate
此过程中可能碰到key验证失败的问题,可到https://nightly.odoo.com/odoo.key 下载公用key,然后使用sudo apt-key add命令添加key:
apt-key add odoo.key
使用apt-get方式安装
apt-get install odoo
由于国内复杂的网络情况,不排除有些地区的下载速度会非常缓慢,这个时候你需要的是耐心。
至此,读者应该已经安装好了odoo社区版。需要另外说明的有两点:
- 多版本的odoo: 如果用户希望在开发环境中安装多个版本的Odoo以方便测试和开发,那么你应该选择源码安装的方式进行。
- 企业版的安装: 如果你购买的企业版,通常odoo会在官网提供一个完整的安装包。但是,企业版的本质是由社区版+企业版代码包的形式组成的,也就说,你可以把企业版的代码包配置到配置文件的addons_path中,就可以让社区版转身一变为企业版。
一键安装
为了方便部署,我们提供了一键安装的脚本程序:
bash <(wget -qO- https://raw.githubusercontent.com/jellyhappy/tools/master/odoo-install.sh)
Centos上的安装
国内很多互联网公司的服务器都是使用的Centos,Centos作为一个曾经很成功的发行版在国内拥有很大的用户数量,但是由于红帽公司的商业决策,在可见的未来Centos将逐步走向没落。Odoo的开发是基于Debian系统,虽然官方网站提供了RPM的安装包,但仍旧有可能碰到各种奇奇怪怪的问题。
笔者这里不对Centos的安装做过多的介绍,需要的同学可以参考下面连接,使用源码安装的方式进行安装:
https://mellowhost.com/blog/how-to-setup-odoo-14-in-centos-7.html
如果安装上的困难,可以购买笔者的商业部署服务。
Docker-Compose安装
如果想要使用docker-compose来管理docker安装,可以使用一下的步骤:
安装docker
安装docker-compose
创建一个项目文件夹odoo18
mkdir odoo18
创建docker-compose.yml文件
version: '3.9' services: odoo: container_name: odoo image: odoo:18.0 volumes: - ./addons-extra:/mnt/extra-addons - ./etc/odoo:/etc/odoo - odoo-web-data:/var/lib/odoo ports: - "8069:8069" depends_on: - postgres postgres: image: postgres:14 environment: - POSTGRES_DB=postgres - POSTGRES_PASSWORD=odoo - POSTGRES_USER=odoo - PGDATA=/var/lib/postgresql/data/pgdata volumes: - odoo-db-data:/var/lib/postgresql/data/pgdata nginx: container_name: nginx image: nginx:latest restart: unless-stopped ports: - 80:80 - 443:443 volumes: - ./nginx/conf:/etc/nginx/conf.d - ./certbot/conf:/etc/nginx/ssl - ./certbot/data:/var/www/html certbot: container_name: certbot image: certbot/certbot:latest command: certonly --webroot --webroot-path=/var/www/html -- email youremail@mail.com --agree-tos --no-eff-email -d domain.com -d www.domain.com volumes: - ./certbot/conf:/etc/letsencrypt - ./certbot/logs:/var/log/letsencrypt - ./certbot/data:/var/www/html volumes: odoo-web-data: odoo-db-data:
创建odoo配置文件
mkdir -p etc/odoo vim etc/odoo/odoo.conf
[options] ; This is the password that allows database operations: ; admin_passwd = admin db_host = postgres db_user = odoo db_password = odoo
配置Niginx
mkdir -p nginx/conf vim nginx/conf/default.conf
server { listen [::]:80; listen 80; location ~ /.well-known/acme-challenge { allow all; root /var/www/html; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_pass http://odoo:8069; } location ~* /web/static/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_pass http://odoo:8069; } }
启动odoo
docker-compose up -d
配置文件
采用deb包安装的话,配置文件通常位于/etc/odoo/目录下,配置文件中包含若干个关于Odoo的配置信息,一个典型的配置文件内容如下:
[options]
; This is the password that allows database operations:
admin_passwd = xxxxxxx
db_host = localhost
db_port = 5432
db_user = odoo
db_password = odoo
longpolling_port = 1172
log_level = debug
addons_path = /home/ubuntu/odoo/odoo-dev/enterprise-12.0,/home/ubuntu/odoo/odoo-dev/custom/addons
logfile = /home/ubuntu/odoo/odoo-dev/odoo.log
xmlrpc_port = 8069
reportgz = True
proxy_mode = True
db_filter = ^%d$
limit_time_cpu = 7200
limit_time_real = 7200
; limit_request = 200
; workers = 2
; list_db = False
参数 | 说明 |
---|---|
addons_path | addons目录路径,通常的做法是将odoo原生的模块放到一个目录中,然后将我们自己开发和其他的第三方模块放到另一个目录中,做到与原生模块的物理隔离。 |
admin_passwd | odoo的管理密码,包含数据库的创建和复制、删除等权限 |
csv_internal_sep | csv文件分割符号,默认逗号(,) |
data_dir | 附件文件的存储路径。 |
db_host | 数据库地址 |
db_maxconn | 数据库最大连接数 |
db_port | 数据库端口 |
db_user | 数据库用户 |
db_password | 数据库的访问密码 |
db_template | 模版数据库 |
dbfilter | 数据库过滤,如果该选项设置为某单个数据库,那么web应用中就只能看到该数据库,其他数据库不可见。另外,该选项支持域名过滤,即设置为^%d$,这将过滤跟当前子域名相匹配的数据库,odoo.com和www.odoo.com都匹配数据库odoo,%h 会被替换为请求的整个主机名。 |
geoip_database | geoip数据库位置 |
http_enable | 是否启用http服务 |
http_port | http服务端口 |
limit_memory_soft | 每个worker可以使用的虚拟内存上限,超出将在请求结束后被kill掉 |
limit_memory_hard | 每个worker可以使用的虚拟内存上限,超出将立即kill掉此进程 |
limit_request | 最大请求数量 |
limit_time_cpu | 每个worker处理一个请求能占用CPU的最长时间,超过时间将强制worker退出进程,默认60秒 |
limit_time_real | 每个worker处理一个请求实际能花费的最长时间,超过时间将强制worker退出进程,默认120秒 |
list_db | 是否列出数据库列表 |
logrotate | log日志是否分页 |
longpolling_port | 长链接端口 |
xmlrpc_port | odoo的应用端口,默认为8096 |
指定配置文件启动的命令:
odoo -c /etc/odoo/odoo.conf
数据库管理
环境搭建完成后,我们先启动odoo进程:
odoo -c /etc/odoo/odoo.conf
可以使用sh的别名方式,将命令存储成一个简短的命令,操作方式是编辑~/.ssh/config文件,然后在文件最后新增一行:
alias xxx='odoo -c /etc/odoo/odoo.config'
进程启动后,命令行的输出应该是这个样子:
2019-08-26 02:41:41,986 115754 INFO ? odoo: Odoo version 12.0
2019-08-26 02:41:41,986 115754 INFO ? odoo: Using configuration file at /etc/odoo/odoo.conf
2019-08-26 02:41:41,987 115754 INFO ? odoo: addons paths: ['/home/kevin/.local/share/Odoo/addons/12.0', '/usr/lib/python3/dist-packages/odoo/addons', '/home/kevin/codes/osc_addons', '/home/kevin/codes/enterprise-12.0', '/usr/local/lib/python3.6/dist-packages/odoo-12.0-py3.6.egg/odoo/addons']
2019-08-26 02:41:41,987 115754 INFO ? odoo: database: odoo@192.168.88.128:5432
2019-08-26 02:41:42,529 115754 INFO ? odoo.addons.base.models.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf
2019-08-26 02:41:42,965 115754 WARNING ? odoo.addons.base.models.res_currency: The num2words python library is not installed, amount-to-text features won't be fully available.
2019-08-26 02:41:45,945 115754 INFO ? odoo.service.server: HTTP service (werkzeug) running on saturn:8069
命令行里指明了输出的进程和端口号,以及数据库地址。笔者这里使用的是虚拟机,虚拟机的IP地址是192.168.88.128。所以,我们用浏览器打开地址:
Http://192.168.88.128:8069
如果已经存在数据库,就会看到下面的界面:
没有的话,会显示一个新建的页面,按照提示进行创建即可。数据库的管理地址:
http://192.168.88.128:8069/web/database/manager
通常可以在这里对数据库进行管理操作,包括创建、备份和删除。数据库管理是一个比较敏感的操作,如果对外服务的话,记得在配置文件中设置管理密码,以防数据丢失。
当然,数据库的管理也可以在postgresql中进行,但是需要注意的是,创建的数据库的owner需要是odoo连接数据库的那个用户。
开发工具
推荐使用vscode,搭配pylint等插件可以自己积木式地配置一个顺手地开发工具。机器配置高的同学也可以使用Pycharm,这里就不多介绍了。
企业版
Odoo企业版实际上等于Odoo的社区版+企业版代码包,也就是说,企业版是在社区版的基础上安装了了企业版的代码包之后就变成了企业版。
假设我们这里拥有了企业版的代码并放置到了/opt/enterprise文件夹中,那么我们只需要在配置文件中,将企业版代码包路径追加到配置文件的addons_path参数中即可。
addons_path = /home/kevin/codes/odoo/odoo-17.0/addons,/home/kevin/codes/odoo/enterprise-17.0
现有的社区版数据库直接安装web_enterprise模块即可升级为企业版,新建数据库默认即为企业版。