docker部署odoo14及postgresql

odoo简介和部署方式

OpenERP的前身,开源,功能强大,更新版本到14,官方有几种安装方法,使用docker方法部署更简单,而官方使用docker compose的方式启动,我希望postgressql能够提供给多个应用使用,可以通过外部方法来访问,所以我这里用portainer部署。

部署postgres

下载portgres镜像

首先确定好postgresql的版本,这里使用postgres:12,直接执行docker pull postgres:12下载镜像

portainer上配置postgres容器参数

postgres docker官方镜像有参数说明:https://hub.docker.com/_/postgres?tab=description,根据odoo docker官网镜像说明,其中的yaml配置上环境参数只配置了下面几个,所以potainer上也设置这几个参数即可

1
2
3
4
5
6
7
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

portainer对应配置:

其中额外配置了port映射,postgres数据库端口默认是5432,使用宿主机的5432到docker主机的5432端口,PGDATA并没有配置,是默认生成的,与上面的有点不一样,手动配置了volume映射。
配置后生成container,可以在portainer上看到running。
使用navicat连接到数据库测试:

测试成功!

部署odoo

下载odoo镜像

使用最新镜像,最新版为14
docker pull odoo:latest

portainer上配置odoo容器参数

官方docker-compose.yaml配置:

1
2
3
4
5
6
7
8
9
10
web:
image: odoo:12.0
depends_on:
- mydb
ports:
- "8069:8069"
environment:
- HOST=mydb
- USER=odoo
- PASSWORD=myodoo

portainer对应配置:

配置后生成container,在浏览器输入http://宿主ip:8069访问,出现500错误。从portainer上查看日志,发现这里配置的odoo数据库需要初始化,需要运行odoo -i base强制初始化。这一步搞了我很久,网上也没有详细的解决方法,这里记录下解决方法。

  1. 拷贝容器内的odoo.conf配置文件到本机:
    先进入映射的volume配置文件目录运行:
    docker exec home_odoo cat /etc/odoo/odoo.conf > odoo.conf
  2. 修改配置文件,手动修改数据库连接参数:
    vim odoo.conf

    1
    2
    3
    4
    5
    6
    [options]
    db_host=xxx
    db_port=xxx
    db_name=odoo_db
    db_user=odoo
    db_password=odoo
  3. 从portainer进入odoo的容器执行:
    odoo -i base -d odoo_db
    这里没有指定用户执行,默认就是使用环境配置的odoo用户,也只有该用户执行才生效。

执行完毕后,再次访问http://宿主ip:8069,就会出现登录界面啦。默认登陆用户名和密码都是admin,记得进入修改。

注意事项

这里有必要记录下docker容器目录映射到宿主目录的权限问题,以免映射后出现权限报错。一般来说,生成容器后,里面的应用目录有固定的用户权限。如postgres,生成容器后,默认数据库目录属主和属组都是postgres,而查看其ID为999

而回到宿主的对应映射目录,可以看到其ID是跟容器的用户ID一样的。

其ID对应宿主的用户名字不一样,其实是LINUX使用ID号作为唯一权限代码。但宿主机上如果没有对应的ID号,则会显示容器的ID号。宿主机建立目录后且映射后,不要修改其属主和属组,不然权限就乱套了。也可以在宿主机上新建一个ID号如useradd postgres -u 1000 -g 1000 -M -s /sbin/nologin,专门给容器使用,在配置容器时,添加其environment参数如PUID=1000,PGID=1000,其参数名要看官方给出的名字来指定,让容器指定使用该ID号生成用户。这样无论从容器看还是宿主机看,都是postgres的名字了。

odoo使用记录

手动导入第三方安装包

首先要启用开发者模式,点击设置,常规设置,到最下面,点击启用开发者模式

启用后,进入应用,右上角取消搜索,就会显示全部的应用,在搜索base,可以见到base_import模块,安装下就会在菜单栏多一个导入模块,就可以手动导入第三方应用啦。

分享到