有一段时间没有关注 Odoo 的动态了,可能是“单号魔咒”的原因,Odoo 13似乎并没有什么热度,就连Packt 的那本Odoo 13 Development Cookbook, Fourth Edition也迟迟没有面世,估计可以直接写 Odoo 14了。
抱歉,CentOS 8显得有些画蛇添足了,已官宣 CentOS 8的支持到2021年年底截止,CentOS 7还可支持到2024年,以后只有 CentOS Stream了;接下来应该会大批迁移到 Debian 系的动作吧。不禁让人联想到 ORACLE 收购JAVA、MySQL。MySQL创始人在收购后开发 MariaDB进行续命,听说 CentOS创始人会开发一个Rocky Linux,话说GitHub上的 star 涨得是真快,历史总是惊人的相似。其实不必唾弃 IBM,开源产品都要为自己找到商业答案才能持续为社区供血,光有理想和情怀肯定是不够的。 IBM作为一家商业公司很自然的优先会考虑商业变现、对股东交出答卷。按收购的套路 Red Hat的版本号也许会一路高歌猛进,期待JAVA 20 + MySQL 12 + Red Hat 12的组合(简称JMR~)打包新品出炉。
对于 Odoo 用户这不是什么坏消息,因为官方推荐的就是 Debian 系 Linux,同时数据库使用的是 PostgreSQL,没有丝毫的影响。
相关文章:Odoo 14全新前端框架 OWL(Odoo Web Library)官方文档中文版
❣️❣️❣️Odoo 14开发者指南(Cookbook)第四版
Windows请直接到官网下载安装包(需先安装 Postgres): https://www.odoo.com/page/download或http://nightly.odoo.com/
CentOS 7
Odoo 安装通常更建议使用 Ubuntu/Debian,因为其中无论 Python 还是 PostgreSQL安装都更为简单,同时社区内的使用率也更高。
安装 Python 3
1 2 3 4 5 6 7 8 |
sudo yum update -y sudo yum install gcc gcc-c++ openssl-devel bzip2-devel libffi-devel libxml2-devel libxslt-devel libjpeg-turbo-devel openldap-devel -y wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz tar xzf Python-3.8.5.tgz cd Python-3.8.5 ./configure --enable-optimizations sudo make altinstall python3.8 -V |
配置虚拟环境
1 2 3 4 |
mkdir ~/odoo-dev cd ~/odoo-dev python3.8 -m venv env source env/bin/activate |
安装 PostgreSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum -y install epel-release yum-utils sudo yum-config-manager --enable pgdg12 sudo yum -y install postgresql12-server postgresql12 postgresql-devel sudo /usr/pgsql-12/bin/postgresql-12-setup initdb sudo passwd postgres # 为超级用户设置密码 # 远程链接 # vi /var/lib/pgsql/12/data/postgresql.conf listen_addresses = '192.168.10.10' # 设置为*表示所有 # sudo vi /var/lib/pgsql/12/data/pg_hba.conf # Accept from anywhere host all all 0.0.0.0/0 md5 # Accept from trusted subnet host all all 192.168.18.0/24 md5 # 设置完成后重启服务 systemctl restart postgresql-12.service |
参考链接:https://computingforgeeks.com/how-to-install-postgresql-12-on-centos-7/
安装 Odoo
10月1日 Odoo 14稳定版已正式发布,可直接通过 GitHub 下载源代码(参见 CentOS 8部分教程)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
cd ~/odoo-dev/ wget http://nightly.odoo.com/master/nightly/src/odoo_14.1alpha1.latest.tar.gz tar xzf odoo_14.1alpha1.latest.tar.gz mv odoo-14.1a1.* odoo14 pip install -r odoo14/requirements.txt sudo -u postgres createuser --createdb $(whoami) # sudo -u postgres createdb -O $(whoami) dbname cd odoo14 cp setup/odoo odoo-bin chmod +x odoo-bin ./odoo-bin -d odoo-test -i base |
登录页还是那个熟悉的登录页,登录后可以看到目前界面上的最大变化就是左侧导航区
odoo_14.0alpha1未开启 debug
支付服务也着实不少,支付宝赫然在列:
odoo_14.1alpha1已开启 debug
然后在Odoo14中单纯使用?debug已无法调出调试菜单,需使用完整的?debug=1或?debug=assets;原“Activate the developer mode”按钮要求至少安装一个应用后再点击 Settings 菜单下拉至底部:
Ubuntu通用安装方式
- 升级系统至最新版:
12sudo apt-get updatesudo apt-get upgrade - 加强服务器的安防:
1sudo apt-get install openssh-server fail2ban - 创建Odoo的用户:
1sudo adduser --system --home=/opt/odoo --group odoo - 接下来执行PostgreSQL配置。步骤如下:
a. 安装 postgres如下:
1sudo apt-get install postgres
b. 切换至9.6以上版本的Postgres创建管理Odoo数据库:
1sudo su - postgres
c. 接下来创建一个Odoo 14.0的用户:
1createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt odoo14
d. 将该用户置为超级用户,获取一些可选权限:
12psqlALTER USER odoo14 WITH SUPERUSER;
e. 使用如下命令退出psql及postgres:
12\qexit - 按如下步骤安装Odoo的依赖:a. 使用如下命令安装pip3:
1sudo apt-get install -y python3-pip
b.安装必要的包和库:
1sudo apt-get install python-dev python3-dev libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev libldap2-dev build-essential libssl-dev libffi-dev libmysqlclient-dev libjpeg-dev libpq-dev libjpeg8-dev liblcms2-dev libblas-dev libatlas-base-dev
c. 验证安装添加一些新依赖:
1234sudo apt-get install -y npmsudo ln -s /usr/bin/nodejs /usr/bin/nodesudo npm install -g less less-plugin-clean-csssudo apt-get install -y node-less - 接下来要克隆GitHub仓库的代码。步骤如下:a.克隆代码之前应先安装git:
1sudo apt-get install git
b. 在下载代码前将用户切换为odoo,因为这样更为安全:
1sudo su - odoo -s /bin/bash
c. 克隆仓库中对应的分支:
1git clone https://www.github.com/odoo --depth 1 --branch 14.0 --single-branch.
d. 退出当前用户,继续后续的安装:
1exit - 使用如下步骤安装必要的Python包:a. 使用pip3安装Python包和库:
1sudo pip3 install -r /opt/odoo/requirements.txt
b. 下载安装wkhtmltopdf来支持Odoo的PDF报表:
123sudo wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.debsudo dpkg -i wkhtmltox_0.12.5-1.bionic_amd64.debsudo apt install -f - 配置Odoo及其服务,如下:a. Odoo会自动生成一个配置文件。会一并下载并从另一个配置文件中拷贝,如下面的代码所示:
1sudo cp /opt/odoo/debian/odoo.conf /etc/odoo.conf
b. 在文件中填入必要的内容:
1sudo nano /etc/odoo.conf
c. 更新配置文件如下:
123456789[options]; This is the password that allows database operations:admin_passwd = admin # 注意修改db_host = Falsedb_port = Falsedb_user = odoo14db_password = Falseaddons_path = /opt/odoo/odoo/addonslogfile = /var/log/odoo/odoo.log
d. 对文件设置权限:
12sudo chown odoo: /etc/odoo.confsudo chmod 640 /etc/odoo.conf
e. 创建Odoo的日志目录:
1sudo mkdir /var/log/odoo
f. 设置文件夹内的Odoo用户权限:
1sudo chown odoo:root /var/log/odoo
g. 配置Odoo服务:
1sudo nano /etc/systemd/system/odoo.service
h. 在该文件中加入如下内容:
123456789101112[Unit]Description=OdooDocumentation=http://www.odoo.com[Service]# Ubuntu/Debian convention:Type=simpleUser=odooExecStart=/opt/odoo/odoo/odoo-bin -c /etc/odoo.conf[Install]WantedBy=default.target
i. 设置文件的root 用户:
12sudo chmod 755 /etc/systemd/system/odoo.servicesudo chown root: /etc/systemd/system/odoo.service - 运行Odoo如下:a. 运行如下命令启动Odoo平台:
1sudo systemctl start odoo.service
b. 使用如下命令查看服务的状态:
1sudo systemctl status odoo.service
如果启动成功,即可通过如下URL访问:http://<your_domain_or_IP_address>:8069
c. 使用如下命令查看日志文件:
1sudo tail -f /var/log/odoo/odoo.logd. 输入如下命令让Odoo服务在开机时自动启动:
1sudo systemctl enable odoo.service
参考书籍:Designing Professional Websites with Odoo Website Builder
CentOS 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
sudo dnf update -y # 升级系统安装包 # 安装所需依赖 sudo dnf install python3 python3-devel git gcc redhat-rpm-config libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel curl unzip -y # 安装wkhtmltopdf sudo dnf install https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm # 验证安装版本 wkhtmltopdf --version # 安装 PostgreSQL sudo dnf install postgresql postgresql-server postgresql-contrib -y # 初始化数据库 sudo postgresql-setup initdb # 启动服务 sudo systemctl start postgresql sudo systemctl enable postgresql # 创建数据库用户(需与下面的系统用户名称保持一致) sudo su - postgres -c "createuser -s odoo14" # 创建系统用户 sudo useradd -m -U -r -d /opt/odoo14 -s /bin/bash odoo14 # 创建目录 sudo mkdir /opt/odoo sudo chown odoo14: /opt/odoo # 切换用户、克隆代码 sudo su - odoo14 git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/odoo/odoo14 # 创建自定义 addon 文件夹 mkdir /opt/odoo/odoo14-custom-addons # 创建虚拟环境 cd /opt/odoo14 && python3 -m venv odoo14-venv # 激活虚拟环境 source odoo14-venv/bin/activate # 在虚拟环境中安装 Python依赖包 pip install wheel pip install -r /opt/odoo/odoo14/requirements.txt # 退出当前用户 deactivate && exit # 创建日志文件并授权 sudo mkdir /var/log/odoo14 && sudo touch /var/log/odoo14/odoo14.log sudo chown -R odoo14: /var/log/odoo14/ |
编辑配置文件(请修改master_password)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# sudo vi /etc/odoo14.conf [options] ; This is the password that allows database operations: admin_passwd = master_password db_host = False db_port = False db_user = odoo14 db_password = False xmlrpc_port = 8069 ; longpolling_port = 8072 logfile = /var/log/odoo14/odoo14.log logrotate = True addons_path = /opt/odoo/odoo14/addons,/opt/odoo/odoo14-custom-addons proxy_mode = True # 配合 Nginx 使用 |
配置文件常用参数(摘自Odoo 12开发者指南(Cookbook)第三版)
选项 | 格式 | 用途 |
---|---|---|
without_demo | 逗号分隔的模块名列表,或 all(取消所有模块的演示数据),或 False(为所有模块启用演示数据) | 该选项阻止模块演示数据被加载 |
addons_path | 逗号分隔的路径列表 | 这是一个服务查找插件的路径名列表(参见第二章 管理Odoo服务器实例) |
admin_passwd | 文本 | 这是 master 密码(参见前面部分的内容) |
data_dir | 一个目录路径 | 这个目录中服务会存储session信息、从网上下载的插件以及在启用了文件存储时存放文档。 |
db_host | 主机名 | 这是运行PostgreSQL服务的服务器名。使用 False 来使用本地 Unix 域套接字,以及 localhost 来使用本地 TCP 套接字。 |
db_user | 数据库登录用户 | 在db_host为 False 时这通常为空。这将是用于连接数据库的用户。 |
db_password | 数据库用户密码 | 在db_host为 False以及 db_user 与运行服务的用户相同时通常为空。阅读pg_hba.conf的主页面来获取更多相关信息。 |
db_name | 数据库名 | 用于设置一些默认执行命令作用的数据库名。这不会限制服务所操作的数据库。参照下面的 dbfilter 参数。 |
dbfilter | 一个正则表达式 | 该表达式应匹配服务所使用的数据库名。如果你运行网站,应该匹配单个数据库,类似^databasename$。更多相关信息请参见第三章 服务器部署。 |
http_interface | 网络接口的 IP 地址 | 默认为0.0.0.0,表示服务监听所有接口。 |
http_port longpolling_port | 端口号 | 这些是 Odoo 服务所会监听的端口。你需要指定这两者来在同一台主机上运行多个 Odoo 服务;longpolling_port仅在workers不为0时使用。 http_port默认值为8069,longpolling_port默认为8072。 |
logfile | 文件路径 | Odoo 写入日志的文件。 |
log_level | 日志信息级别 | 指定日志的级别。可接受的值(内容逐渐增加)包括critical, error, warn, info, debug, debug_rpc, debug_rpc_answer, debug_sql。 |
workers | 整数 | worker进程的数量,更多信息参见第三章 服务器部署。 |
list_db | True/False | 设置为 True 来取消列出数据库。更多信息请参见第三章 服务器部署。 |
proxy_mode | True/False | 激活反向代理WSGI封装。仅在运行于可信任的 web 代理后启用它。 |
创建systemd启动文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# sudo vi /etc/systemd/system/odoo14.service [Unit] Description=Odoo14 Requires=postgresql.service After=network.target postgresql.service [Service] Type=simple SyslogIdentifier=odoo14 PermissionsStartOnly=true User=odoo14 Group=odoo14 ExecStart=/opt/odoo14/odoo14-venv/bin/python3 /opt/odoo/odoo14/odoo-bin -c /etc/odoo14.conf StandardOutput=journal+console [Install] WantedBy=multi-user.target |
载入配置文件并启动服务
1 2 3 4 5 |
sudo systemctl daemon-reload sudo systemctl start odoo14 sudo systemctl enable odoo14 # 查看启动状态 sudo systemctl status odoo14 |
安装 Nginx 并进行配置(以下 yourdomain.com 仅为示例,请使用自己的域名,测试目的可能过 host绑定来使用该域名)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
sudo dnf install nginx -y # sudo vi /etc/nginx/conf.d/yourdomain.com.conf upstream odooserver { server 127.0.0.1:8069; } upstream odoochat { server 127.0.0.1:8072; } server { listen 80; server_name yourdomain.com; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; # Proxy headers proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; # log files access_log /var/log/nginx/yourdomain.com.log; error_log /var/log/nginx/yourdomain.com.log; # Handle longpoll requests location /longpolling { proxy_pass http://odoochat; } # Request for root domain location / { proxy_redirect off; proxy_pass http://odooserver; } # Cache static files location ~* /web/static/ { proxy_cache_valid 200 90m; proxy_buffering on; expires 864000; proxy_pass http://odooserver; } gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript; gzip on; } |
启动 Nginx
1 2 |
sudo systemctl start nginx sudo systemctl enable nginx |
注意系统默认可能开启 SELinux 而导致80端口无法直接访问
1 2 3 |
setenforce 0 # vi /etc/selinux/config SELINUX=disabled |
参考文章:https://www.rosehosting.com/
Docker安装
Docker安装的优势无需多说,可以省去比较繁琐的环境配置,对于测试、开发而言可以快速搭建起服务,如果恰当的配置,用于生产也完全没有问题。我们只需要在本地维护自己开发的 addon以及配置文件,官方会维护Odoo核心代码的镜像,我们只需要拉取最新镜像即可获取最新的修复版本。当然如果你需要对官方的代码动刀,那这显然不太适合你,这时你可能要自己维护一套镜像。此外就是官方镜像中可能没有包含你需要使用到的软件包,这时也会需要做相应的处理。
1 2 3 4 5 6 |
docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:10 docker run -p 8069:8069 --name odoo --link db:db -t odoo # 默认配置文件的位置/etc/odoo/odoo.conf,使用自定义的配置文件 docker run -v /path/to/config:/etc/odoo -p 8069:8069 --name odoo --link db:db -t odoo # 挂载自定义插件 docker run -v /path/to/addons:/mnt/extra-addons -p 8069:8069 --name odoo --link db:db -t odoo |
SAMBA远程调试
不建议在生产环境安装使用
1 |
sudo yum install samba samba-client -y |
编辑配置文件(/etc/samba/smb.conf):
1 2 3 4 5 6 |
[share] path = /home/alan/shared_directory available = yes browseable = yes public = yes writable = yes |
设置密码:
1 2 |
sudo touch /etc/samba/smbpasswd sudo smbpasswd -a $(whoami) |
Mac: Finder 右击 Connect to server…或在桌面上按下 Cmd+k,输入 你的 IP地址 smb://192.168.xxx.xxx,然后输入用户名及刚刚设置的密码即可在本地挂载该目录。
Windows:Win+R 在弹出窗口中或在文件浏览器的输入框中输入 \\192.168.xxx.xxx,然后输入用户名及刚刚设置的密码即可在本地挂载该目录。
这样的好处是可以直接修改服务器上的代码或使用该代码进行调试,但使用 git 可能是更好的选择:
常见问题
1、ModuleNotFoundError: No module named ‘_ctypes’
1 2 3 4 |
yum install libffi-devel -y # 重新编译 ./configure --enable-optimizations sudo make altinstall |
2、Error: pg_config executable not found.
1 |
yum -y install postgresql-devel |
3、psql 命令行创建数据库和用户
1 2 3 |
CREATE DATABASE database_name; CREATE USER my_username WITH PASSWORD 'my_password'; GRANT ALL PRIVILEGES ON DATABASE "database_name" to my_username; |
4、Odoo 中的时区问题
有关时区可以分几个部分,首先系统默认使用的是 UTC,这一配置位于 odoo-bin 文件内,对应中国时区可修改为Asia/Shanghai。另一个有关用户的,在账号的 Preferences中可以进行时区设置。而前端使用的是getTZOffset,函数的定义位于 session.js 中。
5、如何修改公司的 Logo、Favicon 等信息?
Settings > General Settings > Companies > Update info
6、如何去除Manage Databases?
使用启动选项–no-database-list或在配置文件中设置list_db = False,相关布局文件见Settings > Technical > User Interface > Views > Login Layout
My Odoo.com Account等内容位于addons/web/static/src/xml/base.xml中,可直接注释,更推荐安装一些 Debranding 的模块来解决这一问题。
7、安装企业版主题自有 addon不显示 Icon 图片
在安装了企业版主题如muk_web_theme发现即便配置了web_icon="module_name,static/description/icon.png" title="Odoo 14安装简明教程"
也无法显示图标,很明显源代码里使用的是web_icon_data字段,甚至有人说在 Odoo Shell 中手动执行刷新数据
1 2 |
for menu_id in env['ir.ui.menu'].search([('web_icon', '!=', False)]): menu_id.web_icon_data = menu_id._compute_web_icon_data(menu_id.web_icon) |
然后测试无仍任何效果,那么采取一种粗暴的方式来试试,打开 Settings > Technical > User Interface > Menu Item,找到对应的菜单项,然后在Web Icon Image项上传图标保存,搞定。然后再次更新模块又失效了,最终发现我的模块文件夹名和主模型名不同,习惯性地使用了模型名(点号变下划线),而这里使用的应该是文件夹名。所以正常情况下添加 web_icon 就可以了。
9、Docker 内如何安装软件包?
临时在 Docker 中安装一些软件包会发现无法切换到 root 用户,其实很简单,docker exec -it -u 0 odoo bash即中以 root 用户进入容器系统的命令行
10、The selected file exceed the maximum file size of 64.00 Mb.
这部目前是硬编码在addons/web/static/src/js/fields/basic_fields.js文件中:
1 |
this.max_upload_size = 64 * 1024 * 1024; // 64Mo |
11、Docker 中连接 MySQL报错:OSError: mysql_config not found
1 2 3 4 5 6 |
apt-get update apt-get install libmariadb-dev-compat libmariadb-dev # error: invalid command 'bdist_wheel' pip3 install wheel # error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 apt-get install python3-dev libffi-dev gcc |
12、null value in column “activity_user_type” violates not-null constraint
在安装模块的依赖中添加 mail 模块