• 首页
  • 栏目
  • ERP
  • odoo源码运行环境如何迁移至docker生产环境

odoo源码运行环境如何迁移至docker生产环境

  • 2022-01-09
  • Admin

近期公司要求实现生产环境容器化,公司的odoo12在源码环境下运行了两年多,积累了不少数据,如何迁移至docker生产环境?下面分两部分进行介绍:

一、odoo的docker容器化

odoo需要两个容器连接来运行,一是odoo;二是postgresql.因此这里是使用docker-compose来完成.

docker-compose.yml

version: '3.1'
services:
  web:
    image: odoo:12.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      # 注意:使用./web-data:/var/lib/odoo 系统运行会报错;只有使用 web-data:/var/lib/odoo 系统才会正常。
      - web-data:/var/lib/odoo
      - ./conf:/etc/odoo
      - ~/odoo12/B8_addons:/mnt/B8_addons
      - ~/odoo12/OCA/account-financial-tools:/mnt/account-financial-tools
      - ~/odoo12/OCA/reporting-engine:/mnt/reporting-engine
      - ~/odoo12/OCA/contract:/mnt/contract
      - ~/odoo12/OCA/sale-workflow:/mnt/sale-workflow
      - ~/odoo12/OCA/account-closing:/mnt/account-closing
      - ~/odoo12/om_account:/mnt/om_account
    restart: always
  db:
    image: postgres:10
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=123456
      - POSTGRES_USER=postgres
      - PGDATA=/var/lib/postgresql/data/pgdata
    ports:
      - "5432:5432"
    volumes: 
      - pg-data:/var/lib/postgresql/data/pgdata
    restart: always
volumes:
  web-data:
  pg-data:
  • 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

在docker-compose.yml所在目录中执行:

docker-compose up -d
  • 1

名为web的服务

image: odoo:12.0
获取镜像odoo版本12.0的,其他版本如15.0,直接修改为 image: odoo:15.0即可

depends_on:
- db
名为web的容器服务是依赖于名为db的容器服务

ports:
- “8069:8069”
宿主机端口:容器端口

./conf:/etc/odoo
宿主机目录/conf中存放的是odoo.conf(附后),映射到容器中的目录/etc/odoo;

~/odoo12/B8_addons:/mnt/B8_addons
宿主机目录~/odoo12/B8_addons中存放的是自行开发的插件,映射到容器中的目录/mnt/B8_addons

restart: always
服务器重启时,容器也会自动重启

名为db的服务

image: postgres:10
获取镜像postgres版本10的,其他版本如13.0,直接修改为 image: postgres:13即可

environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=123456
- POSTGRES_USER=postgres
- PGDATA=/var/lib/postgresql/data/pgdata
数据库postgres的环境配置,依次是数据库名称\数据库密码\数据库用户\数据库文件在容器中存放的位置

后面几条语句就不再重复了.

odoo.conf

[options]
addons_path = /mnt/B8_addons, /mnt/account-financial-tools, /mnt/reporting-engine, mnt/contract, /mnt/sale-workflow, /mnt/account-closing, /mnt/om_account, /usr/lib/python3/dist-packages/odoo/addons
# addons_path = /mnt/B8_addons, /mnt/account-financial-tools, /mnt/reporting-engine, mnt/contract, /mnt/sale-workflow, /mnt/account-closing, /usr/lib/python3/dist-packages/odoo/addons
# addons_path = /home/raymond/odoo-dev/B8_addons,/home/raymond/odoo-dev/OCA/hr,/home/raymond/odoo-dev/OCA/contract,/home/raymond/odoo-dev/OCA/account-invoicing,/home/raymond/odoo-dev/OCA/account-financial-tools
# admin_passwd = $pbkdf2-sha512$25000$1FpLCQEAwDiH8D4HwBgjJA$bKhjkp/twDvAievcpzC1cvivzB4slhbCaBnHKMEXlizQGbY3OPwazkluEGMPT35hHlzaYcl2QKNTVWQ5/bFDnA
# csv_internal_sep = ,
# data_dir = arb/odoo/.local/Odoo
# db_host = 127.0.0.1
# db_maxconn = 64
# db_name = B8ERP
# db_password = odoo
# db_port = 5432
# db_sslmode = prefer
# db_template = template0
# db_user = odoo
# dbfilter = B8ERP
# demo = {}
# email_from = False
# geoip_database = /usr/GeoIP/GeoLite2-City.mmdb
# http_enable = True
# http_interface = 
http_port = 8069
# import_partial = 
# limit_memory_hard = 2684354560
# limit_memory_soft = 2147483648
# limit_request = 8192
# limit_time_cpu = 300
# limit_time_real = 360
# limit_time_real_cron = -1
# list_db = True
# log_db = False
# log_db_level = warning
# log_handler = :INFO
# log_level = info
# logfile = /home/raymond/odoo-dev/my_odoo/odoo-server.log
# logrotate = False
# longpolling_port = 8072
# max_cron_threads = 2
# osv_memory_age_limit = 1.0
# osv_memory_count_limit = False
# pg_path = None
# pidfile = False
# proxy_mode = False
# reportgz = False
# server_wide_modules = base,web
# smtp_password = False
# smtp_port = 25
# smtp_server = localhost
# smtp_ssl = False
# smtp_user = False
# syslog = False
# test_enable = False
# test_file = False
# test_tags = None
# translate_modules = ['all']
# unaccent = False
# without_demo = False
# workers = 4

  • 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
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

二、备份PostgreSQL数据库及恢复

可以参考:

如何备份PostgreSQL数据库

拷贝本地备份文件到docker容器

注意,按这篇文章所提供的语句docker inspect -f '{{.ID}}' store-dev查找出来的实际上是镜像ID,并非容器ID.请使用docker ps来查看容器id,参见 docker cp复制本地文件到docker容器时报错的处理办法

恢复备份文件

进入容器docker exec -u root -it 容器名 /bin/bash

先删除容器挂载的数据库(如B8ERP),再创建一个空数据库

dropdb B8ERP
createdb B8ERP
  • 1
  • 2

使用 psql 恢复数据库

psql B8ERP<B8ERP20220108.bak -U postgres -d B8ERP
  • 1

<完毕>

原文:https://blog.csdn.net/weixin_43425561/article/details/122395156

联系站长

QQ:769220720