Docker实现odoo部署

docker部署odoo

    • 安装docker,了解docker和docker-compose的一些常用命令
    • docker部署odoo12
    • 直接拉取镜像
    • 遇到的一些坑

参考文章:

  1. https://ruterly.com/2019/05/01/Odoo-with-Docker/
  2. https://www.cnblogs.com/qdhxhz/p/9879588.html

这是从未接触过docker,ubuntu16.04 实现部署odoo12社区版的教程。主要介绍内容为:

安装docker,了解docker和docker-compose的一些常用命令

  1. 首先,安装docker
apt-get  install -y docker docker-compose

ubuntu默认用的是国内的镜像,所以下载docker会比较慢,可以更换为阿里的镜像源

cd /etc/apt
sudo cp sources.list sources.list.bak
sudo vim sources.list

阿里云源为http://mirrors.aliyun.com/ubuntu/
修改所有的下载源后更新配置即可。

sudo apt-get update
  1. 设置开机自动启动docker
systemctl enable docker 
  1. docker的一些常用命令
systemctl start docker # 启动docker
systemctl restart docker # 重启dokcer
docker ps # 查看所有容器

docker [run|start|stop|restart|kill|rm|pause|unpause] #容器生命周期管理
docker [ps|inspect|top|attach|events|logs|wait|export|port] #容器操作运维
docker [commit|cp|diff] #容器rootfs命令
docker [login|pull|push|search] #镜像仓库
docker [images|rmi|tag|build|history|save|import] #本地镜像管理
举些栗子:

docker images  #列出当前系统存在的镜像
docker pull image_name  #拉取镜像 (文中image_name为镜像名称)
docker ps #列出所有镜像信息
docker start image_name  #启动某个镜像
docker stop  image_name   #停止某个镜像
docker rm image_name  #移除镜像 (容器必须是停止状态)
docker run -d --name "xiaoxiao" -p 5672:5672 -p 15672:15672 rabbitmq:management
            #-d 后台运行
            #-p 端口映射 (可以有多个 因为该镜像可能存在多个端口)
            #rabbitmq:management  (格式 REPOSITORY:TAG),如果不指定tag,默认使用最新的
            #--name  给该容器取个名字

docker部署odoo12

以上介绍了docker,现在开始正式部署odoo12。在拉取odoo镜像之前,我们先拉取postgres,简而言之,安装odoo之前安装postgres。
compose是一个用于运行和管理多个容器化应用的工具。
废话不多说。先建立一个docker-compose.yml的文件,内容为:

version: '2.0'
services:

  postgres:
    image: postgres:9.5
    ports: 
      - "5432:5432"       
    volumes:
      - ./volumes/postgres:/var/lib/postgresql/9.5/data
    environment:
      # psql 用户
      - POSTGRES_USER=postgres
      # psql 密码,自定义
      - POSTGRES_PASSWORD=123456
    user:  $UID:$UID #在终端执行 echo $UID 查看当前用户的 UID,并将 $UID 替换为该值
    restart: always

以下是postgresql和postgis的配置:

version: '2.0'
services:
  postgres:
    image: kartoza/postgis:9.6-2.4
    # build: kartoza/postgis:9.6-2.4
    ports:
      - "5432:5432"
    volumes:
      - ./volumes/postgres:/var/lib/postgresql/9.5/data
    environment:
      #  psql 用户
      - POSTGRES_USER=postgres
      # psql 密码
      - POSTGRES_PASSWORD=123456
    user: 0:0
    restart: always

启动容器,查看日志:

docker-compose up -d postgres    #启动容器  提示! 使用docker-compose命令要在docker-compose目录下使用
docker-compose ps                #查看容器
docker-compose logs -f           #查看日志

当容器启动成功后,我们可以运行以下命令打开 PostgreSQL,之后创建一个新的数据库用户:
Docker实现odoo部署_第1张图片
然后添加用户,并赋予创建数据库的权限

postgres=# CREATE user admin WITH password '123456';  #odoo/123456,用户密码自定义。。。。
CREATE ROLE
postgres=# ALTER user admin WITH createdb;
ALTER ROLE
postgres=#

退出容器

exit

接下来建立odoo12的容器,即在原来的docker-compose.yml文件添加内容,最后的内容为:
方法一:使用网上的镜像,较方便,方法同上

version: '2.0'
services:

  postgres:
    image: postgres:9.5
    ports:
      - "5432:5432"       
    volumes:
      - ./volumes/postgres:/var/lib/postgresql/9.5/data
    environment:
      # psql 用户
      - POSTGRES_USER=postgres
      # psql 密码
      - POSTGRES_PASSWORD=123456
    user: 0:0
    restart: always
   
  odoo12:
    image: odoo:12.0
    command: start
    ports:
      - "8069:8069"
      - 127.0.0.1:8072:8072
    links:
      - postgres:db
    volumes:
      - ./volumes/odoo12/additional_addons:/opt/odoo/additional_addons
      - ./volumes/odoo12/addons:/opt/odoo/sources/odoo/addons
      - ./volumes/odoo12/filestore:/opt/odoo/data/filestore
      - ./volumes/odoo12/sessions:/opt/odoo/data/sessions
      - ./volumes/odoo12/ssh:/opt/odoo/ssh:ro
      - ./volumes/odoo12/myaddons:/mnt/extra-addons  #这是放自定义模块的文件夹
      
    env_file:
      - ./env/odoo12.env
    restart: always

