进行了为期4天的odoo基础培训,odoo的开发流程得到了进一步梳理,odoo开发的技术并不难,难的是将技术应用于业务,其中包括odoo财务、库存管理等已有核心模块的熟悉和调用开发,具体业务的分析设计,以及ERP实施中最难的与人打交道。ERP行业距离技术较远,距离人更近。
在跟老师紧密相处的这几天里,主要收益是改变了我对技术男的认知,老师不仅对技术细节有精湛的落地程度,还有包容的人格和丰富的阅历。课程之外以心换心,老师还传授了他在ERP实施经历中的很多经验,相识恨晚,再见有期,江湖一别各珍重,来日方长盼君安。
我会利用后面的时间梳理这段培训的思路,撰写odoo基础开发的系列文章。今天先写一个偏离主题的配置细节。
odoo使用的是postgresql,最新版的postgresql需要用pgadmin4才能正常访问。pgadmin4进行了彻底的改版,是完全基于python开发的BS架构的数据库管理GUI。pgadmin3之前的版本通过apt安装,pgadmin4则是通过python的pip安装,安装过程需要对python运行环境添加很多依赖包,因此一般需要在单独建立的虚拟环境中安装。比这个方案更便捷的方式则是docker部署。这篇文章就来梳理postgresql安装配置的细节和docker部署pgadmin4的方法。
1. postgresql安装和配置
1.1 postgresql安装
ubuntu上可以方便地使用apt安装postgresql,在安装数据库的同时,可以一并安装扩展模块。postgresql的一大优点是支持模块扩展,扩展的模块安装在/usr/share/postgresql/版本号/contrib目录下,默认只安装了一个基于SELinux的增强的访问控制模块。这些模块往往是处于试验阶段的功能,所以并没有包含在postgresql主程序中,用户可以有选择性地加载。
sudo apt update
sudo apt install postgresql postgresql-contrib
安装完成后postgresql服务将会自动启动。其默认管理员用户是postgres,可使用psql工具连接数据库,并且打印它的版本来验证安装:
sudo -u postgres psql -c "SELECT version();"
1.2 配置可远程访问
默认情况下,PostgreSQL服务器仅监听本地网络接口localhost,配置可远程访问有三个步骤,一是打开IP监听端口,二是配置认证方式,三是设置postgres用户密码。
首先打开监听端口:打开配置文件/etc/postgresql/版本号/main/postgresql.conf,在其中添加listen_addresses = '*'。
还要再配置认证方式:打开配置文件/etc/postgresql/版本号/main/pg_hba.conf,这是postgresql基于主机的认证配置文件(hba, host-based authentication),如下所示。
local all postgres peer
# 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
# 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
host all all 0.0.0.0/0 md5
这其中有TYPE、DATABASE、USER、ADDRESS、METHOD五个字段,在文末添加“host all all 0.0.0.0/0 md5”,允许所有主机用户从任何IP登录数据库,且使用md5鉴权,md5鉴权是指通过用户名和密码来登录,peer鉴权是指本地通过系统用户无密码登录。
既然远程登录通过md5鉴权,就需要给该用户设置密码。我们可以给超级管理员用户postgres配置密码:
$sudo -u postgres psql
postgres=#ALTER USER postgres WITH PASSWORD 'xxxxxxx';
postgres=#\q
注意密码要用引号括起来,且最后要有分号。
以上三个步骤修改完后,重启postgresql服务使配置生效:sudo service postgresql restart
至此,postgresql安装和配置完毕,且可以远程访问。
2. docker部署pgadmin4
通过docker部署pgadmin4是最方便的方式。首先需要拉取dpage/pgadmin4镜像:
$docker image pull dpage/pgadmin4:latest
该镜像对外开放80端口,启动该镜像时我们映射一个本地端口给它。同时,启动镜像时需要配置登录pgadmin4的用户名和密码,分别通过PGADMIN_DEFAULT_EMAIL和PGADMIN_DEFAULT_PASSWORD指定,如下所示:
$docker run \
--name pgadmin4 \
-p 81:80 \
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
-e "PGADMIN_DEFAULT_PASSWORD=xxxx" \
-d dpage/pgadmin4
其中PGADMIN_DEFAULT_EMAIL参数必须填写一个合法的邮箱地址,密码为通过该邮箱地址登录pgadmin4的密码,与前面配置的数据库密码没关系。与数据库建立连接是在登录pgadmin4之后再配置的。
执行$docker ps可以看到这个镜像已经运行了一个容器,通过浏览器访问localhost:81,可打开pgadmin4登陆页,输入刚才设置的邮箱和密码则可登录pgadmin4。以后重启后,通过$docker run pgadmin4则可启动该容器。
3. pgadmin4连接postgresql
图形化的操作很简单,添加一个数据库连接就可以了。需要注意的是,由于使用docker部署pgadmin4,数据库的主机地址不能填写localhost,而应该是宿主机的ip地址,可通过$ip address查看,填写宿主机有线网卡或者无线网卡的ip地址。用户名和密码填写上节设置的postgres用户的密码。
4. 为odoo创建角色和数据库
因为要从源码安装和启动odoo,需要先创建一个数据库角色和一个odoo数据库,并将该数据库的所有权分配给该角色,在启动odoo的配置文件中配置数据库用户为该角色,且修改密码信息。odoo的安装在12月7日的日志中已经总结。补充一下首次生成默认配置文件的命令:
$ ~/odoo-dev/odoo/odoo-bin --save --stop-after-init
生成的配置文件为~/.odoorc,可打开后进行修改。其中db_name设置为刚才创建的数据库名,db_user为刚才设置的数据库角色名,db_password为其密码。