docker搭建odoo企业管理开源解决方案

搭建erp用于远程协作, 团队协作, 远程办公

有什么用/怎么用

如何安装部署Odoo社区版

​ 部分模块免费的; 安装有2中方式: 源码在操作系统中安装配置 和 Docker安装部署

​ 可升级使用一些收费的功能模块

如何安装Odoo企业版

​ 收费的; 有试用期

https://system0.carlzeng.com:3/web/login

相关内容

社区版Docker安装实现方法

需要准备的目录有:

Odoo ERP的部分

​ odoo-web-data

​ config

​ addons

Odoo 数据库的部分:

​ odoo-db-data

version: '3.1'
services:
  web:
    image: odoo:17.0
    depends_on:
      - odoodb
    ports:
      - "8069:8069"
    volumes:
      - ./odoo-web-data:/var/lib/odoo
      #- ./config:/etc/odoo
      #- ./addons:/mnt/extra-addons
    environment:
      - HOST=odoodb
      - USER=odoo
      - PASSWORD=myodoo20250401
  odoodb:
    image: postgres:15
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=myodoo20250401
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - ./odoo-db-data:/var/lib/postgresql/data/pgdata

运行命令:

cd ~
mkdir odoo
cd odoo
mkdir odoo-web-data && mkdir config && mkdir addons && mkdir odoo-db-data
vi docker-compose.yaml

docker-compose up

访问 http://192.168.6.117:8069

Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

后台显示的错误以及解决办法

web-1     | 2025-04-01 13:30:10,775 1 ERROR ? odoo.http: Exception during request handling.              
web-1     | Traceback (most recent call last):                                                           
web-1     |   File "/usr/lib/python3/dist-packages/odoo/http.py", line 2206, in __call__                 
web-1     |     request._post_init()                                                                     
web-1     |   File "/usr/lib/python3/dist-packages/odoo/http.py", line 1391, in _post_init               
web-1     |     self.session, self.db = self._get_session_and_dbname()                                   
web-1     |   File "/usr/lib/python3/dist-packages/odoo/http.py", line 1397, in _get_session_and_dbname  
web-1     |     session = root.session_store.new()                                                       
web-1     |   File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 28, in __get__              
web-1     |     value = self.fget(obj)                                                                   
web-1     |   File "/usr/lib/python3/dist-packages/odoo/http.py", line 2132, in session_store            
web-1     |     path = odoo.tools.config.session_dir                                                     
web-1     |   File "/usr/lib/python3/dist-packages/odoo/tools/config.py", line 766, in session_dir       
web-1     |     os.makedirs(d, 0o700)                                                                    
web-1     |   File "/usr/lib/python3.10/os.py", line 225, in makedirs                                    
web-1     |     mkdir(name, mode)                                                                        
web-1     | PermissionError: [Errno 13] Permission denied: '/var/lib/odoo/sessions'                      
web-1     | 2025-04-01 13:30:10,776 1 INFO ? werkzeug: 192.168.6.221 - - [01/Apr/2025 13:30:10] "GET /fav
icon.ico HTTP/1.1" 500 - 0 0.000 0.001  
#解决办法:

$ sudo chmod -R 777 addons
$ sudo chmod -R 777 config
$ sudo chmod -R 777 odoo-db-data
$ sudo chmod -R 777 odoo-web-data

设置好权限以后, 可以运行访问网页

image-20250401213614590

企业版Odoo安装步骤

下载网盘地址 https://drive.google.com/drive/folders/1VUujb8d9Y1sQ98xA0jk4WZteryn0oOoe

How to install Odoo Enterprise.

