有一段时间没有关注 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,没有丝毫的影响。
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 菜单下拉至底部:
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/
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; |