├── README.md ├── addons └── manay-addons-folder ├── build-odoo-image ├── Dockerfile ├── entrypoint.sh ├── odoo.conf └── wait-for-psql.py ├── config └── odoo.conf ├── docker-compose.yml └── odoo-log-data └── odoo.log /README.md: -------------------------------------------------------------------------------- 1 | # odoo-docker-tutorial 2 | 3 | 該分支是使用 odoo12 為範例, 如需要 odoo15 範例, 請參考 [15.0分支](https://github.com/twtrubiks/odoo-docker-tutorial/tree/15.0) 4 | 5 | ## 目錄 6 | 7 | 1. [odoo 簡介](https://github.com/twtrubiks/odoo-docker-tutorial#%E7%B0%A1%E4%BB%8B) - [Youtube Tutorial - 透過 docker 快速建立 odoo 環境 - 從無到有](https://youtu.be/uqxzq4Td6aU) 8 | 9 | 2. [利用 docker 快速建立 odoo 環境](https://github.com/twtrubiks/odoo-docker-tutorial#%E6%95%99%E5%AD%B8) - [Youtube Tutorial - 透過 docker 快速建立 odoo 環境 - 從無到有](https://youtu.be/uqxzq4Td6aU) 10 | 11 | 3. [odoo12 如何開啟 odoo developer mode](https://github.com/twtrubiks/odoo-docker-tutorial#odoo12-%E5%A6%82%E4%BD%95%E9%96%8B%E5%95%9F-odoo-developer-mode) - [Youtube Tutorial - odoo12 如何開啟 odoo developer mode](https://youtu.be/fUtqWQHbt1I) 12 | 13 | 4. [如何安裝第三方 addons](https://github.com/twtrubiks/odoo-docker-tutorial#%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%9D%E7%AC%AC%E4%B8%89%E6%96%B9-addons) - [Youtube Tutorial - odoo 如何安裝 addons](https://youtu.be/aN35xlUBKwc) 14 | 15 | 5. [如何進入 odoo Database 管理界面](https://github.com/twtrubiks/odoo-docker-tutorial#%E5%A6%82%E4%BD%95%E9%80%B2%E5%85%A5-odoo-database-%E7%AE%A1%E7%90%86%E7%95%8C%E9%9D%A2) - [Youtube Tutorial - 如何進入 odoo Database 管理界面](https://youtu.be/JIRcz1WDLT0) 16 | 17 | 6. [如何使用 pgadmin4 連接 odoo](https://github.com/twtrubiks/odoo-docker-tutorial#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-pgadmin4-%E9%80%A3%E6%8E%A5-odoo) - [Youtube Tutorial - 如何使用 pgadmin4 連接 odoo](https://youtu.be/afuB8wnozo8) 18 | 19 | 7. [Youtube Tutorial - 忘記 admin 密碼該怎麼辦 odoo13](https://youtu.be/C3PGUApVHzM) 20 | 21 | 8. [odoo13 如何啟用 odoo 中的 Logging](https://github.com/twtrubiks/odoo-docker-tutorial#%E5%A6%82%E4%BD%95%E5%95%9F%E7%94%A8-odoo-%E4%B8%AD%E7%9A%84-logging) - [Youtube Tutorial - odoo13 如何啟用 odoo 中的 Logging](https://youtu.be/TwgPfdvuvxQ) 22 | 23 | 9. [odoo13 如何安裝需要 python package 的 addons](https://github.com/twtrubiks/odoo-docker-tutorial#odoo13-%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%9D%E9%9C%80%E8%A6%81-python-package-%E7%9A%84-addons) - [Youtube Tutorial - odoo13 如何安裝需要 python package 的 addons](https://youtu.be/CwaNdXV_2SY) 24 | 25 | 10. [odoo13 - 如何建立屬於自己的 docker odoo image](https://github.com/twtrubiks/odoo-docker-tutorial#odoo13---%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E5%B1%AC%E6%96%BC%E8%87%AA%E5%B7%B1%E7%9A%84-docker-odoo-image) - [Youtube Tutorial - odoo13 - 如何建立屬於自己的 docker odoo image](https://youtu.be/n8n1nJyw9ZM) 26 | 27 | 11. [odoo13 - 如何透過 CLI 還原 odoo db 以及 filestore](https://github.com/twtrubiks/odoo-docker-tutorial#odoo13---%E5%A6%82%E4%BD%95%E9%80%8F%E9%81%8E-cli-%E9%82%84%E5%8E%9F-odoo-db-%E4%BB%A5%E5%8F%8A-filestore) - [Youtube Tutorial - 如何透過 CLI 還原 odoo db 以及 filestore](https://youtu.be/1ng4_xP2e1c) 28 | 29 | 12. [odoo - 如何透過 log_level 了解 ORM RAW SQL](https://github.com/twtrubiks/odoo-docker-tutorial#odoo---%E5%A6%82%E4%BD%95%E9%80%8F%E9%81%8E-log_level-%E4%BA%86%E8%A7%A3-orm-raw-sql) - [Youtube Tutorial - 如何透過 log_level 了解 ORM RAW SQL](https://youtu.be/sZWFGf23gWc) 30 | 31 | ## vscode debug odoo docker 32 | 33 | 請參考 [vscode_debug_docker_odoo17 分支](https://github.com/twtrubiks/odoo-docker-tutorial/tree/vscode_debug_docker_odoo17) 34 | 35 | ## 延伸閱讀 36 | 37 | [如何建立 odoo 開發環境 - odoo13 - 從無到有](https://github.com/twtrubiks/odoo-development-environment-tutorial) 38 | 39 | [手把手教大家撰寫 odoo 的 addons - 進階篇](https://github.com/twtrubiks/odoo-demo-addons-tutorial) 40 | 41 | ## 簡介 42 | 43 | 什麼是 Odoo,他可以吃嗎 :question: 44 | 45 | [Odoo](https://www.odoo.com/) 是一套 ERP 系統,使用 Python 撰寫。 46 | 47 | Odoo 有兩種版本,分別是 48 | 49 | 免費社群版 [Odoo-Community](https://www.odoo.com/page/community),和收費企業版 Odoo-Enterprise。 50 | 51 | Odoo-Community 以及 Odoo-Enterprise 的功能差異可以看 [HERE](https://www.odoo.com/page/editions)。 52 | 53 | 至於為什麼要有 Odoo-Enterprise,原因很簡單,就是要養工程師 :smile: 54 | 55 | 如果大家有興趣,可以去官網看一下 Odoo 的文章,有說會這樣做是因為公司差點 GG。 56 | 57 | Odoo Community 的 source code 都在 github 上,可以點這裡 [odoo](https://github.com/odoo/odoo), 58 | 59 | 其實如果你看他的 branch,你會發現他有很多版本,Odoo8,Odoo9,Odoo10, 60 | 61 | Odoo11,最新的 Odoo12,以及快要推出的 Odoo13。 62 | 63 | 先簡單介紹到這邊就好,讓我們先來看看什麼是 Odoo :satisfied: 64 | 65 | ## 教學 66 | 67 | 這邊為了快速建立環境,將使用 docker 來建立, 68 | 69 | 但是如果你想要開發 addons,我會建議使用 source code 的方式來建立 Odoo, 70 | 71 | 這部分如果大家有興趣有機會我再拍影片教大家 :smirk: 72 | 73 | 如果你不懂 docker,可參考我之前寫的 [Docker 基本教學 - 從無到有 Docker-Beginners-Guide](https://github.com/twtrubiks/docker-tutorial)。 74 | 75 | Odoo 的 docker images 我使用 [odoo docker](https://hub.docker.com/_/odoo), 76 | 77 | 先來看 docker-compose.yml 78 | 79 | ```yml 80 | version: '3.5' 81 | services: 82 | web: 83 | image: odoo:12.0 84 | depends_on: 85 | - db 86 | ports: 87 | - "8069:8069" 88 | volumes: 89 | - odoo-web-data:/var/lib/odoo 90 | - ./config:/etc/odoo 91 | - ./addons:/mnt/extra-addons 92 | # command: 93 | # odoo -r odoo -w odoo -i addons -d odoo 94 | db: 95 | image: postgres:10.9 96 | # ports: 97 | # - "5432:5432" 98 | environment: 99 | - POSTGRES_DB=postgres 100 | - POSTGRES_USER=odoo 101 | - POSTGRES_PASSWORD=odoo 102 | - PGDATA=/var/lib/postgresql/data/pgdata 103 | volumes: 104 | - odoo-db-data:/var/lib/postgresql/data/pgdata 105 | 106 | volumes: 107 | odoo-web-data: 108 | odoo-db-data: 109 | ``` 110 | 111 | 主要有兩個 services, 112 | 113 | 先來看 web,這個主要就是 Odoo,這邊我們使用 `odoo:12.0`,然後這邊順便提一下, 114 | 115 | Odoo 每天都會在 [Odoo Nightly builds](http://nightly.odoo.com) build, 116 | 117 | 你可以到 [odoo-docker-github](https://github.com/odoo/docker) 這邊去看這個 image 是用幾月幾號的 Odoo Source code build 的, 118 | 119 | 如果你覺得太舊了,你也可以利用他的 Dockerfile 去 build 更新的 Odoo,這部分一樣有機會再教大家 :smirk: 120 | 121 | volumes 中的 `odoo-web-data:/var/lib/odoo` 是儲存 Odoo 中的資料。 122 | 123 | volumes 中的 `./config:/etc/odoo` 則是 Odoo 的 config 設定 ( 等等會說明 )。 124 | 125 | volumes 中的 `./addons:/mnt/extra-addons` 則是 Odoo 的第三方 addons, 126 | 127 | 我在 [addons](https://github.com/twtrubiks/odoo-docker-tutorial/tree/master/addons) 裡面放了 manay-addons-folder 檔案,代表說這邊就是要放 addons。 128 | 129 | ( 因為 github 不能傳空的資料夾 :wink:) 130 | 131 | 這邊我說明一下,其實 Odoo 是由很多 addons 組成的, 132 | 133 | 可以看這邊 [https://github.com/odoo/odoo/tree/12.0/addons](https://github.com/odoo/odoo/tree/12.0/addons), 134 | 135 | 一個資料夾就是一個 addons,當然,既有的 addons 可能無法滿足需求, 136 | 137 | 這時候就會有客製化以及第三方 addons 的存在, 138 | 139 | 這時候你可能會問,除了原生的 addons,哪裡有第三方 addons 呢 :question: 140 | 141 | 我提供幾個地方給大家參考,主要有兩個,首先是 [OCA](https://github.com/OCA),裡面超多 addons, 142 | 143 | 再來是 [Odoo Apps](https://www.odoo.com/apps/modules),裡面有免費和付費的。 144 | 145 | 這篇文章不會和大家說要如何自己撰寫一個 addons,下次有機會會再拍影片 :smirk: 146 | 147 | command 中的 `odoo -r odoo -w odoo -i addons -d odoo`,這段我是註解掉的, 148 | 149 | 原因是不需要,什麼時候你會需要他 :question: 150 | 151 | 當你需要透過 command line 安裝或更新 addons 的時候就可以這樣寫, 152 | 153 | odoo 中的 command line 說明可參考 [Command-line interface:odoo-bin](https://www.odoo.com/documentation/12.0/reference/cmdline.html), 154 | 155 | ( 一般的情況是要使用 odoo-bin,不過在 docker 中使用 odoo 即可 ) 156 | 157 | 回頭再來看 [odoo.conf](https://github.com/twtrubiks/odoo-docker-tutorial/tree/master/config) 158 | 159 | ```conf 160 | [options] 161 | addons_path = /mnt/extra-addons 162 | data_dir = /var/lib/odoo 163 | ``` 164 | 165 | `addons_path` 就是 addons 的位置,通常都會有很多,使用逗號隔開即可。 166 | 167 | `data_dir` 保存 odoo 資料夾。 168 | 169 | 這裡面其實還有超級多的參數設定 ( 暫時跳過 ) :smirk: 170 | 171 | 再來看 db, 172 | 173 | Odoo 是使用 postgres,ports 的部分我是註解掉的,但這樣本機就無法訪問他, 174 | 175 | ( 為什麼 ports 註解掉本機就無法連接,這邊如果你不太了解, 176 | 177 | 可參考 [docker-compose ports 和 expose 差異](https://github.com/twtrubiks/docker-tutorial#docker-compose-ports-%E5%92%8C-expose-%E5%B7%AE%E7%95%B0) ) 178 | 179 | 如果你想要用 pgadmin4 之類的軟體連接到 postgres,請將註解取消,這樣你才可以連到資料庫 180 | 181 | ( pgadmin4 是一套免費的工具,連接 postgres,可參考 [利用 docker 快速建立 pgadmin4](https://github.com/twtrubiks/docker-pgadmin4-tutorial) ) 182 | 183 | ## 執行 odoo 184 | 185 | ```cmd 186 | docker-compose up 187 | ``` 188 | 189 | 然後可以瀏覽 [http://localhost:8069](http://localhost:8069), 190 | 191 | ![alt tag](https://i.imgur.com/fpmc67U.png) 192 | 193 | 你應該會看到下圖, 194 | 195 | ![alt tag](https://i.imgur.com/6FS6NPw.png) 196 | 197 | 設定完之後等耐心等候, 198 | 199 | ![alt tag](https://i.imgur.com/BJFU12e.png) 200 | 201 | ## odoo12 如何開啟 odoo developer mode 202 | 203 | * [Youtube Tutorial - odoo12 如何開啟 odoo developer mode](https://youtu.be/fUtqWQHbt1I) 204 | 205 | 在 odoo 中, 開啟 developer mode 是很重要的 :thumbsup: 206 | 207 | 他可以幫助你很多事情, 那要如何開啟呢 :question: 208 | 209 | 點選 Settings 210 | 211 | ![alt tag](https://i.imgur.com/qiTHdhI.png) 212 | 213 | 你會發現右邊有兩個選項, 分別是, 214 | 215 | Activate the developer mode -> 通常我都選這個。 216 | 217 | Activate the developer mode (with assets) -> 這個事前端 debug 用的。 218 | 219 | ![alt tag](https://i.imgur.com/Cs5j6Vj.png) 220 | 221 | 點選下去之後, 你會發現網址多了 `?debug` 的字, 222 | 223 | ![alt tag](https://i.imgur.com/jadcuLD.png) 224 | 225 | 其實你後來會發現, 直接將網址的 web 字串後加上 `?debug` 就可以進入 debug 了。 226 | 227 | 如果你還是很懶, 也有瀏覽器擴充可以幫忙, 228 | 229 | 像是 Odoo Debug - Google Chrome 之類的 , Firefox 也有。 230 | 231 | ## 如何安裝第三方 addons 232 | 233 | * [Youtube Tutorial - odoo 如何安裝 addons](https://youtu.be/aN35xlUBKwc) 234 | 235 | 使用 [Row Number in tree/list view](https://apps.odoo.com/apps/modules/12.0/rowno_in_tree/) 這個 addons 做測試, 236 | 237 | 請記得選對版本, 這邊選擇 odoo12, 下載後, 請解壓縮 238 | 239 | ![alt tag](https://i.imgur.com/MQDJZGQ.png) 240 | 241 | 接著放入 addons 資料夾 242 | 243 | ![alt tag](https://i.imgur.com/bN0J7Ho.png) 244 | 245 | 我會建議這兩步驟也要操作, 246 | 247 | 將 addons 資料夾給最大權限 ( Linux 用戶 ) 248 | 249 | ```cmd 250 | sudo chmod -R 777 addons 251 | ``` 252 | 253 | 如果對 Linux 指令不熟 , 可參考 [紀錄一些 linux 的指令📝](https://github.com/twtrubiks/linux-note) 254 | 255 | ![alt tag](https://i.imgur.com/9pGcFjy.png) 256 | 257 | 然後重起 server ( 這步驟很重要, 有時候沒重起真的會遇到很怪的問題 :joy: ) 258 | 259 | ![alt tag](https://i.imgur.com/glw83qW.png) 260 | 261 | 記得開 debug, 點選 Update Apps List 262 | 263 | ![alt tag](https://i.imgur.com/TBdGFh3.png) 264 | 265 | 找到 addons, addons 的名稱就是資料夾的名稱 266 | 267 | ![alt tag](https://i.imgur.com/HftVAvZ.png) 268 | 269 | 點選 Install 即可。 270 | 271 | ## 如何進入 odoo Database 管理界面 272 | 273 | * [Youtube Tutorial - 如何進入 odoo Database 管理界面](https://youtu.be/JIRcz1WDLT0) 274 | 275 | odoo 的登入頁面, 下方會有個 Manage Database, 276 | 277 | ![alt tag](https://i.imgur.com/bFLtf4N.png) 278 | 279 | 點下去你會看到下圖, 280 | 281 | ![alt tag](https://i.imgur.com/yr7fTG1.png) 282 | 283 | 網址是 [http://0.0.0.0:8069/web/database/manager](http://0.0.0.0:8069/web/database/manager),你也可以直接輸入網址進入, 284 | 285 | 在這邊可以管理 odoo db,包含建立, 刪除, 還原, 備份。 286 | 287 | ![alt tag](https://i.imgur.com/Z4OSyLG.png) 288 | 289 | 有注意到 Set Master Password 嗎 :question: 290 | 291 | (可參考 [Master Password](https://www.pgadmin.org/docs/pgadmin4/development/master_password.html)) 292 | 293 | 他其實是算多一層保護 :relieved: 294 | 295 | 當我們如果設定他之後, 在頁面上做任何操作, 296 | 297 | 都會需要密碼。 298 | 299 | 這個 Set Master Password 也可以在 `odoo.conf` 中設定 300 | 301 | ```conf 302 | [options] 303 | addons_path = /mnt/extra-addons 304 | data_dir = /var/lib/odoo 305 | 306 | admin_passwd = 666666 307 | ; list_db = False 308 | ``` 309 | 310 | (`;` 代表註解) 311 | 312 | 重起後就會生效。 313 | 314 | 舉個例子,如果我要刪除 db,他會要你輸入你的 admin_passwd, 315 | 316 | ![alt tag](https://i.imgur.com/sCSN9f9.png) 317 | 318 | 你可能會問我, 這樣任何 user 都可以進去, 不會很危險嗎 :question: 319 | 320 | (當然危險 :joy:) 321 | 322 | 所以這個頁面可以關閉 (將 `list_db` 設為 `False` ) 323 | 324 | ```conf 325 | [options] 326 | addons_path = /mnt/extra-addons 327 | data_dir = /var/lib/odoo 328 | 329 | admin_passwd = 666666 330 | list_db = False 331 | ``` 332 | 333 | 這樣就無法進去這個頁面了, 334 | 335 | ![alt tag](https://i.imgur.com/ydnI8V8.png) 336 | 337 | 但這樣連 admin 也無法進去這頁面了 :scream: 338 | 339 | 所以比較好的方法是搭配 Nginx 把 url block 掉 :smile: 340 | 341 | ( 設定只有特定 ip 可以訪問頁面 ) 342 | 343 | ## 如何使用 pgadmin4 連接 odoo 344 | 345 | * [Youtube Tutorial - 如何使用 pgadmin4 連接 odoo](https://youtu.be/afuB8wnozo8) 346 | 347 | 如果不知道什麼是 pgadmin4 以及安裝方法, 可參考我之前寫的 348 | 349 | [利用 docker 快速建立 pgadmin4 以及 Ubuntu 本機如何安裝 pgadmin4](https://github.com/twtrubiks/docker-pgadmin4-tutorial) 350 | 351 | 記得把 db 的 port 打開 352 | 353 | ![alt tag](https://i.imgur.com/3jRmI1M.png) 354 | 355 | 輸入連線資訊 ( 如果你使用我的範例, 都會是 odoo ) 356 | 357 | ![alt tag](https://i.imgur.com/vGJRvAS.png) 358 | 359 | 連進去你會看到很多 db , 像我這邊有建立了 odoo 以及 odoo1 360 | 361 | ![alt tag](https://i.imgur.com/ySsgUCG.png) 362 | 363 | 找到 table 364 | 365 | ![alt tag](https://i.imgur.com/f0CHRoG.png) 366 | 367 | 使用 expense 來測試, 修改 name 欄位 368 | 369 | ![alt tag](https://i.imgur.com/0WeUDKH.png) 370 | 371 | 頁面上的資料也跟著改變 372 | 373 | ![alt tag](https://i.imgur.com/jUD4XAM.png) 374 | 375 | ## 如何啟用 odoo 中的 Logging 376 | 377 | [Youtube Tutorial - odoo13 如何啟用 odoo 中的 Logging](https://youtu.be/TwgPfdvuvxQ) 378 | 379 | 官方文件請參考 [odoo logging](https://www.odoo.com/documentation/13.0/reference/cmdline.html#logging) 380 | 381 | 一般來說, logging 都會顯示在 `stdout` (通常就是你的 terminal) 382 | 383 | 注意, 這邊有同時有 web 和 db 的 log, 384 | 385 | ![alt tag](https://i.imgur.com/YlQ68Cz.png) 386 | 387 | 但如果說今天我想要將 Logging 保存, 可能以後想要搭配 ELK 分析該怎麼辦 :question: 388 | 389 | 首先, 到[odoo.conf](https://github.com/twtrubiks/odoo-docker-tutorial/blob/master/config/odoo.conf) 中加入 390 | 391 | ```conf 392 | ...... 393 | 394 | logfile = /var/log/odoo/odoo.log 395 | ; critical, error, warn, debug 396 | log_level = info 397 | ``` 398 | 399 | 為了方便觀看檔案, 這邊 `.yml` 也要稍微修改一下 400 | 401 | ```yml 402 | version: '3.5' 403 | services: 404 | web: 405 | image: odoo:12.0 406 | depends_on: 407 | - db 408 | ports: 409 | - "8069:8069" 410 | volumes: 411 | - odoo-web-data:/var/lib/odoo 412 | - ./config:/etc/odoo 413 | - ./addons:/mnt/extra-addons 414 | - ./odoo-log-data:/var/log/odoo # <----here 415 | ``` 416 | 417 | 將 `/var/log/odoo` 資料夾同步到本機的 `./odoo-log-data`. 418 | 419 | 然後還有一點很重要, 請將你的 `./odoo-log-data` 給於權限 :exclamation: :exclamation: 420 | 421 | 不然你會發現你資料一直寫不進去 :joy: 422 | 423 | 方法也很簡單, 使用以下的指令即可 424 | 425 | ```cmd 426 | sudo chmod -R 777 odoo-log-data 427 | ``` 428 | 429 | 接著重新啟動, 你會發現你的 terminal 只剩下 db 的 log 而已 430 | 431 | ![alt tag](https://i.imgur.com/1nLhjyc.png) 432 | 433 | 然後 odoo 的 log 被存到 `./odoo-log-data` 中 434 | 435 | ![alt tag](https://i.imgur.com/M79Mvtd.png) 436 | 437 | 也可以使用 `tail -f odoo-log-data/odoo.log` 保持追蹤查看. 438 | 439 | ## odoo13 如何安裝需要 python package 的 addons 440 | 441 | [準備中-Youtube Tutorial - odoo13 如何安裝需要 python package 的 addons](https://youtu.be/CwaNdXV_2SY) 442 | 443 | 在 odoo 中, 有超級多的 addons 可以玩, 但我相信大家一定有看過以下這張圖 444 | 445 | ![alt tag](https://i.imgur.com/BdndEXx.png) 446 | 447 | 我使用兩個 addons 來說明(預防)這個問題, 448 | 449 | 狀況一(偶爾). 450 | 451 | 看 [auto_backup](https://apps.odoo.com/apps/modules/13.0/auto_backup/) 這個 addons, 452 | 453 | 在他的 `auto_backup/models/db_backup.py` 中, 你會看到如下的圖, 454 | 455 | ![alt tag](https://i.imgur.com/fbBql23.png) 456 | 457 | 也就是你缺了 `paramiko` 這個 package. 458 | 459 | 這種情況比較難預防, 除非你進去把每個 `.py` 的檔案都檢查過一次(通常都會放在最上面) 460 | 461 | 狀況二(常見). 462 | 463 | 看 [report_xlsx](https://apps.odoo.com/apps/modules/13.0/report_xlsx/) 這個 addons, 464 | 465 | 在他的 `report_xlsx/__manifest__.py` 中, 你會看到如下的圖, 466 | 467 | ![alt tag](https://i.imgur.com/AZnbihy.png) 468 | 469 | 這種是比較常見的狀況, 就是所需要的 python package 都包含在 `external_dependencies`, 470 | 471 | 這樣就比較簡單了, 安裝 addons 前, 只需要檢查 `__manifest__.py` 即可. 472 | 473 | 講完兩種狀況了, 接下來說明如何解決 :smile: 474 | 475 | 其實也很簡單, 就把 python package 裝起來即可, 這邊用 docker 當範例, 如果不是用 docker, 476 | 477 | 直接在環境下 `pip3 install xxx` 即可. 478 | 479 | docker 的方法, 首先, 先確定 docker odoo 已經執行, 然後執行 `docker exec -it xxx bash` 進入容器, 480 | 481 | 再執行 `pip3 install paramiko` 即可. 482 | 483 | ![alt tag](https://i.imgur.com/y9JG4fO.png) 484 | 485 | 最後重新啟動 odoo 安裝 auto_backup 即可. 486 | 487 | 溫馨提醒, 不要用 `docker-compose down` (因為它會重建容器, 這樣你安裝的 package 就消失了), 488 | 489 | 請使用 `docker-compose stop`. 490 | 491 | 如果不懂, 請參考以下 492 | 493 | [docker-compose up/down 和 restart 的差異](https://github.com/twtrubiks/docker-tutorial#docker-compose-updown-%E5%92%8C-restart-%E7%9A%84%E5%B7%AE%E7%95%B0) 494 | 495 | 或直接看影片說明 496 | 497 | [Youtube Tutorial- docker-compose up/down 和 restart 的差異](https://youtu.be/nX-sbLPz-MU) 498 | 499 | 這邊你可能會問我, 如果我想要建立自己的 odoo images 呢 :question: (因為我就是會安裝某些特定 addons) 500 | 501 | 下面就繼續來介紹這部份 :satisfied: 502 | 503 | ## odoo13 - 如何建立屬於自己的 docker odoo image 504 | 505 | [Youtube Tutorial - odoo13 - 如何建立屬於自己的 docker odoo image](https://youtu.be/n8n1nJyw9ZM) 506 | 507 | 所使用的 [docker-odoo](https://github.com/odoo/docker) repo, 508 | 509 | 請看 [Dockerfile](https://github.com/twtrubiks/odoo-docker-tutorial/blob/master/build-odoo-image/Dockerfile), 主要就是要修改這邊, 510 | 511 | ![alt tag](https://i.imgur.com/q4GIfmJ.png) 512 | 513 | ```text 514 | ARG ODOO_RELEASE=20200121 515 | ARG ODOO_SHA=cb0bcb5d239983468c2e3b3f7cf17f58df820b1c 516 | ``` 517 | 518 | 假設今天有一個 bug 在 20200301 才被修正, 可是官方的 docker images 只到1月該怎辦 :question: 519 | 520 | 這時候肯定就是動手自己來 build 了 :laughing: 521 | 522 | 修改 `ODOO_RELEASE=20200301` 然後 `ODOO_SHA` 需要到以下的網站查看 `odoo_13.0.20200301_amd64.changes`, 523 | 524 | [http://nightly.odoo.com/13.0/nightly/deb/](http://nightly.odoo.com/13.0/nightly/deb/) 525 | 526 | ![alt tag](https://i.imgur.com/gDwIQmR.png) 527 | 528 | ```text 529 | ARG ODOO_RELEASE=20200301 530 | ARG ODOO_SHA=c72896852e6a6aa730db366a96d2602d91317bfa 531 | ``` 532 | 533 | 這邊是主要的 odoo images 修改, 如果你希望你的 odoo images 預設就包含某些 python package, 534 | 535 | 你可以自行加入, 舉個例子, 加入 paramiko, 536 | 537 | ![alt tag](https://i.imgur.com/0JGfwCd.png) 538 | 539 | 最後, 請記得給資料夾權限, `sudo chmod -R 777 build-odoo-image`. 540 | 541 | 切換到目錄資料夾底下輸入 build 指令 (這邊要多等一下 :smirk:) 542 | 543 | ```cmd 544 | docker build -t twtrubiks/odoo13:20200301 . 545 | ``` 546 | 547 | build 完之後, 如果一定正常, 輸入 `docker images` 你應該會看到下圖 548 | 549 | ![alt tag](https://i.imgur.com/wSmHpkX.png) 550 | 551 | 接著把你的 `docker-compose.yml` 中的 image 修改成你自己的測試看看, 552 | 553 | 你也可以自己進去 odoo 容器中確認是否有安裝 `paramiko`. 554 | 555 | ## odoo13 - 如何透過 CLI 還原 odoo db 以及 filestore 556 | 557 | [Youtube Tutorial - 如何透過 CLI 還原 odoo db 以及 filestore](https://youtu.be/1ng4_xP2e1c) 558 | 559 | 前面教過大家 [如何進入 odoo Database 管理界面](https://github.com/twtrubiks/odoo-docker-tutorial#%E5%A6%82%E4%BD%95%E9%80%B2%E5%85%A5-odoo-database-%E7%AE%A1%E7%90%86%E7%95%8C%E9%9D%A2), 560 | 561 | 但有時候會需要使用 CLI 的方式還原, 今天就來教大家這部份 :smile: 562 | 563 | 這邊直接使用 docker 示範, 564 | 565 | 首先, 因為會還原 filestore, 所以請將 volumes 中的 `odoo-web-data` 同步到本機中, 566 | 567 | 也會還原 db, 所以請將 volumes 中的 `odoo-db-tmp` 也同步到本機中. 568 | 569 | 建議也給它們權限 `sudo chmod -R 777 odoo-web-data odoo-db-tmp` 570 | 571 | 這邊如果不清楚, 請參考 [Docker 基本教學 - 從無到有 Docker-Beginners-Guide](https://github.com/twtrubiks/docker-tutorial) 572 | 573 | docker yaml 修改如下, 574 | 575 | ```yaml 576 | version: '3.5' 577 | services: 578 | web: 579 | image: odoo:13.0 580 | depends_on: 581 | - db 582 | ports: 583 | - "8069:8069" 584 | volumes: 585 | - ./odoo-web-data:/var/lib/odoo # <<--------------- 586 | - ./config:/etc/odoo 587 | - ./addons:/mnt/extra-addons 588 | - ./odoo-log-data:/var/log/odoo 589 | db: 590 | image: postgres:10.9 591 | ...... 592 | volumes: 593 | - odoo-db-data:/var/lib/postgresql/data/pgdata 594 | - ./odoo-db-tmp:/var/tmp # <<--------------- 595 | 596 | volumes: 597 | #odoo-web-data: # <<--------------- 598 | ``` 599 | 600 | 使用 CLI 的方式還原會需要兩步驟, 601 | 602 | 第一, 還原 db. 603 | 604 | 第二, 還原 filestore (通常圖片都保存在這裡面). 605 | 606 | 假設今天要還原 twtrubiks 這個 db (直接從 odoo manager 中備份下來) 607 | 608 | 打開這個 zip, 你會看到這些東西 609 | 610 | ![alt tag](https://i.imgur.com/kWC83Z7.png) 611 | 612 | 現在先進行第一步, 還原 db, 也就是還原 `dump.sql` 這個檔案, 613 | 614 | 把 `dump.sql` 丟進去 `odoo-db-tmp` 資料夾中, 615 | 616 | 這樣你就可以在 db 容器裡的 `/var/tmp` 地方看到它 617 | 618 | ```cmd 619 | docker exec -it CONTAINER su postgres 620 | ``` 621 | 622 | ![alt tag](https://i.imgur.com/6ift2RR.png) 623 | 624 | 建立 db 625 | 626 | ```cmd 627 | createdb DB_NAME -U odoo -W odoo 628 | ``` 629 | 630 | ![alt tag](https://i.imgur.com/lGQKolS.png) 631 | 632 | 這時候如果你進去 odoo manager, 你會看到他顯示驚嘆號, 因為裡面還沒有資料 633 | 634 | ![alt tag](https://i.imgur.com/baXx38s.png) 635 | 636 | 還原 db 637 | 638 | ```cmd 639 | psql -U odoo -d DB_NAME < dump.sql 640 | ``` 641 | 642 | ![alt tag](https://i.imgur.com/FTqDDld.png) 643 | 644 | 等他順利跑完, 就代表還原完畢. 645 | 646 | `-d` 代表 dbname. 647 | 648 | `-U` 代表 username. 649 | 650 | `-W` 代表 password. 651 | 652 | `-h` 代表 hostname (可以忽略). 653 | 654 | 你會發現驚嘆號消失了 :smile: 655 | 656 | ![alt tag](https://i.imgur.com/YThiNYs.png) 657 | 658 | 雖然順利進去 odoo , 但你會發現圖片都消失了 :expressionless: 659 | 660 | (有可能你在這邊會看到圖片, 這樣就代表那些圖片是保存在 db 中的) 661 | 662 | odoo 可以選擇要保存在 db 中還是 filestore 裡面. 663 | 664 | ![alt tag](https://i.imgur.com/hijXpuT.png) 665 | 666 | 第二步, 還原 filestore (通常圖片都保存在這裡面). 667 | 668 | ![alt tag](https://i.imgur.com/kWC83Z7.png) 669 | 670 | 直接把 zip 內的 filestore 資料夾複製到 `odoo-web-data/filestore` 裡面, 671 | 672 | 然後把 filestore 資料夾的名稱改成 db 的名稱, 673 | 674 | ![alt tag](https://i.imgur.com/vy3MeDS.png) 675 | 676 | 建議給它權限 `sudo chmod -R 777 odoo-web-data`, 重起 odoo. 677 | 678 | ![alt tag](https://i.imgur.com/Uc4isqC.png) 679 | 680 | 這樣就可以順利看到圖片了. 681 | 682 | (如果還是看不到圖片, 請看看前面是不是有步驟漏掉了, 或是權限, 或是網頁快取) 683 | 684 | ![alt tag](https://i.imgur.com/rv3yMUx.png) 685 | 686 | 整個流程稍微比較複雜一點點 :smirk: 687 | 688 | ## odoo - 如何透過 log_level 了解 ORM RAW SQL 689 | 690 | [Youtube Tutorial - 如何透過 log_level 了解 ORM RAW SQL](https://youtu.be/sZWFGf23gWc) 691 | 692 | 有時候, 總會很好奇某個 ORM 他所實際執行的 RAW SQL 到底是甚麼 :question: 693 | 694 | 那在 odoo 中, 我們應該怎麼看這個值呢 :question: 695 | 696 | 請先到 [config/odoo.conf](https://github.com/twtrubiks/odoo-docker-tutorial/blob/master/config/odoo.conf) 中修改 `log_level` 697 | 698 | ```conf 699 | log_level = debug_sql 700 | ``` 701 | 702 | ( `log_level` 有很多選擇, 詳細可參考官方文件 [logging](https://www.odoo.com/documentation/14.0/developer/misc/other/cmdline.html#logging)) 703 | 704 | 接著, 建議不要使用一般執行 odoo 的指令, 因為會跑很久 :disappointed_relieved: 705 | 706 | 請使用 odoo shell, 可參考之前的教學 [shell](https://github.com/twtrubiks/odoo-demo-addons-tutorial#shell) 707 | 708 | [Youtube Tutorial - odoo shell 基本教學 - CRUD](https://youtu.be/kmbiT54hUkw) 709 | 710 | 進入 shell 後, 隨便執行一個 orm 指令, 就可以看到對應的 RAW SQL 了 :smile: 711 | 712 | ![alt tag](https://i.imgur.com/15JCkZx.png) 713 | 714 | 更進一步的, 你可以把這些 sql 拿去任何地方執行, 像是 pgadmin4, 輸出的結果會是一樣的. 715 | 716 | ## 後記 717 | 718 | 這次的 Odoo 介紹是很基礎的帶大家稍微了解一下,還有非常多東西可以講,像是如何撰寫 addons, 719 | 720 | 如何擴充既有的 addons,Odoo 架構,Odoo 如何搭配 Nginx 等等...... 721 | 722 | 幾乎都可以單獨拍一支影片和大家做介紹。 723 | 724 | ## 延伸閱讀 725 | 726 | [如何建立 odoo 開發環境 - odoo13 - 從無到有](https://github.com/twtrubiks/odoo-development-environment-tutorial) 727 | 728 | [手把手教大家撰寫 odoo 的 addons - 進階篇](https://github.com/twtrubiks/odoo-demo-addons-tutorial) 729 | 730 | ## Reference 731 | 732 | * [Odoo](https://www.odoo.com/) 733 | * [odoo docker](https://hub.docker.com/_/odoo) 734 | 735 | ## Donation 736 | 737 | 文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡 :laughing: 738 | 739 | 綠界科技ECPAY ( 不需註冊會員 ) 740 | 741 | ![alt tag](https://payment.ecpay.com.tw/Upload/QRCode/201906/QRCode_672351b8-5ab3-42dd-9c7c-c24c3e6a10a0.png) 742 | 743 | [贊助者付款](http://bit.ly/2F7Jrha) 744 | 745 | 歐付寶 ( 需註冊會員 ) 746 | 747 | ![alt tag](https://i.imgur.com/LRct9xa.png) 748 | 749 | [贊助者付款](https://payment.opay.tw/Broadcaster/Donate/9E47FDEF85ABE383A0F5FC6A218606F8) 750 | 751 | ## 贊助名單 752 | 753 | [贊助名單](https://github.com/twtrubiks/Thank-you-for-donate) 754 | 755 | ## License 756 | 757 | MIT license -------------------------------------------------------------------------------- /addons/manay-addons-folder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/twtrubiks/odoo-docker-tutorial/8fb9e04dab49023ec2aae2e7e6e481f59edae2ad/addons/manay-addons-folder -------------------------------------------------------------------------------- /build-odoo-image/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster-slim 2 | MAINTAINER Odoo S.A. 3 | 4 | # Generate locale C.UTF-8 for postgres and general locale data 5 | ENV LANG C.UTF-8 6 | 7 | # Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf 8 | RUN set -x; \ 9 | apt-get update \ 10 | && apt-get install -y --no-install-recommends \ 11 | ca-certificates \ 12 | curl \ 13 | dirmngr \ 14 | fonts-noto-cjk \ 15 | gnupg \ 16 | libssl-dev \ 17 | node-less \ 18 | npm \ 19 | python3-num2words \ 20 | python3-pip \ 21 | python3-phonenumbers \ 22 | python3-pyldap \ 23 | python3-qrcode \ 24 | python3-renderpm \ 25 | python3-setuptools \ 26 | python3-slugify \ 27 | python3-vobject \ 28 | python3-watchdog \ 29 | python3-xlrd \ 30 | python3-xlwt \ 31 | xz-utils \ 32 | && curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb \ 33 | && echo '7e35a63f9db14f93ec7feeb0fce76b30c08f2057 wkhtmltox.deb' | sha1sum -c - \ 34 | && apt-get install -y --no-install-recommends ./wkhtmltox.deb \ 35 | && rm -rf /var/lib/apt/lists/* wkhtmltox.deb 36 | 37 | # install latest postgresql-client 38 | RUN set -x; \ 39 | echo 'deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main' > /etc/apt/sources.list.d/pgdg.list \ 40 | && export GNUPGHOME="$(mktemp -d)" \ 41 | && repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \ 42 | && gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \ 43 | && gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \ 44 | && gpgconf --kill all \ 45 | && rm -rf "$GNUPGHOME" \ 46 | && apt-get update \ 47 | && apt-get install -y postgresql-client \ 48 | && rm -rf /var/lib/apt/lists/* 49 | 50 | # Install rtlcss (on Debian buster) 51 | RUN set -x; \ 52 | npm install -g rtlcss 53 | 54 | # Install Odoo 55 | ENV ODOO_VERSION 13.0 56 | ARG ODOO_RELEASE=20200301 57 | ARG ODOO_SHA=c72896852e6a6aa730db366a96d2602d91317bfa 58 | RUN set -x; \ 59 | curl -o odoo.deb -sSL http://nightly.odoo.com/${ODOO_VERSION}/nightly/deb/odoo_${ODOO_VERSION}.${ODOO_RELEASE}_all.deb \ 60 | && echo "${ODOO_SHA} odoo.deb" | sha1sum -c - \ 61 | && dpkg --force-depends -i odoo.deb \ 62 | && apt-get update \ 63 | && apt-get -y install -f --no-install-recommends \ 64 | && rm -rf /var/lib/apt/lists/* odoo.deb 65 | 66 | # Copy entrypoint script and Odoo configuration file 67 | RUN pip3 install paramiko 68 | COPY ./entrypoint.sh / 69 | COPY ./odoo.conf /etc/odoo/ 70 | 71 | # Set permissions and Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for users addons 72 | RUN chown odoo /etc/odoo/odoo.conf \ 73 | && mkdir -p /mnt/extra-addons \ 74 | && chown -R odoo /mnt/extra-addons 75 | VOLUME ["/var/lib/odoo", "/mnt/extra-addons"] 76 | 77 | # Expose Odoo services 78 | EXPOSE 8069 8071 79 | 80 | # Set the default config file 81 | ENV ODOO_RC /etc/odoo/odoo.conf 82 | 83 | COPY wait-for-psql.py /usr/local/bin/wait-for-psql.py 84 | 85 | # Set default user when running the container 86 | USER odoo 87 | 88 | ENTRYPOINT ["/entrypoint.sh"] 89 | CMD ["odoo"] -------------------------------------------------------------------------------- /build-odoo-image/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | # set the postgres database host, port, user and password according to the environment 6 | # and pass them as arguments to the odoo process if not present in the config file 7 | : ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}} 8 | : ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}} 9 | : ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}} 10 | : ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}} 11 | 12 | DB_ARGS=() 13 | function check_config() { 14 | param="$1" 15 | value="$2" 16 | if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then 17 | value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g') 18 | fi; 19 | DB_ARGS+=("--${param}") 20 | DB_ARGS+=("${value}") 21 | } 22 | check_config "db_host" "$HOST" 23 | check_config "db_port" "$PORT" 24 | check_config "db_user" "$USER" 25 | check_config "db_password" "$PASSWORD" 26 | 27 | case "$1" in 28 | -- | odoo) 29 | shift 30 | if [[ "$1" == "scaffold" ]] ; then 31 | exec odoo "$@" 32 | else 33 | wait-for-psql.py ${DB_ARGS[@]} --timeout=30 34 | exec odoo "$@" "${DB_ARGS[@]}" 35 | fi 36 | ;; 37 | -*) 38 | wait-for-psql.py ${DB_ARGS[@]} --timeout=30 39 | exec odoo "$@" "${DB_ARGS[@]}" 40 | ;; 41 | *) 42 | exec "$@" 43 | esac 44 | 45 | exit 1 46 | -------------------------------------------------------------------------------- /build-odoo-image/odoo.conf: -------------------------------------------------------------------------------- 1 | [options] 2 | addons_path = /mnt/extra-addons 3 | data_dir = /var/lib/odoo 4 | ; admin_passwd = admin 5 | ; csv_internal_sep = , 6 | ; db_maxconn = 64 7 | ; db_name = False 8 | ; db_template = template1 9 | ; dbfilter = .* 10 | ; debug_mode = False 11 | ; email_from = False 12 | ; limit_memory_hard = 2684354560 13 | ; limit_memory_soft = 2147483648 14 | ; limit_request = 8192 15 | ; limit_time_cpu = 60 16 | ; limit_time_real = 120 17 | ; list_db = True 18 | ; log_db = False 19 | ; log_handler = [':INFO'] 20 | ; log_level = info 21 | ; logfile = None 22 | ; longpolling_port = 8072 23 | ; max_cron_threads = 2 24 | ; osv_memory_age_limit = 1.0 25 | ; osv_memory_count_limit = False 26 | ; smtp_password = False 27 | ; smtp_port = 25 28 | ; smtp_server = localhost 29 | ; smtp_ssl = False 30 | ; smtp_user = False 31 | ; workers = 0 32 | ; xmlrpc = True 33 | ; xmlrpc_interface = 34 | ; xmlrpc_port = 8069 35 | ; xmlrpcs = True 36 | ; xmlrpcs_interface = 37 | ; xmlrpcs_port = 8071 38 | -------------------------------------------------------------------------------- /build-odoo-image/wait-for-psql.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import argparse 3 | import psycopg2 4 | import sys 5 | import time 6 | 7 | 8 | if __name__ == '__main__': 9 | arg_parser = argparse.ArgumentParser() 10 | arg_parser.add_argument('--db_host', required=True) 11 | arg_parser.add_argument('--db_port', required=True) 12 | arg_parser.add_argument('--db_user', required=True) 13 | arg_parser.add_argument('--db_password', required=True) 14 | arg_parser.add_argument('--timeout', type=int, default=5) 15 | 16 | args = arg_parser.parse_args() 17 | 18 | start_time = time.time() 19 | while (time.time() - start_time) < args.timeout: 20 | try: 21 | conn = psycopg2.connect(user=args.db_user, host=args.db_host, port=args.db_port, password=args.db_password, dbname='postgres') 22 | error = '' 23 | break 24 | except psycopg2.OperationalError as e: 25 | error = e 26 | else: 27 | conn.close() 28 | time.sleep(1) 29 | 30 | if error: 31 | print("Database connection failure: %s" % error, file=sys.stderr) 32 | sys.exit(1) 33 | -------------------------------------------------------------------------------- /config/odoo.conf: -------------------------------------------------------------------------------- 1 | [options] 2 | addons_path = /mnt/extra-addons 3 | data_dir = /var/lib/odoo 4 | 5 | ;admin_passwd = 666666 6 | ;list_db = False 7 | 8 | logfile = /var/log/odoo/odoo.log 9 | ; critical, error, warn, debug 10 | ; log_level = info 11 | log_level = debug_sql -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.5' 2 | services: 3 | web: 4 | image: odoo:13.0 5 | depends_on: 6 | - db 7 | ports: 8 | - "8069:8069" 9 | volumes: 10 | - odoo-web-data:/var/lib/odoo 11 | - ./config:/etc/odoo 12 | - ./addons:/mnt/extra-addons 13 | - ./odoo-log-data:/var/log/odoo 14 | # command: 15 | # odoo -r odoo -w odoo -i addons -d odoo 16 | db: 17 | image: postgres:10.9 18 | # ports: 19 | # - "5432:5432" 20 | environment: 21 | - POSTGRES_DB=postgres 22 | - POSTGRES_USER=odoo 23 | - POSTGRES_PASSWORD=odoo 24 | - PGDATA=/var/lib/postgresql/data/pgdata 25 | volumes: 26 | - odoo-db-data:/var/lib/postgresql/data/pgdata 27 | 28 | volumes: 29 | odoo-web-data: 30 | odoo-db-data: -------------------------------------------------------------------------------- /odoo-log-data/odoo.log: -------------------------------------------------------------------------------- 1 | 2020-03-11 01:08:38,749 1 INFO ? odoo.service.server: Initiating shutdown 2 | 2020-03-11 01:08:38,749 1 INFO ? odoo.service.server: Hit CTRL-C again or send a second signal to force the shutdown. 3 | 2020-03-11 01:08:42,387 1 INFO ? odoo: Odoo version 13.0-20200121 4 | 2020-03-11 01:08:42,387 1 INFO ? odoo: Using configuration file at /etc/odoo/odoo.conf 5 | 2020-03-11 01:08:42,387 1 INFO ? odoo: addons paths: ['/usr/lib/python3/dist-packages/odoo/addons', '/var/lib/odoo/addons/13.0', '/mnt/extra-addons'] 6 | 2020-03-11 01:08:42,387 1 INFO ? odoo: database: odoo@db:5432 7 | 2020-03-11 01:08:42,541 1 INFO ? odoo.addons.base.models.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf 8 | 2020-03-11 01:08:42,626 1 INFO ? odoo.service.server: HTTP service (werkzeug) running on e706df9fd0b9:8069 9 | --------------------------------------------------------------------------------