├── .gitignore ├── .vscode └── launch.json ├── README.md ├── odoo-data └── data ├── odoo-db └── docker-compose.yml └── odoo.conf /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | # odoo development 132 | odoo-data/addons 133 | odoo-data/sessions 134 | odoo-data/filestore -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "odoo", 9 | "type": "debugpy", 10 | "request": "launch", 11 | // "stopOnEntry": true, 12 | "pythonPath": "/home/twtrubiks/Documents/venv/odoo13/bin/python3", 13 | "program": "${workspaceFolder}/odoo-bin", 14 | "args": [ 15 | "-w", 16 | "odoo", 17 | "-r", 18 | "odoo", 19 | // "-d", 20 | // "odoo", 21 | "-c", 22 | "/home/twtrubiks/work/odoo13/config/odoo.conf" 23 | ] 24 | }, 25 | { 26 | "name": "odoo attach", 27 | "type": "debugpy", 28 | "request": "attach", 29 | "connect": { 30 | "host": "localhost", 31 | "port": 19000 32 | }, 33 | }, 34 | ] 35 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # odoo-development-environment-tutorial 2 | 3 | 建立 odoo 開發環境 ( source code ) 4 | 5 | 本篇文章將教大家如何使用 odoo source code 建立開發環境, 6 | 7 | 如果你想要用 docker 建立, 可參考 [利用 docker 快速建立 odoo 環境](https://github.com/twtrubiks/odoo-docker-tutorial). 8 | 9 | 延伸閱讀 [手把手教大家撰寫 odoo 的 addons - 進階篇](https://github.com/twtrubiks/odoo-demo-addons-tutorial) 10 | 11 | ## 目錄 12 | 13 | 1. [建立 odoo 開發環境](https://github.com/twtrubiks/odoo-development-environment-tutorial#odoo-development-environment-tutorial) - [Youtube Tutorial - 如何建立 odoo 開發環境 - odoo13 - 從無到有](https://youtu.be/Yazci5Rd0p4) 14 | 15 | 2. [Odoo VSCode Debug](https://github.com/twtrubiks/odoo-development-environment-tutorial#odoo-vscode-debug) - [Youtube Tutorial - 如何在 VS Code 中 Debug - odoo13](https://youtu.be/cV8Sm5yYR38) 16 | 17 | 環境為 Ubuntu 18.04, 非常不推薦 Windows (你會踩雷) :scream: 18 | 19 | ## Prepare 20 | 21 | 需要準備 Ubuntu 18.04 + odoo (source code) + postgresql + wkhtmltopdf + VS Code。 22 | 23 | odoo 我們留在最後再安裝 :smile: 24 | 25 | ### Ubuntu 18.04 26 | 27 | 前面說過了, 不推薦 Windows 開發環境, 你會被 debug 搞死, 相信我 :smirk: 28 | 29 | 而且會遇到不少很怪的問題。 30 | 31 | 注意 :exclamation: :exclamation: 如果你是使用 Ubuntu 20.04, 預設的 python 是 3.8, 32 | 33 | 對 odoo 來說太新了, 安裝會有很多問題, 建議安裝 python3.6 (這版本裝 odoo 比較好建立環境) 34 | 35 | `sudo apt-get install -y python3.6-venv` 36 | 37 | ### postgresql 38 | 39 | 這邊你可以選擇安裝到本機, 但我自己是喜歡把 db 這部份安裝到 docker, 40 | 41 | [docker-compose.yml](https://github.com/twtrubiks/odoo-development-environment-tutorial/blob/master/odoo-db/docker-compose.yml) 42 | 43 | ```ymal 44 | version: '3.5' 45 | services: 46 | 47 | db: 48 | image: postgres:10.9 49 | ports: 50 | - "5432:5432" 51 | environment: 52 | - POSTGRES_DB=postgres 53 | - POSTGRES_USER=odoo 54 | - POSTGRES_PASSWORD=odoo 55 | - PGDATA=/var/lib/postgresql/data/pgdata 56 | volumes: 57 | - odoo-db-data:/var/lib/postgresql/data/pgdata 58 | 59 | volumes: 60 | odoo-db-data: 61 | ``` 62 | 63 | 直接執行 `docker-compose up` 即可, 也可以讓他在背景跑 `docker-compose up -d`。 64 | 65 | ![alt tag](https://i.imgur.com/IcSt8mn.png) 66 | 67 | 然後建議依照 [在 Linux 中自動啟動 docker](https://github.com/twtrubiks/docker-tutorial/tree/master/docker-auto-run-linux) 讓他開機自動啟動。 68 | 69 | (這樣就不用每次都要去啟動 db 了) 70 | 71 | ### pgadmin4 72 | 73 | 可參考 [利用 docker 快速建立 pgadmin4 以及 Ubuntu 本機如何安裝 pgadmin4](https://github.com/twtrubiks/docker-pgadmin4-tutorial) 74 | 75 | 建議把 postgresql-client-12 安裝起來, 不然 odoo 可能無法還原備份 db. 76 | 77 | `sudo apt install postgresql-client-12` 78 | 79 | 這邊提醒一下, 主要是看你的 postgresql 是使用哪個版本的, 80 | 81 | 如果你同時安裝了 postgresql12 以及 postgresql13, 82 | 83 | 你就再安裝 `sudo apt install postgresql-client-13`. 84 | 85 | 可以到 `/usr/share/postgresql` 確認你安裝了哪些版本. 86 | 87 | ### wkhtmltopdf 88 | 89 | 尋找對應的版本安裝即可 [wkhtmltopdf](https://wkhtmltopdf.org/downloads.html) 90 | 91 | ```cmd 92 | wkhtmltopdf --version 93 | ``` 94 | 95 | ![alt tag](https://i.imgur.com/aLaE0Dh.png) 96 | 97 | 這邊推薦的版本為 0.12.5。 98 | 99 | 如果你在 odoo 列印 PDF 時, 遇到以下的錯誤 100 | 101 | ```text 102 | Wkhtmltopdf failed (error code: -8). Message: b'' error 103 | ``` 104 | 105 | ![alt tag](https://i.imgur.com/0uac0Ok.png) 106 | 107 | 這是字型的問題, 請安裝字型 108 | 109 | ```cmd 110 | sudo apt install ttf-mscorefonts-installer 111 | ``` 112 | 113 | ### odoo 114 | 115 | clone odoo repo 116 | 117 | ```cmd 118 | git clone https://github.com/odoo/odoo.git 119 | ``` 120 | 121 | 確認是否為 odoo 13 branch ( 預設為 odoo 13 ) 122 | 123 | ![alt tag](https://i.imgur.com/hYmP7W4.png) 124 | 125 | 接著不要急, 來建立 odoo python 環境 126 | 127 | ```cmd 128 | python3 -m venv odoo13 129 | ``` 130 | 131 | ![alt tag](https://i.imgur.com/TrIwBRY.png) 132 | 133 | 如果出現以下錯誤, 134 | 135 | ![alt tag](https://i.imgur.com/wRxLIjU.png) 136 | 137 | 請安裝 python3-venv 138 | 139 | ```cmd 140 | sudo apt-get install python3-venv 141 | ``` 142 | 143 | 然後再次執行 `python3 -m venv odoo13` 即可。 144 | 145 | 接著啟動環境, 146 | 147 | ```cmd 148 | source odoo13/bin/activate 149 | ``` 150 | 151 | ![alt tag](https://i.imgur.com/Ci0F62d.png) 152 | 153 | 接著是安裝 requirements.txt ( 這個檔案在 odoo 的 source code 中 ) 154 | 155 | ```cmd 156 | pip3 install -r requirements.txt 157 | ``` 158 | 159 | 我會建議安裝 requirements.txt 前, 先把 wheel 裝起來 160 | 161 | ```cmd 162 | pip3 install wheel 163 | ``` 164 | 165 | ![alt tag](https://i.imgur.com/CwW8PiY.png) 166 | 167 | 安裝 requirements.txt 時, 可能會出現類似下面的錯誤訊息。 168 | 169 | 可能出現的錯誤一, 170 | 171 | ```cmd 172 | error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 173 | ``` 174 | 175 | 執行以下指令即可, 可參考 [issues/2115](https://github.com/scrapy/scrapy/issues/2115) 176 | 177 | ```cmd 178 | sudo apt-get install python3 python-dev python3-dev \ 179 | build-essential libssl-dev libffi-dev \ 180 | libxml2-dev libxslt1-dev zlib1g-dev \ 181 | python-pip 182 | ``` 183 | 184 | 這邊補充一下, 建議依照你的 python 版本安裝, 例如你今天安裝了 python3.8, 185 | 186 | 就執行 `sudo apt-get install python3.8-dev` 187 | 188 | 以此類推. 189 | 190 | 可能出現的錯誤二, 191 | 192 | python-ldap 安裝失敗,執行以下指令即可, 193 | 194 | ```cmd 195 | sudo apt-get install libsasl2-dev python-dev libldap2-dev libssl-dev 196 | ``` 197 | 198 | 可能出現的錯誤三, 199 | 200 | 有時候 psycopg2 會安裝失敗(odoo15), 建議可以改安裝 psycopg2-binary. 201 | 202 | ```cmd 203 | pip3 install psycopg2-binary 204 | ``` 205 | 206 | 可能出現的錯誤四, 207 | 208 | 有時候更新 python 時 (自己遇過一次), 某個套件竟然自己壞了, 209 | 210 | 錯誤訊息如下, 211 | 212 | ```text 213 | ImportError: /python3.6/site-packages/lxml/etree.cpython-36m-x86_64-linux-gnu.so: undefined symbol: PyFPE_jbuf 214 | ``` 215 | 216 | 解法方法, 217 | 218 | ```cmd 219 | pip3 install --upgrade --force-reinstall --no-binary :all: lxml==3.7.1 220 | ``` 221 | 222 | 基本上到這邊可以稍微休息一下. 223 | 224 | 解決後再重新安裝 requirements.txt 即可. 225 | 226 | ### odoo16 227 | 228 | 這邊紀錄一下, odoo16 環境的建立, 229 | 230 | 首先是 python 的版本, python 3.9 or python 3.8 都可以, 231 | 232 | 如果出現底下的錯誤訊息, 233 | 234 | ```text 235 | ERROR: Failed building wheel for python-ldap 236 | ``` 237 | 238 | 一樣安裝下面指令就對了(請注意自己的 python 版本) 239 | 240 | ```python 241 | sudo apt-get install build-essential python3.9-dev libsasl2-dev libldap2-dev libssl-dev 242 | ``` 243 | 244 | 另外是如果你有佈署, 會發現有一點點不一樣, 245 | 246 | 因為 odoo16 開始 longpolling 變 websocket 了 (效能更好), 247 | 248 | 所以設定上會有點不同, 詳細說明請參考官方文件 249 | 250 | [https://www.odoo.com/documentation/16.0/administration/install/deploy.html](https://www.odoo.com/documentation/16.0/administration/install/deploy.html) 251 | 252 | ### 設定 odoo 環境 253 | 254 | 先確認 db 有啟動。 255 | 256 | 設定 [odoo.conf](odoo.conf), 我會建議建立一個資料夾, 比較好維護, 257 | 258 | ```conf 259 | [options] 260 | addons_path = /home/twtrubiks/work/odoo13/addons 261 | data_dir = /home/twtrubiks/Downloads/odoo-git/odoo-data 262 | db_host = localhost 263 | ``` 264 | 265 | `addons_path` 就是 addons 的位置,通常都會有很多,使用逗號隔開即可。 266 | 267 | ( 我自己是都會給 addons 權限 `sudo chmod -R 777 folder` , 因為之前有踩過雷 ) 268 | 269 | `data_dir` 保存 odoo 資料夾。 270 | 271 | `db_host` 為 db 的 host。 272 | 273 | ![alt tag](https://i.imgur.com/LntDbDj.png) 274 | 275 | 執行以下指令 276 | 277 | ```cmd 278 | python3 odoo-bin -w odoo -r odoo -c /home/twtrubiks/work/odoo13/config/odoo.conf 279 | ``` 280 | 281 | `-w` db_password 282 | 283 | `-r` db_user 284 | 285 | `-c` config 路徑. 當然, 你也可以不要用 config , 直接在 command 中下設定 286 | 287 | `--stop-after-init` 當初始化結束後, 就會自動關閉 server (不管安裝成功或失敗) 288 | 289 | 更多可參考 [Command-line interface: odoo-bin](https://www.odoo.com/documentation/13.0/reference/cmdline.html)。 290 | 291 | ![alt tag](https://i.imgur.com/gNkDfJ3.png) 292 | 293 | 瀏覽 [http://0.0.0.0:8069/](http://0.0.0.0:8069/), 成功看到畫面了, 294 | 295 | ![alt tag](https://i.imgur.com/xEALOWg.png) 296 | 297 | ### Odoo VSCode Debug 298 | 299 | [Youtube Tutorial - 如何在 VS Code 中 Debug - odoo13](https://youtu.be/cV8Sm5yYR38) 300 | 301 | 開發環境非常建議使用 Linux , 我使用 Ubuntu 18.04。 302 | 303 | ( 注意, windows 用戶需要做其他的設定, 否則你會發現無論如何啟用 debug 時, 都會直接關閉 ) 304 | 305 | 如果不懂 VSCode, 可參考 [Python in Visual Studio Code](https://github.com/twtrubiks/vscode_python_note)。 306 | 307 | VSCode 的設定可參考 [launch.json](https://github.com/twtrubiks/odoo-development-environment-tutorial/blob/master/.vscode/launch.json) 308 | 309 | ```json 310 | { 311 | // Use IntelliSense to learn about possible attributes. 312 | // Hover to view descriptions of existing attributes. 313 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 314 | "version": "0.2.0", 315 | "configurations": [ 316 | { 317 | "name": "odoo", 318 | "type": "python", 319 | "request": "launch", 320 | // "stopOnEntry": true, 321 | "pythonPath": "/home/twtrubiks/Documents/venv/odoo13/bin/python3", 322 | "program": "${workspaceFolder}/odoo-bin", 323 | "args": [ 324 | "-w", 325 | "odoo", 326 | "-r", 327 | "odoo", 328 | // "-d", 329 | // "odoo", 330 | "-c", 331 | "/home/twtrubiks/work/odoo13/config/odoo.conf" 332 | ] 333 | } 334 | ] 335 | } 336 | ``` 337 | 338 | `pythonPath` 設定 python 環境 ( venv 的位置 )。 339 | 340 | `program` odoo-bin 的位置。 341 | 342 | `-d` 指定 odoo database。 343 | 344 | 先把 Expense (hr_expense) 裝起來 (我們將使用它來測試中斷點), 345 | 346 | ![alt tag](https://i.imgur.com/Yf4nHww.png) 347 | 348 | 建立中斷點,中斷位置是 `addons/hr_expense/models/hr_expense.py` 裡的 `def create` 349 | (當建立檔案時, 會進入這個 function 中) 350 | 351 | ![alt tag](https://i.imgur.com/SV4glxI.png) 352 | 353 | 開啟 VSCode debug ( 快捷按鍵 F5 ), 354 | 355 | ![alt tag](https://i.imgur.com/9jU39HC.png) 356 | 357 | 到 odoo 中建立一筆 hr_expense, 當你要產生一筆 sheet 時, 358 | 359 | ![alt tag](https://i.imgur.com/ptXxcXa.png) 360 | 361 | 成功進入中斷點 362 | 363 | ![alt tag](https://i.imgur.com/QPc994W.png) 364 | 365 | #### Odoo VSCode Debug - attach 366 | 367 | 這邊補充另一種方法 debug, 使用 attach 的方式, 368 | 369 | `request` 主要有 `launch` 和 `attach`, 370 | 371 | 需要安裝 `pip install debugpy`, 372 | 373 | 可參考 [Python Debugger](https://github.com/twtrubiks/vscode_python_note?tab=readme-ov-file#python-debugger), 374 | 375 | [launch.json](https://github.com/twtrubiks/odoo-development-environment-tutorial/blob/master/.vscode/launch.json) 設定如下, 376 | 377 | ```json 378 | { 379 | "version": "0.2.0", 380 | "configurations": [ 381 | { 382 | "name": "odoo attach", 383 | "type": "debugpy", 384 | "request": "attach", 385 | "connect": { 386 | "host": "localhost", 387 | "port": 19000 388 | }, 389 | }, 390 | ] 391 | } 392 | ``` 393 | 394 | 先打開一個 terminal 執行 395 | 396 | ```cmd 397 | python3 -m debugpy --listen 0.0.0.0:19000 odoo-bin -d odoo -c config/odoo.conf 398 | ``` 399 | 400 | 注意兩邊設定的 port 要一樣, 這邊統一設定 19000 port, 401 | 402 | 再開一個 terminal 去執行 odoo vscode 的中斷點, 即可順利 debug. 403 | 404 | 通常這種方式使用在已經執行的外部程式, 或是你執行在 docker 中. 405 | 406 | ### 說明 dbfilter 407 | 408 | 這邊特別說明一下 [odoo.conf](odoo.conf) 中的 dbfilter 409 | 410 | ```conf 411 | [options] 412 | ...... 413 | ;The '^' means start of line and the '$' end of line, 414 | ;so '^%d$' only filter db with name 'hostname' following the example. 415 | ;dbfilter = ^%d$ 416 | ``` 417 | 418 | 簡單說, 就是可以透過 dbfilter 去選擇(濾)對應的 db (透過網址), 419 | 420 | 因為一個 odoo 可以有非常多的 db, 但你可能不想讓A客戶看到B客戶的資料庫, 421 | 422 | 就很適合使用 dbfilter 這個參數. 423 | 424 | `dbfilter = ^%d$` 這個 `^` 代表的是開始的符號, `$` 代表的是結束的符號. 425 | 426 | 所以如果今天這樣設定, db 名稱有, `twtrubiks` `twtrubiks01` `twtrubiks02`, 427 | 428 | 然後你的網址是 `www.twtrubiks.com`, 當你進去網址時, 只會看到 `twtrubiks` 這個 db :exclamation: 429 | 430 | 如果你也想看到 `twtrubiks01` `twtrubiks02`, 這樣要改成 `dbfilter = ^%d` 431 | 432 | 也就是把 `$` 拿掉. 433 | 434 | 看文字說明可能很複雜 :scream: 大家可以自己玩玩看, 其實是不難的哦 :smile: 435 | 436 | 延伸閱讀 [手把手教大家撰寫 odoo 的 addons - 進階篇](https://github.com/twtrubiks/odoo-demo-addons-tutorial) 437 | 438 | ## Reference 439 | 440 | * [odoo13 documentation](https://www.odoo.com/documentation/13.0/setup/install.html#linux) 441 | * [Odoo](https://www.odoo.com/) 442 | 443 | ## Donation 444 | 445 | 文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡 :laughing: 446 | 447 | 綠界科技ECPAY ( 不需註冊會員 ) 448 | 449 | ![alt tag](https://payment.ecpay.com.tw/Upload/QRCode/201906/QRCode_672351b8-5ab3-42dd-9c7c-c24c3e6a10a0.png) 450 | 451 | [贊助者付款](http://bit.ly/2F7Jrha) 452 | 453 | 歐付寶 ( 需註冊會員 ) 454 | 455 | ![alt tag](https://i.imgur.com/LRct9xa.png) 456 | 457 | [贊助者付款](https://payment.opay.tw/Broadcaster/Donate/9E47FDEF85ABE383A0F5FC6A218606F8) 458 | 459 | ## 贊助名單 460 | 461 | [贊助名單](https://github.com/twtrubiks/Thank-you-for-donate) 462 | 463 | ## License 464 | 465 | MIT license 466 | -------------------------------------------------------------------------------- /odoo-data/data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/twtrubiks/odoo-development-environment-tutorial/23ee9fdb75467daa2ec8954301ee06676ab31709/odoo-data/data -------------------------------------------------------------------------------- /odoo-db/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.5' 2 | services: 3 | 4 | db: 5 | image: postgres:10 6 | ports: 7 | - "5432:5432" 8 | environment: 9 | - POSTGRES_DB=postgres 10 | - POSTGRES_USER=odoo 11 | - POSTGRES_PASSWORD=odoo 12 | - PGDATA=/var/lib/postgresql/data/pgdata 13 | volumes: 14 | - odoo-db-data:/var/lib/postgresql/data/pgdata 15 | 16 | volumes: 17 | odoo-db-data: -------------------------------------------------------------------------------- /odoo.conf: -------------------------------------------------------------------------------- 1 | [options] 2 | addons_path = /home/twtrubiks/work/odoo13/addons 3 | data_dir = /home/twtrubiks/work/odoo13/odoo-data 4 | db_host = localhost 5 | dbfilter = .* 6 | 7 | ;The '^' means start of line and the '$' end of line, 8 | ;so '^%d$' only filter db with name 'hostname' following the example. 9 | ;dbfilter = ^%d$ 10 | 11 | ;db_maxconn = 64 12 | db_user = odoo 13 | db_password = odoo 14 | db_port = 5432 --------------------------------------------------------------------------------