1: download and install community edition.
2: download the zip file called addons-18e.zip and put it into /usr/lib/python3/dist-packages
3: extract the file and allow overwrite all
4: restart odoo server & update apps
5: download odoo18_unlimited.zip from the same drive link
6: unzip odoo18_unlimited.zip into your addons directory (try to keep separate from main odoo addons.
7: restart odoo server again and then update apps in odoo
8: activate odoo_unlimited
9: install accounting module
10: activate odoo
11: All done

本小节来源: https://babia.to/threads/odoo-enterprise.37673/page-100

1. download and install community edition

mkdir odoo18e
cd odoo18e
docker pull odoo:18.0-20241125

#选了半天, 只知道是16版本, 先试试16.9; 在https://hub.docker.com/_/postgres找到的tag
docker pull postgres:16.9





mkdir odoo-web-data && mkdir config && mkdir addons && mkdir odoo-db-data
mkdir dist-packages
vi docker-compose.yaml


$ sudo chmod -R 777 addons
$ sudo chmod -R 777 config && sudo chmod -R 777 odoo-db-data && sudo chmod -R 777 odoo-web-data && sudo chmod -R 777 dist-packages

docker-compose up

docker pull odoo:18.0-20241125

[MARK] 第一步就有问题, 需要安装特定的deb文件

https://drive.google.com/drive/folders/1phzmPK7nQ65WKCqAa_N25OupxKMAfxFF

然后在: 2: download the zip file called addons-18e.zip and put it into /usr/lib/python3/dist-packages

关键就是这个deb文件和docker pull 到的 ce版本不一样!

问题变成: 如何让deb在docker中运行, 在自动解压和覆盖一个addons-18e.zip文件到目录/usr/lib/python3/dist-packages;

docker exec -it --user root odoo18e-web-1 /bin/bash



find / -name odoo    
/usr/bin/odoo
/usr/share/doc/odoo
/usr/share/lintian/overrides/odoo
/usr/lib/python3/dist-packages/point_of_sale/tools/posbox/overwrite_before_init/etc/logrotate.d/odoo
/usr/lib/python3/dist-packages/point_of_sale/tools/posbox/overwrite_after_init/home/pi/odoo
/usr/lib/python3/dist-packages/odoo
/usr/lib/python3/dist-packages/dist-packages2/odoo
/etc/init.d/odoo
/etc/logrotate.d/odoo
/etc/odoo
/mnt/extra-addons/point_of_sale/tools/posbox/overwrite_before_init/etc/logrotate.d/odoo
/mnt/extra-addons/point_of_sale/tools/posbox/overwrite_after_init/home/pi/odoo
/var/log/odoo
/var/lib/odoo



find / -name odoo.conf
/usr/lib/python3/dist-packages/point_of_sale/tools/posbox/configuration/odoo.conf
/etc/odoo/odoo.conf
/mnt/extra-addons/point_of_sale/tools/posbox/configuration/odoo.conf


service odoo restart




然后在解压 6: unzip odoo18_unlimited.zip into your addons directory (try to keep separate from main odoo addons.

7: restart odoo server again and then update apps in odoo

8: activate odoo_unlimited
9: install accounting module
10: activate odoo

这些能用dockerfile来完成吗?

使用docker-compose.yml

version: '3.1'
services:
  web1:
    image: odoo:17.0
    depends_on:
      - odoodb2
    ports:
      - "8070:8069"
    volumes:
      - ./odoo-web-data:/var/lib/odoo
 #     - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
      - ./dist-packages:/usr/lib/python3/dist-packages
    environment:
      - HOST=odoodb2
      - USER=odoo
      - PASSWORD=myodoo20250713
  odoodb2:
    image: postgres:15
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=myodoo20250713
      - PGDATA=/var/lib/postgresql/data/pgdata2
    volumes:
      - ./odoo-db-data:/var/lib/postgresql/data/pgdata2

odoodb-1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
odoodb-1  | 
odoodb-1  | 2025-07-13 14:53:40.108 UTC [1] LOG:  starting PostgreSQL 15.12 (Debian 15.12-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
odoodb-1  | 2025-07-13 14:53:40.108 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
odoodb-1  | 2025-07-13 14:53:40.108 UTC [1] LOG:  listening on IPv6 address "::", port 5432
odoodb-1  | 2025-07-13 14:53:40.119 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
odoodb-1  | 2025-07-13 14:53:40.129 UTC [29] LOG:  database system was shut down at 2025-07-13 14:53:13 UTC
odoodb-1  | 2025-07-13 14:53:40.138 UTC [1] LOG:  database system is ready to accept connections
web-1     | Traceback (most recent call last):
web-1     |   File "/usr/local/bin/wait-for-psql.py", line 3, in <module>
web-1     |     import psycopg2
web-1     | ModuleNotFoundError: No module named 'psycopg2'
web-1 exited with code 1

把odoo:18.0-20241125 换成了odoo18

故障依旧

把odoo:18 换成能正常使用的 odoo:17

故障依旧, 说明不是odoo包本身的问题.

成功使用18.0-20241125版本

version: '3.1'
services:
  web:
    image: odoo:18.0-20241125
    depends_on:
      - odoodb
    ports:
      - "8070:8069"
    volumes:
      - ./odoo-web-data:/var/lib/odoo
      #- ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
      #- ./dist-packages:/usr/lib/python3/dist-packages
    environment:
      - HOST=odoodb
      - USER=odoo
      - PASSWORD=myodoo20250713
  odoodb:
    image: postgres:15
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=myodoo20250713
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - ./odoo-db-data:/var/lib/postgresql/data/pgdata

下一步 进一步把配置的目录都逐一映射出来

原因是这个: – ./dist-packages:/usr/lib/python3/dist-packages 一旦添加这个, 就会报错误, 原因是系统里面有内容, 而映射出来的目录是空的. 需要先运行起来以后, 然后把 docker里面的dist-packages内容都复制出来,然后在添加映射.

image-20250714231620552

image-20250714231811031

2: download the zip file called addons-18e.zip and put it into /usr/lib/python3/dist-packages

通过复制出来的方式, 添加addons-18e.zip, 可是…

docker cp 容器Id或name:容器内路径 本地文件夹路径
docker cp containername:/usr/share/nginx/html /volume2/KingchuxingSSD512G/docker/compose/it-tools/html

docker cp b55461b312c7:/usr/lib/python3/dist-packages /root/odoo18e/

root@debian12:~/odoo18e/dist-packages# ls
Babel-2.10.3.egg-info                  _distutils_hack
Jinja2-3.1.2.egg-info                  _ldap.cpython-312-x86_64-linux-gnu.so
MarkupSafe-2.1.5.egg-info              _rjsmin.cpython-312-x86_64-linux-gnu.so
OpenSSL                        _sass.abi3.so
PIL                        _yaml
PyPDF2                         asn1crypto
PyYAML-6.0.1.dist-info                 asn1crypto-1.5.1.egg-info
Unidecode-1.3.8.egg-info               attr
XlsxWriter-3.1.9.egg-info              attrs
__pycache__                    attrs-23.2.0.dist-info
_cbor2.cpython-312-x86_64-linux-gnu.so         babel
_cffi_backend.cpython-312-x86_64-linux-gnu.so

root@debian12:~/odoo18e/dist-packages# cd ..
root@debian12:~/odoo18e# ls
addons  config  dist-packages  docker-compose.yaml  odoo-db-data  odoo-web-data
root@debian12:~/odoo18e# docker cp b55461b312c7:/usr/lib/python3/dist-packages /root/odoo18e/
invalid symlink "/root/odoo18e/dist-packages/babel/global.dat" -> "../../../../share/python-babel-localedata/global.dat"
root@debian12:~/odoo18e# docker cp b55461b312c7:/usr/lib/python3/dist-packages /root/odoo18e/
invalid symlink "/root/odoo18e/dist-packages/babel/global.dat" -> "../../../../share/python-babel-localedata/global.dat"

有没有其他办法永久性改变docker中的某个特定目录内容?

临时的workaround: 直接复制到docker中去, 每次 重启docker 都要重新去复制进去, 然后解压缩, 覆盖

Steps:

  1. 复制本机addons-18e.zip到debian12的目录中去/root/odoo18e/

  2. scp -P 22226 /Users/carlzeng/Downloads/addons-18e.zip carlzeng@127.0.0.1:/home/carlzeng/addons-18e.zip

  3. 由于权限的缘故, 只能先传输到目录: /home/carlzeng

  4. scp -P 22226 /Users/carlzeng/Downloads/addons-18e.zip carlzeng@127.0.0.1:/home/carlzeng/addons-18e.zip

    carlzeng@127.0.0.1’s password:

    stalledaddaddaddaddons-18e.zip 14% 55MB 4.6MB/s 01:11 ETA

  5. ssh进入debian12的root, 然后复制到root用户目录/root/odoo18e/

  6. cp /home/carlzeng/addons-18e.zip /root/odoo18e/addons-18e.zip

  7. 解压缩在/root/odoo18e/

    1. unzip addons-18e.zip
    2. 生成出来addons文件夹
  8. 复制debian12中的addons-18e.zip到docker的/usr/lib/python3/dist-packages中去

  9. docker cp /root/odoo18e/addons-18e.zip b55461b312c7:/usr/lib/python3/dist-packages/addons-18e.zip

  10. 成功了, 但是docker中无法运行unzip(没有安装, 且无法安装)
  11. 复制debian12中的addons文件夹(以及下面的所有文件和文件夹)到docker的/usr/lib/python3/dist-packages中去
  12. docker cp /root/odoo18e/addons/ b55461b312c7:/usr/lib/python3/dist-packages/

  13. [忽略]docker exec -it 进入docker的目录进行addons-18e.zip解压缩并覆盖

  14. unzip archive_name.zip`:这将解压缩ZIP文件到当前目录。

  15. tar 无法解压缩.zip文件.

  16. odoo@b55461b312c7:/usr/lib/python3/dist-packages$ apt-get install zip

    E: Could not open lock file /var/lib/dpkg/lock-frontend – open (13: Permission denied)

    E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

  17. 如何在docker中解压缩?

docker cp 忽略某个文件

先使用

tar -zcvf archive.tar.gz –exclude=/usr/lib/python3/dist-packages/babel/global.dat /usr/lib/python3/dist-packages

tar -zcvf archive.tar.gz dist-packages
tar (child): archive.tar.gz: Cannot open: Permission denied
tar (child): Error is not recoverable: exiting now
dist-packages/
dist-packages/num2words-0.5.13.egg-info/
dist-packages/num2words-0.5.13.egg-info/requires.txt
dist-packages/num2words-0.5.13.egg-info/PKG-INFO
tar: archive.tar.gz: Cannot write: Broken pipe
tar: Child returned status 2
tar: Error is not recoverable: exiting now

20250715思路:

可以使用UI工具, 浏览 和 打包整个/dist-packages/文件夹, 然后拿到容器外面来修改

使用类似这样的批量命令复制全部

docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/_cbor2.cpython-312-x86_64-linux-gnu.so  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/_cffi_backend.cpython-312-x86_64-linux-gnu.so  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/_ldap.cpython-312-x86_64-linux-gnu.so  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/_rjsmin.cpython-312-x86_64-linux-gnu.so  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/_sass.abi3.so  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/cached_property.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/decorator.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/distutils-precedence.pth  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/docopt.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/ldapurl.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/ldif.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/png.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/polib.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pyasn1_modules-0.2.8.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pycairo-1.25.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pysassc.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/requests_file.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/rjsmin.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/roman.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/sass.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/six.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/typing_extensions.py  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/zope.event-5.0-nspkg.pth  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/zope.interface-6.1-nspkg.pth

web-1 | ImportError: cannot import name ‘localedata’ from partially initialized module ‘babel’ (most likely due to a circular import) (/usr/lib/python3/dist-packages/babel/init.py)

名称  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/Babel-2.10.3.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/Jinja2-3.1.2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/MarkupSafe-2.1.5.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/OpenSSL  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/PIL  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/PyPDF2  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/PyYAML-6.0.1.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/Unidecode-1.3.8.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/XlsxWriter-3.1.9.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/__pycache__  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/_distutils_hack  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/_yaml  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/asn1crypto  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/asn1crypto-1.5.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/attr  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/attrs  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/attrs-23.2.0.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/babel  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/beautifulsoup4-4.12.3.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/bs4  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/cached_property-1.5.2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/cairo  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/cbor2  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/cbor2-5.6.2.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/certifi  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/certifi-2023.11.17.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/chardet  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/chardet-5.2.0.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/charset_normalizer  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/charset_normalizer-3.3.2.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/cryptography  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/cryptography-41.0.7.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/cryptography.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/dateutil  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/decorator-5.1.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/defusedxml  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/defusedxml-0.7.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/docopt-0.6.2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/docutils  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/docutils-0.20.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/et_xmlfile  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/et_xmlfile-1.0.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/freetype  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/freetype_py-2.4.0.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/freezegun  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/freezegun-1.2.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/geoip2  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/geoip2-2.9.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/gevent  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/gevent-24.2.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/greenlet  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/greenlet-3.0.3.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/gyp  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/gyp-0.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/idna  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/idna-3.6.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/isodate  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/isodate-0.6.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/jinja2  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/ldap  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/libsass-0.22.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/lxml  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/lxml-5.2.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/lxml_html_clean  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/lxml_html_clean-0.1.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/magic  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/markupsafe  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/maxminddb  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/maxminddb-2.5.2.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/num2words  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/num2words-0.5.13.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/odf  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/odfpy-1.4.2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/odoo  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/odoo-18.0.post20241125.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/ofxparse  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/ofxparse-0.21.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/openpyxl  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/openpyxl-3.1.2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/passlib  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/passlib-1.7.4.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pdfminer  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pdfminer.six-20221105.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/phonenumbers  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/phonenumbers-8.12.57.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pillow-10.2.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pip  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pip-24.0.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pkg_resources  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/platformdirs  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/platformdirs-4.2.0.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/polib-1.1.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/psutil  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/psutil-5.9.8.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/psycopg2  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/psycopg2-2.9.9.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pyOpenSSL-23.2.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pyasn1  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pyasn1-0.4.8.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pyasn1_modules  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pypdf2-2.12.1.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pypng-0.20231004.0.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pyserial-3.5.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/python_dateutil-2.8.2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/python_ldap-3.4.4.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/python_magic-0.4.27.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/python_slugify-8.0.4.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/python_stdnum-1.19.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pytz  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pytz-2024.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/pyusb-1.2.1.post2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/qrcode  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/qrcode-7.4.2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/reportlab  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/reportlab-4.1.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/requests  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/requests-2.31.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/requests_file-1.5.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/requests_toolbelt  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/requests_toolbelt-1.0.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/rjsmin-1.2.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/rlPyCairo  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/rlPyCairo-0.3.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/roman-3.3.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/sassutils  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/serial  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/setuptools  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/setuptools-68.1.2.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/six-1.16.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/slapdtest  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/slugify  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/soupsieve  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/soupsieve-2.5.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/stdnum  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/typing_extensions-4.10.0.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/unidecode  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/urllib3  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/urllib3-2.0.7.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/usb  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/vobject  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/vobject-0.9.6.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/watchdog  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/watchdog-3.0.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/werkzeug  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/werkzeug-3.0.1.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/wheel  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/wheel-0.42.0.dist-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/xlrd  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/xlrd-2.0.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/xlsxwriter  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/xlwt  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/xlwt-1.3.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/yaml  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/zeep  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/zeep-4.2.1.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/zope  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/zope.event-5.0.egg-info  /root/odoo18e/dist-packages/ 
docker cp 8d0116c1f93d:/usr/lib/python3/dist-packages/zope.interface-6.1.egg-info

image-20250715230700882

复制完成了babel文件夹下面的所有文件, 不包含那些连接文件的2个文件

运行报错:

odoodb-1  | 2025-07-15 15:13:35.829 UTC [1] LOG:  database system is ready to accept connections
web-1     | Traceback (most recent call last):
web-1     |   File "/usr/bin/odoo", line 5, in <module>
web-1     |     import odoo
web-1     |   File "/usr/lib/python3/dist-packages/odoo/__init__.py", line 49, in <module>
web-1     |     _monkeypatches.patch_all()
web-1     |   File "/usr/lib/python3/dist-packages/odoo/_monkeypatches/__init__.py", line 31, in patch_all
web-1     |     patch_werkzeug()
web-1     |   File "/usr/lib/python3/dist-packages/odoo/_monkeypatches/werkzeug_urls.py", line 1044, in patch_werkzeug
web-1     |     from ..tools.json import scriptsafe  # noqa: PLC0415
web-1     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1     | ModuleNotFoundError: No module named 'odoo.tools'
web-1 exited with code 1

先把addons-18e.zip unzip到dist-packages目录下, 在看看错误会不会自己消失?

cp -r addons/* dist-packages/

还是依旧报同样上方的错误

0716 检查出来: 原来

docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo /root/odoo18e/dist-packages/

invalid symlink “/root/odoo18e/dist-packages/odoo/addons/point_of_sale/static/src/fonts/Inconsolata.otf” -> “../../../../../../../../../share/fonts/truetype/inconsolata/Inconsolata.otf”

docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/cli  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/conf  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/exceptions.py  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/fields.py  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/http.py  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/import_xml.rng  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/loglevels.py  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/models.py  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/modules  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/netsvc.py  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/osv  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/release.py  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/service  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/sql_db.py  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/tests  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/tools  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/upgrade  /root/odoo18e/dist-packages/odoo/ 
docker cp 17c661c4ff14:/usr/lib/python3/dist-packages/odoo/upgrade_code /root/odoo18e/dist-packages/odoo/ 

终于解决了错误; 错误变了

web-1     |   File "/usr/lib/python3/dist-packages/odoo/_monkeypatches/werkzeug_urls.py", line 1044, in patch_werkzeug
web-1     |     from ..tools.json import scriptsafe  # noqa: PLC0415
web-1     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1     |   File "/usr/lib/python3/dist-packages/odoo/tools/__init__.py", line 8, in <module>
web-1     |     from . import pdf
web-1     |   File "/usr/lib/python3/dist-packages/odoo/tools/pdf/__init__.py", line 13, in <module>
web-1     |     from reportlab.lib import colors
web-1     | ModuleNotFoundError: No module named 'reportlab.lib'
web-1 exited with code 1

image-20250716215307666

docker cp f9f29717401a:/usr/lib/python3/dist-packages/reportlab/graphics /root/odoo18e/dist-packages/reportlab/

docker cp f9f29717401a:/usr/lib/python3/dist-packages/reportlab/lib /root/odoo18e/dist-packages/reportlab/

docker cp f9f29717401a:/usr/lib/python3/dist-packages/reportlab/pdfbase /root/odoo18e/dist-packages/reportlab/

docker cp f9f29717401a:/usr/lib/python3/dist-packages/reportlab/pdfgen /root/odoo18e/dist-packages/reportlab/

docker cp f9f29717401a:/usr/lib/python3/dist-packages/reportlab/platypus /root/odoo18e/dist-packages/reportlab/

docker cp f9f29717401a:/usr/lib/python3/dist-packages/reportlab/rl_config.py /root/odoo18e/dist-packages/reportlab/

docker cp f9f29717401a:/usr/lib/python3/dist-packages/reportlab/rl_settings.py /root/odoo18e/dist-packages/reportlab/

6: unzip odoo18_unlimited.zip into your addons directory (try to keep separate from main odoo addons.

  1. scp -P 22226 /Users/carlzeng/Downloads/odoo18_unlimited.zip carlzeng@127.0.0.1:/home/carlzeng/odoo18_unlimited.zip

carlzeng@127.0.0.1’s password:

odoo18_unlimited.zip 100% 2105 34.0KB/s 00:00

  1. ssh进入debian12的root, 然后复制到root用户目录/root/odoo18e/

  2. cp /home/carlzeng/odoo18_unlimited.zip /root/odoo18e/odoo18_unlimited.zip

  3. 解压缩在/root/odoo18e/

  4. unzip odoo18_unlimited.zip

    Archive: odoo18_unlimited.zip

    creating: odoo_unlimited/
    
    creating: odoo_unlimited/models/
    

    inflating: odoo_unlimited/models/update.py

    inflating: odoo_unlimited/models/init.py

    inflating: odoo_unlimited/init.py

    inflating: odoo_unlimited/manifest.py

  5. 生成出来odoo_unlimited文件夹

  6. 把新生成的odoo_unlimited文件夹放到 addons文件夹中去

  7. cp -r odoo_unlimited ./addons/

  8. 核实/编辑docker-compose, 确保 – ./addons:/mnt/extra-addons

如何在UI上更新应用? 刷新

更新应用列表和安装/升级应用。首先,需要激活开发者模式,然后更新应用列表。更新完成后,就可以搜索并安装或升级需要的应用。

8: activate odoo_unlimited

搜索的页面, 默认选择了‘应用’, 这时无法搜索到odoo_unlimited. 需要先删除掉‘应用’这个filter.

9: install accounting module

成功安装, 但是会报JS错误:

Odoo客户端错误
UncaughtClientError > TypeError

Uncaught Javascript Error > this.titleService.setCounters is not a function

Occured on o.carlzeng.com on 2025-07-16 14:45:02 GMT

TypeError: this.titleService.setCounters is not a function
    clearUnreadMessage@https://o.carlzeng.com/web/assets/f5ab0f4/web.assets_web.min.js:15472:658
    setup/<@https://o.carlzeng.com/web/assets/f5ab0f4/web.assets_web.min.js:15472:539
    trigger@https://o.carlzeng.com/web/assets/f5ab0f4/web.assets_web.min.js:745:63
    onFocusChange@https://o.carlzeng.com/web/assets/f5ab0f4/web.assets_web.min.js:10466:168
    start/<@https://o.carlzeng.com/web/assets/f5ab0f4/web.assets_web.min.js:10469:97

4: restart odoo server & update apps

无法完成, 因为一重启docker, 上一步复制进去的内容就全部消失, 洗干净了.

根据odoo_18.0.2024-11-25.deb文件制作dockerfile

根据18.0的https://github.com/odoo/docker/blob/b254689862e8a1bbb9624bf86022867544582dd2/18.0/Dockerfile

待测试

Odoo定制单据打印的PDF内容

激活开发者模式后,可在”设置->技术->用户界面->视图”搜索和编辑视图:

image-20250403175105057

可以看到打印模板视图是QWeb视图。QWeb是一个基于XML的模板引擎,用于生成HTML片段和界面。模板命令是写在XML标签内以”t-“开头的属性。

以报价单打印模板为例,可通过“t-field=doc.字段名”输出单据头体信息:

功能定制

odoo产品目录树 父子产品

需求: 比如实现如PS5; PS5更换霍尔摇杆这样的子产品; 或者说产品分类

实现:

  1. 启用: 库存

要设置产品类型,请转到 库存应用程序 ‣ 产品 ‣ 产品,然后从列表中选择所需的产品。

在产品表单的 产品类型 字段中

Product Type

https://system0.carlzeng.com:3/web#action=173&model=product.category&view_type=list&cids=1&menu_id=229

odoo没有父子产品的概念

可以设置系统字段: Category

odoo配置邮件发送

因为收不到邮件, 管理员新建的用户, 无法完成密码设置, 导致新用户无法进入系统

收不到Email的情况下, 如何新建用户?

直接在登录页面注册, 然后管理员到后台修改.

发现: 访问权限 中无法设置权限.

解决办法: 直接在用户设置页面的; 设置(齿轮图标) – 修改密码

销售模块

如何关闭报价单模块

无法关闭, 需关闭整个‘销售’应用模块才行; 而这样做就偏离了预期

如何设置默认视图, 这样一打开就看到 销售订单/订单

或者如何在odoo中自定义页头的菜单; 这样我新建一个菜单, 比如叫做 ‘打开订单列表’ 就时默认的销售订单.

解决办法: 设置菜单, 自定义. Setting – Technical – User Interface – Menu Items

如何直接创建一个销售订单

如何直接创建一个销售订单, 而不是每次都从报价单开始

折中方案: 每次在手机上创建好报价单后, 点击‘Confirm’ 确认, 确定为销售订单.

如何修改销售订单的表单?

想要把 ‘客户参考号’放到主页面Main的部位, 方便手机用户查看 和录入/核实

From View

Odoo Form View Customization Step-by-Step Guide

改了半天把系统改坏了怎么办?

image-20260128223756130

删除了docker17的镜像; 重新让docker-compose从远程拉去镜像,

数据库不动

单单删除镜像是没用的,

 - ./odoo-web-data:/var/lib/odoo                 

把这个存储在本地的删除掉; 还是不行, 无法恢复到docker刚安装时的默认状态…

把pg数据库备份出来;

image-20260128225511869

重新在一个目录创建容器

version: '3.1'
services:
  web:
    image: odoo:17.0
    depends_on:
      - odoodb
    ports:
      - "8069:8069"
    volumes:
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
    environment:
      - HOST=odoodb
      - USER=odoo
      - PASSWORD=myodoo20250401
  odoodb:
    image: postgres:15
    ports:
      - "5435:5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=myodoo20250401
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - ./odoo-db-data:/var/lib/postgresql/data/pgdata 

image-20260128230432486

Database restore error: Couldn’t restore database

services:
  odoo:
    image: odoo:18.0
    container_name: odoo_web
    restart: always
    depends_on:
      - postgres
    ports:
      - "8069:8069"
    volumes:
      - ./odoo-web-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
    environment:
      - HOST=postgres
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo20260202

  postgres:
    image: postgres:15
    container_name: odoo_postgres
    restart: always
    volumes:
      - ./odoo-db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo20260202
      - PGDATA=/var/lib/postgresql/data

如果Permission denied报错

| PermissionError: [Errno 13] Permission denied: '/var/lib/odoo/.local' 
sudo chown -R 101:101 odoo-web-data
sudo chmod -R 775 odoo-web-data

本小结鸣谢: Docker Compose 快速安裝 Odoo

创建Sandbox环境

使用单独的文件目录

~/odoo16sandbox
mkdir odoo16sandbox && cd odoo16sandbox
mkdir -p {addons,config,data,odoo-db-data,oca-addons,odoo-web-data}

sudo chown -R 101:101 odoo-web-data
sudo chmod -R 775 odoo-web-data

nano docker-compose.yaml


services:
  # PostgreSQL 数据库(适配 Odoo 16 的 14 版本)
  dbsb1:
    image: postgres:14-alpine
    container_name: odoo16-db-sb1
    environment:
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo20260202
      - POSTGRES_DB=postgres
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    restart: always

  # Odoo 16 CE 主服务(挂载 OCA 会计模块)
  odoosb1:
    image: odoo:16.0
    container_name: odoo16-app-sb1
    depends_on:
      - dbsb1
    ports:
      - "8070:8069"
    environment:
      - HOST=dbsb1
      - USER=odoo
      - PASSWORD=odoo20260202
      # 核心:挂载自定义模块 + OCA 会计模块目录
      - ADDONS_PATH=/mnt/addons,/mnt/oca-addons
    volumes:
      - ./config/odoo.conf:/etc/odoo/odoo.conf
      - ./addons:/mnt/addons
      - ./oca-addons:/mnt/oca-addons
      - ./data/odoo:/var/lib/odoo
    restart: always
PermissionError: [Errno 13] Permission denied: '/var/lib/odoo/.local' 


sudo chown -R 101:101 odoo-web-data
sudo chmod -R 775 odoo-web-data
$ sudo chmod -R 777 addons
$ sudo chmod -R 777 config
$ sudo chmod -R 777 odoo-db-data

sudo chmod -R 775 odoo-db-data
没有解决

rm -r odoo-web-data/ && mkdir odoo-web-data
没解决
rm -r odoo-db-data/ && mkdir odoo-db-data
没解决

sudo chown -R 100:101 odoo-web-data
没解决
sudo chown -R 100:101 odoo-db-data/
没解决

sudo chmod -R 777 ./data/odoo
解决了!
原来是提示的意思是: Permission denied: '/var/lib/odoo/.local' 对这个目录没有执行权限, 而这个/var/lib/odoo 映射为 ./data/odoo目录了. 只要解决这个目录的权限问题, 报错就解决了

访问和调试sandbox: http://192.168.6.117:8070/

如何增加并开启Add-ons

放到 addons 目录下
mv reporting-engine/* ./

rm -rf reporting-engine  # 删除空目录



docker exec -it odoo16-app-sb1 bash
pip3 install xlsxwriter reportlab barcode python-barcode

docker exec -it odoo16-app-sb1 bash

docker部署的odoo16, 所有的addons都没有添加到odoo系统, 不知道问题出在哪里了?

odoo.conf

dbfilter = .*



命令方式: 
odoo --db-filter=.



调整映射
volumes:
      - ./config/odoo.conf:/etc/odoo/odoo.conf
生效了, 问题的关键
生效了, 问题的关键
生效了, 问题的关键

手动新建的模块 custom_footer_js 无法显示/安装

兜底方案:如果仍未解决,可直接将模块复制到 Odoo 默认的 extra-addons 目录(/mnt/extra-addons),该目录默认会被扫描,验证模块本身是否有问题。

添加: 
volumes:
    - ./extra-addons:/mnt/extra-addons

The database manager has been disabled by the administrator

通过这个参数调整odoo.conf文件内容: list_db = False

Sample odoo.conf

[options]
db_host = dbsb1
db_port = 5432
db_user = odoo
db_password = odoo20260202

addons_path = /mnt/addons,/mnt/oca-addons

dbfilter = .*
list_db = False

odoo database expiration Fix

没有会计/财务模块

version: '3.8'

services:
  # PostgreSQL 数据库(适配 Odoo 16 的 14 版本)
  db:
    image: postgres:14-alpine
    container_name: odoo16-db
    environment:
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo20260202
      - POSTGRES_DB=postgres
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    restart: always

  # Odoo 16 CE 主服务(挂载 OCA 会计模块)
  odoo:
    image: odoo:16.0
    container_name: odoo16-app
    depends_on:
      - db
    ports:
      - "8069:8069"
    environment:
      - HOST=db
      - USER=odoo
      - PASSWORD=odoo20260202
      # 核心:挂载自定义模块 + OCA 会计模块目录
      - ADDONS_PATH=/mnt/addons,/mnt/oca-addons
    volumes:
      - ./config:/etc/odoo
      - ./addons:/mnt/addons
      - ./oca-addons:/mnt/oca-addons
      - ./data/odoo:/var/lib/odoo
    restart: always

mkdir -p ~/odoo16-oca/{config,addons,oca-addons,data} && cd ~/odoo16-oca
sudo chmod -R 777 ./data
sudo chown -R 1000:1000 ./addons ./oca-addons



cd ./oca-addons
git clone -b 16.0 https://gh-proxy.org/https://github.com/OCA/account-financial-t
ools.git

git clone -b 16.0 https://gh-proxy.org/https://github.com/OCA/account-financial-reporting.git


sudo chown -R 101:101 ./data/odoo
sudo chmod -R 775 ./data/odoo



git clone -b 16.0 https://gh-proxy.org/https://github.com/nguyenthitritue/Odoo-Addons.git

https://github.com/OCA/account-financial-tools/tree/16.0

Next:

https://github.com/bringout/oca-ocb-accounting/tree/16.1

https://github.com/bringout/oca-payment

https://github.com/OCA/account-invoicing/tree/16.0

https://github.com/OCA/maintainer-tools

Altinkaya Free Odoo Addons https://github.com/altinkaya-opensource/odoo-addons

把创建者改成维修单上的负责人 要怎么写规则域表达式

你想要把之前基于「创建人(create_uid)」的权限规则,改成基于维修单上的「负责人」字段来限制用户仅查看自己作为负责人的维修单,核心是修改记录规则的域表达式,将判断字段从 create_uid 换成维修单的负责人字段。

第一步:确认维修单的负责人字段名称

Odoo 官方维修模块(maintenance)中,维修单(maintenance.request)的「负责人」字段默认名称是:

  • 字段技术名:user_id(对应界面上的「负责人」/「Assigned to」)
  • 字段类型:关联到 res.users(用户模型)

第二步:修改记录规则的域表达式

进入之前创建的「维修单:仅查看自己创建的」记录规则(设置 → 技术 → 安全 → 记录规则),将「域」字段的表达式替换为以下内容:

核心域表达式(仅看自己作为负责人的维修单)

[(‘user_id’, ‘=’, user.id)]

  • user_id:维修单上的「负责人」字段技术名;
  • user_id = user.id:仅当维修单的负责人等于当前登录用户时,该记录才可见;
  • 逻辑:用户只能看到自己被分配为负责人的维修单,无论该单据是谁创建的。

进阶场景:兼容「负责人为空」或「多条件」

如果需要补充场景(比如允许用户看到「负责人为空」的维修单,或同时看自己创建 + 自己负责的),可使用以下表达式:

| 需求场景 | 域表达式 | |
| :———————–: | :—————————: | :———————————————————-: |
| 仅看自己负责的 | [('user_id', '=', user.id)] | |
| 看自己负责的 + 无负责人的 | [' | ', ('user_id', '=', user.id), ('user_id', '=', False)] |
| 看自己创建的 + 自己负责的 | [' | ', ('create_uid', '=', user.id), ('user_id', '=', user.id)] |

维修单 负责人字段 如何设置为只读

你想要把 Odoo 维修单(maintenance.request)上的「负责人(user_id)」字段设置为只读,核心是通过修改维修单的表单视图,给 user_id 字段添加 readonly="1" 属性;如果需要更灵活的只读规则(比如仅对普通用户只读、管理员可编辑),还可以用权限表达式控制。以下是两种常用方法,按需选择。

方法一:全局只读(所有用户都不能编辑)

适用于「任何用户都不能修改负责人,只能由系统 / 管理员初始化」的场景,纯界面操作即可完成。

步骤 1:进入维修单表单视图编辑页面

  1. 确保已开启开发者模式
  2. 进入 Odoo 「维修」模块 → 「维修单」 → 打开任意一张维修单;
  3. 点击页面右上角「编辑视图:表单」(开发者模式下才会显示)。

步骤 2:修改负责人字段的属性

  1. 在视图编辑界面的「架构」标签页,找到「负责人」对应的字段行(默认字段名是

user_id

),原始代码通常是:

odoo 维修单 单号如何添加日期

  1. 開啟開發者模式
  2. 找到維修單序列設定
  3. 進入 設定 (Settings) > 技術 (Technical) 選單。
    在「序列與識別符」區塊中點擊 序列 (Sequences)。
    在搜尋欄輸入 repair 或 維修,找到名稱為 Repair Order (代碼通常為 repair.order) 的紀錄並點開。
  4. 修改前綴以加入日期
  5. %(year)s:當前年份(4 位數,如 2026)。
  6. %(y)s:當前年份(2 位數,如 26)。
  7. %(month)s:當前月份(01-12)。
  8. %(day)s:當前日期(01-31)。

範例配置:
如果您希望單號顯示為 RO/20260206/0001

  • 前綴 (Prefix)RO/%(year)s%(month)s%(day)s/
  • 序號長度 (Sequence Size)4 (這決定了後面的數字位數)。

灵感来源

Odoo (formerly known as OpenERP) is a suite of open-source business apps.

https://github.com/minhng92/odoo-17-docker-compose


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注