方法二:自己重新制作镜像

version: '2.0'
services:

  postgres:
    image: postgres:9.5
    ports:
      - "5432:5432"       
    volumes:
      - ./volumes/postgres:/var/lib/postgresql/9.5/data
    environment:
      # psql 用户
      - POSTGRES_USER=postgres
      # psql 密码
      - POSTGRES_PASSWORD=123456
    user: 0:0
    restart: always
   
  odoo12:
    build: ./build/odoo12
    command: start
    ports:
      - "8069:8069"
      - 127.0.0.1:8072:8072
    links:
      - postgres:db
    volumes:
      - ./volumes/odoo12/additional_addons:/opt/odoo/additional_addons
      - ./volumes/odoo12/addons:/opt/odoo/sources/odoo/addons
      - ./volumes/odoo12/filestore:/opt/odoo/data/filestore
      - ./volumes/odoo12/sessions:/opt/odoo/data/sessions
      - ./volumes/odoo12/ssh:/opt/odoo/ssh:ro
      - ./volumes/odoo12/myaddons:/mnt/extra-addons  #这是放自定义模块的文件夹
      
    env_file:
      - ./env/odoo12.env
    restart: always

从上可知,我们需要新建一个env,./env/odoo12.env,内容如下:

# 默认要拉取的模块仓库地址
ADDONS_REPO=
# 是否自动拉取关联模块,通过 oca_dependencies.txt 定义
FETCH_OCA_DEPENDENCIES=True
# 宿主机的 UID
TARGET_UID=$UID
# ODOO_ 开头的都是 Odoo 的配置变量,可以自由添加更多的 Odoo 配置变量
ODOO_ADMIN_PASSWD=admin
ODOO_DB_USER=admin   #除postgres以外的数据库用户,需确保已存在此数据库用户,上面步骤我们已建立了admin用户,所以直接用admin用户吧
ODOO_DB_PASSWORD=123456  #admin数据库用户的密码
# ODOO_DBFILTER=odoo_.*    #这是一个数据库的选择过滤规则,odoo_.*的意思是只展示odoo_开头的数据库,不需要的可以注释掉啦

以为就结束了吗?不!我们还需要建立一个Dockerfile文件,路径是./build/odoo12/Dockerfile
我们为 odoo12 指定了 build 的路径,这是因为我们在开发时,可能会在原始的镜像上添加新的库和依赖等,需要通过
Dockerfile 构建适合项目的运行环境
,最简单的 Dockerfile 看起来是这样的:这是Ruter大佬的文章中的解释

FROM elicocorp/odoo:12.0
MAINTAINER Elico Corp <[email protected]>

最后我们可以启动容器啦!!!!

docker-compose up -d odoo12  

查看是否启动成功,如下图则表示已经成功启动啦,输入ip地址加8069端口就可以访问啦~~
在这里插入图片描述

直接拉取镜像

要是有镜像或者是有自己的私有仓库,可以直接用image,然后方式镜像地址名称tag,如下,这样就不用像上面一样新建./env/odoo12.env和Dockerfile文件了。

version: '2.0'
services:
  postgres:
    image: kartoza/postgis:9.6-2.4
    # build: kartoza/postgis:9.6-2.4
    ports:
      - "5432:5432"
    volumes:
      - ./volumes/postgres:/var/lib/postgresql/9.5/data
    environment:
      #  psql 用户
      - POSTGRES_USER=postgres
      # psql 密码
      - POSTGRES_PASSWORD=123456
    user: 0:0
    restart: always
  odoo12:
    image: 10.10.1.83/odoo/odoo12:v1.0.0
    command: start
    ports:
      - "8069:8069"
      - 127.0.0.1:8072:8072
    links:

遇到的一些坑

  1. 将自己的模块路径设置到容器里的conf
docker ps  #查看odoo容器的id
docker exec -it id /bin/bash   #通过以上id进入odoo容器
ps -aux | grep odoo  #查看odoo进程 

Docker实现odoo部署_第2张图片
从上已知odoo.conf的位置,进行编辑,添加docker-compose.yml文件里的容器路径即可,/mnt/extra-addons。
Docker实现odoo部署_第3张图片
最后重启odoo容器就成功把自定义模块的文件让odoo识别到啦!

docker-compose restart odoo12  #重启odoo12容器
  1. 建立数据库用户的时候忘记给创建数据库的权限,创建数据库的时候就会报没有权限创建数据库,给权限即可
alter user admin createdb;
  1. 创建数据库成功,但跳转不了界面,那么就是设置了ODOO_DBFILTER,注释掉即可
  2. 启动不了postgres容器,一直处于restarting的状态,查看日志报错信息为
    Docker实现odoo部署_第4张图片
    查看自己的docker-compose.yml文件,是不是添加了 - /etc/passwd:/etc/passwd:ro,注释掉即可,或者是在宿主机创建一个postgres/123456用户即可,密码自定义,需和docker-compose.yml中的一致。

经历了两天折腾docker,还有一些内容没有完全理解透彻,若有不对的地方,欢迎广大道友指出,谢谢群友的解答以及Ruter大佬的指导。后续更新在个人Harbor服务器上提交镜像。

你可能感兴趣的:(odoo,docker,odoo12,odoo,docker)