这是从未接触过docker,ubuntu16.04 实现部署odoo12社区版的教程。主要介绍内容为:
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
systemctl enable 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。在拉取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,之后创建一个新的数据库用户:
然后添加用户,并赋予创建数据库的权限
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:
docker ps #查看odoo容器的id
docker exec -it id /bin/bash #通过以上id进入odoo容器
ps -aux | grep odoo #查看odoo进程
从上已知odoo.conf的位置,进行编辑,添加docker-compose.yml文件里的容器路径即可,/mnt/extra-addons。
最后重启odoo容器就成功把自定义模块的文件让odoo识别到啦!
docker-compose restart odoo12 #重启odoo12容器
alter user admin createdb;
经历了两天折腾docker,还有一些内容没有完全理解透彻,若有不对的地方,欢迎广大道友指出,谢谢群友的解答以及Ruter大佬的指导。后续更新在个人Harbor服务器上提交镜像。