{"id":20619700,"url":"https://github.com/twtrubiks/odoo-docker-tutorial","last_synced_at":"2025-04-15T11:55:12.364Z","repository":{"id":84518973,"uuid":"211486473","full_name":"twtrubiks/odoo-docker-tutorial","owner":"twtrubiks","description":"利用 docker 快速建立 odoo 環境","archived":false,"fork":false,"pushed_at":"2024-03-13T03:18:22.000Z","size":23,"stargazers_count":110,"open_issues_count":1,"forks_count":34,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-15T11:55:08.232Z","etag":null,"topics":["docker","erp","odoo","odoo13","odoo15","postgresql","python3","tutorial"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/twtrubiks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-09-28T10:56:52.000Z","updated_at":"2025-02-10T02:40:56.000Z","dependencies_parsed_at":"2023-03-02T04:30:29.044Z","dependency_job_id":null,"html_url":"https://github.com/twtrubiks/odoo-docker-tutorial","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twtrubiks%2Fodoo-docker-tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twtrubiks%2Fodoo-docker-tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twtrubiks%2Fodoo-docker-tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twtrubiks%2Fodoo-docker-tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/twtrubiks","download_url":"https://codeload.github.com/twtrubiks/odoo-docker-tutorial/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249067775,"owners_count":21207395,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","erp","odoo","odoo13","odoo15","postgresql","python3","tutorial"],"created_at":"2024-11-16T12:12:18.654Z","updated_at":"2025-04-15T11:55:12.345Z","avatar_url":"https://github.com/twtrubiks.png","language":"Dockerfile","readme":"# odoo-docker-tutorial\n\n該分支是使用 odoo12 為範例, 如需要 odoo15 範例, 請參考 [15.0分支](https://github.com/twtrubiks/odoo-docker-tutorial/tree/15.0)\n\n## 目錄\n\n1. [odoo 簡介](https://github.com/twtrubiks/odoo-docker-tutorial#%E7%B0%A1%E4%BB%8B) - [Youtube Tutorial - 透過 docker 快速建立 odoo 環境 - 從無到有](https://youtu.be/uqxzq4Td6aU)\n\n2. [利用 docker 快速建立 odoo 環境](https://github.com/twtrubiks/odoo-docker-tutorial#%E6%95%99%E5%AD%B8) - [Youtube Tutorial - 透過 docker 快速建立 odoo 環境 - 從無到有](https://youtu.be/uqxzq4Td6aU)\n\n3. [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)\n\n4. [如何安裝第三方 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)\n\n5. [如何進入 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)\n\n6. [如何使用 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)\n\n7. [Youtube Tutorial - 忘記 admin 密碼該怎麼辦 odoo13](https://youtu.be/C3PGUApVHzM)\n\n8. [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)\n\n9. [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)\n\n10. [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)\n\n11. [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)\n\n12. [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)\n\n## vscode debug odoo docker\n\n請參考 [vscode_debug_docker_odoo17 分支](https://github.com/twtrubiks/odoo-docker-tutorial/tree/vscode_debug_docker_odoo17)\n\n## 延伸閱讀\n\n[如何建立 odoo 開發環境 - odoo13 - 從無到有](https://github.com/twtrubiks/odoo-development-environment-tutorial)\n\n[手把手教大家撰寫 odoo 的 addons - 進階篇](https://github.com/twtrubiks/odoo-demo-addons-tutorial)\n\n## 簡介\n\n什麼是 Odoo，他可以吃嗎 :question:\n\n[Odoo](https://www.odoo.com/) 是一套 ERP 系統，使用 Python 撰寫。\n\nOdoo 有兩種版本，分別是\n\n免費社群版 [Odoo-Community](https://www.odoo.com/page/community)，和收費企業版 Odoo-Enterprise。\n\nOdoo-Community 以及 Odoo-Enterprise 的功能差異可以看 [HERE](https://www.odoo.com/page/editions)。\n\n至於為什麼要有 Odoo-Enterprise，原因很簡單，就是要養工程師:smile:\n\n如果大家有興趣，可以去官網看一下 Odoo 的文章，有說會這樣做是因為公司差點 GG。\n\nOdoo Community 的 source code 都在 github 上，可以點這裡 [odoo](https://github.com/odoo/odoo)，\n\n其實如果你看他的 branch，你會發現他有很多版本，Odoo8，Odoo9，Odoo10，\n\nOdoo11，最新的 Odoo12，以及快要推出的 Odoo13。\n\n先簡單介紹到這邊就好，讓我們先來看看什麼是 Odoo:satisfied:\n\n## 教學\n\n這邊為了快速建立環境，將使用 docker 來建立，\n\n但是如果你想要開發 addons，我會建議使用 source code 的方式來建立 Odoo，\n\n這部分如果大家有興趣有機會我再拍影片教大家:smirk:\n\n如果你不懂 docker，可參考我之前寫的 [Docker 基本教學 - 從無到有 Docker-Beginners-Guide](https://github.com/twtrubiks/docker-tutorial)。\n\nOdoo 的 docker images 我使用 [odoo docker](https://hub.docker.com/_/odoo)，\n\n先來看 docker-compose.yml\n\n```yml\nversion: '3.5'\nservices:\n  web:\n    image: odoo:12.0\n    depends_on:\n      - db\n    ports:\n      - \"8069:8069\"\n    volumes:\n      - odoo-web-data:/var/lib/odoo\n      - ./config:/etc/odoo\n      - ./addons:/mnt/extra-addons\n    # command:\n    #   odoo -r odoo -w odoo -i addons -d odoo\n  db:\n    image: postgres:10.9\n    # ports:\n    #   - \"5432:5432\"\n    environment:\n      - POSTGRES_DB=postgres\n      - POSTGRES_USER=odoo\n      - POSTGRES_PASSWORD=odoo\n      - PGDATA=/var/lib/postgresql/data/pgdata\n    volumes:\n      - odoo-db-data:/var/lib/postgresql/data/pgdata\n\nvolumes:\n  odoo-web-data:\n  odoo-db-data:\n```\n\n主要有兩個 services，\n\n先來看 web，這個主要就是 Odoo，這邊我們使用 `odoo:12.0`，然後這邊順便提一下，\n\nOdoo 每天都會在 [Odoo Nightly builds](http://nightly.odoo.com) build，\n\n你可以到 [odoo-docker-github](https://github.com/odoo/docker) 這邊去看這個 image 是用幾月幾號的 Odoo Source code build 的，\n\n如果你覺得太舊了，你也可以利用他的 Dockerfile 去 build 更新的 Odoo，這部分一樣有機會再教大家:smirk:\n\nvolumes 中的 `odoo-web-data:/var/lib/odoo` 是儲存 Odoo 中的資料。\n\nvolumes 中的 `./config:/etc/odoo` 則是 Odoo 的 config 設定 ( 等等會說明 )。\n\nvolumes 中的 `./addons:/mnt/extra-addons` 則是 Odoo 的第三方 addons，\n\n我在 [addons](https://github.com/twtrubiks/odoo-docker-tutorial/tree/master/addons) 裡面放了 manay-addons-folder 檔案，代表說這邊就是要放 addons。\n\n( 因為 github 不能傳空的資料夾 :wink:)\n\n這邊我說明一下，其實 Odoo 是由很多 addons 組成的，\n\n可以看這邊 [https://github.com/odoo/odoo/tree/12.0/addons](https://github.com/odoo/odoo/tree/12.0/addons)，\n\n一個資料夾就是一個 addons，當然，既有的 addons 可能無法滿足需求，\n\n這時候就會有客製化以及第三方 addons 的存在，\n\n這時候你可能會問，除了原生的 addons，哪裡有第三方 addons 呢:question:\n\n我提供幾個地方給大家參考，主要有兩個，首先是 [OCA](https://github.com/OCA)，裡面超多 addons，\n\n再來是 [Odoo Apps](https://www.odoo.com/apps/modules)，裡面有免費和付費的。\n\n這篇文章不會和大家說要如何自己撰寫一個 addons，下次有機會會再拍影片:smirk:\n\ncommand 中的 `odoo -r odoo -w odoo -i addons -d odoo`，這段我是註解掉的，\n\n原因是不需要，什麼時候你會需要他 :question:\n\n當你需要透過 command line 安裝或更新 addons 的時候就可以這樣寫，\n\nodoo 中的 command line 說明可參考 [Command-line interface:odoo-bin](https://www.odoo.com/documentation/12.0/reference/cmdline.html)，\n\n( 一般的情況是要使用 odoo-bin，不過在 docker 中使用 odoo 即可 )\n\n回頭再來看 [odoo.conf](https://github.com/twtrubiks/odoo-docker-tutorial/tree/master/config)\n\n```conf\n[options]\naddons_path = /mnt/extra-addons\ndata_dir = /var/lib/odoo\n```\n\n`addons_path` 就是 addons 的位置，通常都會有很多，使用逗號隔開即可。\n\n`data_dir` 保存 odoo 資料夾。\n\n這裡面其實還有超級多的參數設定 ( 暫時跳過 ) :smirk:\n\n再來看 db，\n\nOdoo 是使用 postgres，ports 的部分我是註解掉的，但這樣本機就無法訪問他，\n\n( 為什麼 ports 註解掉本機就無法連接，這邊如果你不太了解，\n\n可參考 [docker-compose ports 和 expose 差異](https://github.com/twtrubiks/docker-tutorial#docker-compose-ports-%E5%92%8C-expose-%E5%B7%AE%E7%95%B0) )\n\n如果你想要用 pgadmin4 之類的軟體連接到 postgres，請將註解取消，這樣你才可以連到資料庫\n\n( pgadmin4 是一套免費的工具，連接 postgres，可參考 [利用 docker 快速建立 pgadmin4](https://github.com/twtrubiks/docker-pgadmin4-tutorial) )\n\n## 執行 odoo\n\n```cmd\ndocker-compose up\n```\n\n然後可以瀏覽 [http://localhost:8069](http://localhost:8069)，\n\n![alt tag](https://i.imgur.com/fpmc67U.png)\n\n你應該會看到下圖，\n\n![alt tag](https://i.imgur.com/6FS6NPw.png)\n\n設定完之後等耐心等候，\n\n![alt tag](https://i.imgur.com/BJFU12e.png)\n\n## odoo12 如何開啟 odoo developer mode\n\n* [Youtube Tutorial - odoo12 如何開啟 odoo developer mode](https://youtu.be/fUtqWQHbt1I)\n\n在 odoo 中, 開啟 developer mode 是很重要的:thumbsup:\n\n他可以幫助你很多事情, 那要如何開啟呢:question:\n\n點選 Settings\n\n![alt tag](https://i.imgur.com/qiTHdhI.png)\n\n你會發現右邊有兩個選項, 分別是,\n\nActivate the developer mode -\u003e 通常我都選這個。\n\nActivate the developer mode (with assets) -\u003e 這個事前端 debug 用的。\n\n![alt tag](https://i.imgur.com/Cs5j6Vj.png)\n\n點選下去之後, 你會發現網址多了 `?debug` 的字,\n\n![alt tag](https://i.imgur.com/jadcuLD.png)\n\n其實你後來會發現, 直接將網址的 web 字串後加上 `?debug` 就可以進入 debug 了。\n\n如果你還是很懶, 也有瀏覽器擴充可以幫忙,\n\n像是 Odoo Debug - Google Chrome 之類的 , Firefox 也有。\n\n## 如何安裝第三方 addons\n\n* [Youtube Tutorial - odoo 如何安裝 addons](https://youtu.be/aN35xlUBKwc)\n\n使用 [Row Number in tree/list view](https://apps.odoo.com/apps/modules/12.0/rowno_in_tree/) 這個 addons 做測試,\n\n請記得選對版本, 這邊選擇 odoo12, 下載後, 請解壓縮\n\n![alt tag](https://i.imgur.com/MQDJZGQ.png)\n\n接著放入 addons 資料夾\n\n![alt tag](https://i.imgur.com/bN0J7Ho.png)\n\n我會建議這兩步驟也要操作,\n\n將 addons 資料夾給最大權限 ( Linux 用戶 )\n\n```cmd\nsudo chmod -R 777 addons\n```\n\n如果對 Linux 指令不熟 , 可參考 [紀錄一些 linux 的指令📝](https://github.com/twtrubiks/linux-note)\n\n![alt tag](https://i.imgur.com/9pGcFjy.png)\n\n然後重起 server ( 這步驟很重要, 有時候沒重起真的會遇到很怪的問題:joy: )\n\n![alt tag](https://i.imgur.com/glw83qW.png)\n\n記得開 debug, 點選 Update Apps List\n\n![alt tag](https://i.imgur.com/TBdGFh3.png)\n\n找到 addons, addons 的名稱就是資料夾的名稱\n\n![alt tag](https://i.imgur.com/HftVAvZ.png)\n\n點選 Install 即可。\n\n## 如何進入 odoo Database 管理界面\n\n* [Youtube Tutorial - 如何進入 odoo Database 管理界面](https://youtu.be/JIRcz1WDLT0)\n\nodoo 的登入頁面, 下方會有個 Manage Database，\n\n![alt tag](https://i.imgur.com/bFLtf4N.png)\n\n點下去你會看到下圖，\n\n![alt tag](https://i.imgur.com/yr7fTG1.png)\n\n網址是 [http://0.0.0.0:8069/web/database/manager](http://0.0.0.0:8069/web/database/manager)，你也可以直接輸入網址進入，\n\n在這邊可以管理 odoo db，包含建立, 刪除, 還原, 備份。\n\n![alt tag](https://i.imgur.com/Z4OSyLG.png)\n\n有注意到 Set Master Password 嗎:question:\n\n(可參考 [Master Password](https://www.pgadmin.org/docs/pgadmin4/development/master_password.html))\n\n他其實是算多一層保護:relieved:\n\n當我們如果設定他之後， 在頁面上做任何操作，\n\n都會需要密碼。\n\n這個 Set Master Password 也可以在 `odoo.conf` 中設定\n\n```conf\n[options]\naddons_path = /mnt/extra-addons\ndata_dir = /var/lib/odoo\n\nadmin_passwd = 666666\n; list_db = False\n```\n\n(`;` 代表註解)\n\n重起後就會生效。\n\n舉個例子，如果我要刪除 db，他會要你輸入你的 admin_passwd，\n\n![alt tag](https://i.imgur.com/sCSN9f9.png)\n\n你可能會問我, 這樣任何 user 都可以進去, 不會很危險嗎:question:\n\n（當然危險:joy:）\n\n所以這個頁面可以關閉 (將 `list_db` 設為 `False` )\n\n```conf\n[options]\naddons_path = /mnt/extra-addons\ndata_dir = /var/lib/odoo\n\nadmin_passwd = 666666\nlist_db = False\n```\n\n這樣就無法進去這個頁面了，\n\n![alt tag](https://i.imgur.com/ydnI8V8.png)\n\n但這樣連 admin 也無法進去這頁面了:scream:\n\n所以比較好的方法是搭配 Nginx 把 url block 掉:smile:\n\n( 設定只有特定 ip 可以訪問頁面 )\n\n## 如何使用 pgadmin4 連接 odoo\n\n* [Youtube Tutorial - 如何使用 pgadmin4 連接 odoo](https://youtu.be/afuB8wnozo8)\n\n如果不知道什麼是 pgadmin4 以及安裝方法, 可參考我之前寫的\n\n[利用 docker 快速建立 pgadmin4 以及 Ubuntu 本機如何安裝 pgadmin4](https://github.com/twtrubiks/docker-pgadmin4-tutorial)\n\n記得把 db 的 port 打開\n\n![alt tag](https://i.imgur.com/3jRmI1M.png)\n\n輸入連線資訊 ( 如果你使用我的範例, 都會是 odoo )\n\n![alt tag](https://i.imgur.com/vGJRvAS.png)\n\n連進去你會看到很多 db , 像我這邊有建立了 odoo 以及 odoo1\n\n![alt tag](https://i.imgur.com/ySsgUCG.png)\n\n找到 table\n\n![alt tag](https://i.imgur.com/f0CHRoG.png)\n\n使用 expense 來測試, 修改 name 欄位\n\n![alt tag](https://i.imgur.com/0WeUDKH.png)\n\n頁面上的資料也跟著改變\n\n![alt tag](https://i.imgur.com/jUD4XAM.png)\n\n## 如何啟用 odoo 中的 Logging\n\n[Youtube Tutorial - odoo13 如何啟用 odoo 中的 Logging](https://youtu.be/TwgPfdvuvxQ)\n\n官方文件請參考 [odoo logging](https://www.odoo.com/documentation/13.0/reference/cmdline.html#logging)\n\n一般來說, logging 都會顯示在 `stdout` (通常就是你的 terminal)\n\n注意, 這邊有同時有 web 和 db 的 log,\n\n![alt tag](https://i.imgur.com/YlQ68Cz.png)\n\n但如果說今天我想要將 Logging 保存, 可能以後想要搭配 ELK 分析該怎麼辦:question:\n\n首先, 到[odoo.conf](https://github.com/twtrubiks/odoo-docker-tutorial/blob/master/config/odoo.conf) 中加入\n\n```conf\n......\n\nlogfile = /var/log/odoo/odoo.log\n; critical, error, warn, debug\nlog_level = info\n```\n\n為了方便觀看檔案, 這邊 `.yml` 也要稍微修改一下\n\n```yml\nversion: '3.5'\nservices:\n  web:\n    image: odoo:12.0\n    depends_on:\n      - db\n    ports:\n      - \"8069:8069\"\n    volumes:\n      - odoo-web-data:/var/lib/odoo\n      - ./config:/etc/odoo\n      - ./addons:/mnt/extra-addons\n      - ./odoo-log-data:/var/log/odoo # \u003c----here\n```\n\n將 `/var/log/odoo` 資料夾同步到本機的 `./odoo-log-data`.\n\n然後還有一點很重要, 請將你的 `./odoo-log-data` 給於權限 :exclamation::exclamation:\n\n不然你會發現你資料一直寫不進去:joy:\n\n方法也很簡單, 使用以下的指令即可\n\n```cmd\nsudo chmod -R 777 odoo-log-data\n```\n\n接著重新啟動, 你會發現你的 terminal 只剩下 db 的 log 而已\n\n![alt tag](https://i.imgur.com/1nLhjyc.png)\n\n然後 odoo 的 log 被存到 `./odoo-log-data` 中\n\n![alt tag](https://i.imgur.com/M79Mvtd.png)\n\n也可以使用 `tail -f odoo-log-data/odoo.log` 保持追蹤查看.\n\n## odoo13 如何安裝需要 python package 的 addons\n\n[準備中-Youtube Tutorial - odoo13 如何安裝需要 python package 的 addons](https://youtu.be/CwaNdXV_2SY)\n\n在 odoo 中, 有超級多的 addons 可以玩, 但我相信大家一定有看過以下這張圖\n\n![alt tag](https://i.imgur.com/BdndEXx.png)\n\n我使用兩個 addons 來說明(預防)這個問題,\n\n狀況一(偶爾).\n\n看 [auto_backup](https://apps.odoo.com/apps/modules/13.0/auto_backup/) 這個 addons,\n\n在他的 `auto_backup/models/db_backup.py` 中, 你會看到如下的圖,\n\n![alt tag](https://i.imgur.com/fbBql23.png)\n\n也就是你缺了 `paramiko` 這個 package.\n\n這種情況比較難預防, 除非你進去把每個 `.py` 的檔案都檢查過一次(通常都會放在最上面)\n\n狀況二(常見).\n\n看 [report_xlsx](https://apps.odoo.com/apps/modules/13.0/report_xlsx/) 這個 addons,\n\n在他的 `report_xlsx/__manifest__.py` 中, 你會看到如下的圖,\n\n![alt tag](https://i.imgur.com/AZnbihy.png)\n\n這種是比較常見的狀況, 就是所需要的 python package 都包含在 `external_dependencies`,\n\n這樣就比較簡單了, 安裝 addons 前, 只需要檢查 `__manifest__.py` 即可.\n\n講完兩種狀況了, 接下來說明如何解決:smile:\n\n其實也很簡單, 就把 python package 裝起來即可, 這邊用 docker 當範例, 如果不是用 docker,\n\n直接在環境下 `pip3 install xxx` 即可.\n\ndocker 的方法, 首先, 先確定 docker odoo 已經執行, 然後執行 `docker exec -it xxx bash` 進入容器,\n\n再執行 `pip3 install paramiko` 即可.\n\n![alt tag](https://i.imgur.com/y9JG4fO.png)\n\n最後重新啟動 odoo 安裝 auto_backup 即可.\n\n溫馨提醒, 不要用 `docker-compose down` (因為它會重建容器, 這樣你安裝的 package 就消失了),\n\n請使用 `docker-compose stop`.\n\n如果不懂, 請參考以下\n\n[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)\n\n或直接看影片說明\n\n[Youtube Tutorial- docker-compose up/down 和 restart 的差異](https://youtu.be/nX-sbLPz-MU)\n\n這邊你可能會問我, 如果我想要建立自己的 odoo images 呢:question: (因為我就是會安裝某些特定 addons)\n\n下面就繼續來介紹這部份:satisfied:\n\n## odoo13 - 如何建立屬於自己的 docker odoo image\n\n[Youtube Tutorial - odoo13 - 如何建立屬於自己的 docker odoo image](https://youtu.be/n8n1nJyw9ZM)\n\n所使用的 [docker-odoo](https://github.com/odoo/docker) repo,\n\n請看 [Dockerfile](https://github.com/twtrubiks/odoo-docker-tutorial/blob/master/build-odoo-image/Dockerfile), 主要就是要修改這邊,\n\n![alt tag](https://i.imgur.com/q4GIfmJ.png)\n\n```text\nARG ODOO_RELEASE=20200121\nARG ODOO_SHA=cb0bcb5d239983468c2e3b3f7cf17f58df820b1c\n```\n\n假設今天有一個 bug 在 20200301 才被修正, 可是官方的 docker images 只到1月該怎辦:question:\n\n這時候肯定就是動手自己來 build 了:laughing:\n\n修改 `ODOO_RELEASE=20200301` 然後 `ODOO_SHA` 需要到以下的網站查看 `odoo_13.0.20200301_amd64.changes`,\n\n[http://nightly.odoo.com/13.0/nightly/deb/](http://nightly.odoo.com/13.0/nightly/deb/)\n\n![alt tag](https://i.imgur.com/gDwIQmR.png)\n\n```text\nARG ODOO_RELEASE=20200301\nARG ODOO_SHA=c72896852e6a6aa730db366a96d2602d91317bfa\n```\n\n這邊是主要的 odoo images 修改, 如果你希望你的 odoo images 預設就包含某些 python package,\n\n你可以自行加入, 舉個例子, 加入 paramiko,\n\n![alt tag](https://i.imgur.com/0JGfwCd.png)\n\n最後, 請記得給資料夾權限, `sudo chmod -R 777 build-odoo-image`.\n\n切換到目錄資料夾底下輸入 build 指令 (這邊要多等一下:smirk:)\n\n```cmd\ndocker build -t twtrubiks/odoo13:20200301 .\n```\n\nbuild 完之後, 如果一定正常, 輸入 `docker images` 你應該會看到下圖\n\n![alt tag](https://i.imgur.com/wSmHpkX.png)\n\n接著把你的 `docker-compose.yml` 中的 image 修改成你自己的測試看看,\n\n你也可以自己進去 odoo 容器中確認是否有安裝 `paramiko`.\n\n## odoo13 - 如何透過 CLI 還原 odoo db 以及 filestore\n\n[Youtube Tutorial - 如何透過 CLI 還原 odoo db 以及 filestore](https://youtu.be/1ng4_xP2e1c)\n\n前面教過大家 [如何進入 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),\n\n但有時候會需要使用 CLI 的方式還原, 今天就來教大家這部份:smile:\n\n這邊直接使用 docker 示範,\n\n首先, 因為會還原 filestore, 所以請將 volumes 中的 `odoo-web-data` 同步到本機中,\n\n也會還原 db, 所以請將 volumes 中的 `odoo-db-tmp` 也同步到本機中.\n\n建議也給它們權限 `sudo chmod -R 777 odoo-web-data odoo-db-tmp`\n\n這邊如果不清楚, 請參考 [Docker 基本教學 - 從無到有 Docker-Beginners-Guide](https://github.com/twtrubiks/docker-tutorial)\n\ndocker yaml 修改如下,\n\n```yaml\nversion: '3.5'\nservices:\n  web:\n    image: odoo:13.0\n    depends_on:\n      - db\n    ports:\n      - \"8069:8069\"\n    volumes:\n      - ./odoo-web-data:/var/lib/odoo   # \u003c\u003c---------------\n      - ./config:/etc/odoo\n      - ./addons:/mnt/extra-addons\n      - ./odoo-log-data:/var/log/odoo\n  db:\n    image: postgres:10.9\n    ......\n    volumes:\n      - odoo-db-data:/var/lib/postgresql/data/pgdata\n      - ./odoo-db-tmp:/var/tmp # \u003c\u003c---------------\n\nvolumes:\n  #odoo-web-data:   # \u003c\u003c---------------\n```\n\n使用 CLI 的方式還原會需要兩步驟,\n\n第一, 還原 db.\n\n第二, 還原 filestore (通常圖片都保存在這裡面).\n\n假設今天要還原 twtrubiks 這個 db (直接從 odoo manager 中備份下來)\n\n打開這個 zip, 你會看到這些東西\n\n![alt tag](https://i.imgur.com/kWC83Z7.png)\n\n現在先進行第一步, 還原 db, 也就是還原 `dump.sql` 這個檔案,\n\n把 `dump.sql` 丟進去 `odoo-db-tmp` 資料夾中,\n\n這樣你就可以在 db 容器裡的 `/var/tmp` 地方看到它\n\n```cmd\ndocker exec -it CONTAINER su postgres\n```\n\n![alt tag](https://i.imgur.com/6ift2RR.png)\n\n建立 db\n\n```cmd\ncreatedb DB_NAME -U odoo -W odoo\n```\n\n![alt tag](https://i.imgur.com/lGQKolS.png)\n\n這時候如果你進去 odoo manager, 你會看到他顯示驚嘆號, 因為裡面還沒有資料\n\n![alt tag](https://i.imgur.com/baXx38s.png)\n\n還原 db\n\n```cmd\npsql -U odoo -d DB_NAME \u003c dump.sql\n```\n\n![alt tag](https://i.imgur.com/FTqDDld.png)\n\n等他順利跑完, 就代表還原完畢.\n\n`-d` 代表 dbname.\n\n`-U` 代表 username.\n\n`-W` 代表 password.\n\n`-h` 代表 hostname (可以忽略).\n\n你會發現驚嘆號消失了:smile:\n\n![alt tag](https://i.imgur.com/YThiNYs.png)\n\n雖然順利進去 odoo , 但你會發現圖片都消失了:expressionless:\n\n(有可能你在這邊會看到圖片, 這樣就代表那些圖片是保存在 db 中的)\n\nodoo 可以選擇要保存在 db 中還是 filestore 裡面.\n\n![alt tag](https://i.imgur.com/hijXpuT.png)\n\n第二步, 還原 filestore (通常圖片都保存在這裡面).\n\n![alt tag](https://i.imgur.com/kWC83Z7.png)\n\n直接把 zip 內的 filestore 資料夾複製到 `odoo-web-data/filestore` 裡面,\n\n然後把 filestore 資料夾的名稱改成 db 的名稱,\n\n![alt tag](https://i.imgur.com/vy3MeDS.png)\n\n建議給它權限 `sudo chmod -R 777 odoo-web-data`, 重起 odoo.\n\n![alt tag](https://i.imgur.com/Uc4isqC.png)\n\n這樣就可以順利看到圖片了.\n\n(如果還是看不到圖片, 請看看前面是不是有步驟漏掉了, 或是權限, 或是網頁快取)\n\n![alt tag](https://i.imgur.com/rv3yMUx.png)\n\n整個流程稍微比較複雜一點點:smirk:\n\n## odoo - 如何透過 log_level 了解 ORM RAW SQL\n\n[Youtube Tutorial - 如何透過 log_level 了解 ORM RAW SQL](https://youtu.be/sZWFGf23gWc)\n\n有時候, 總會很好奇某個 ORM 他所實際執行的 RAW SQL 到底是甚麼:question:\n\n那在 odoo 中, 我們應該怎麼看這個值呢:question:\n\n請先到 [config/odoo.conf](https://github.com/twtrubiks/odoo-docker-tutorial/blob/master/config/odoo.conf) 中修改 `log_level`\n\n```conf\nlog_level = debug_sql\n```\n\n( `log_level` 有很多選擇, 詳細可參考官方文件 [logging](https://www.odoo.com/documentation/14.0/developer/misc/other/cmdline.html#logging))\n\n接著, 建議不要使用一般執行 odoo 的指令, 因為會跑很久:disappointed_relieved:\n\n請使用 odoo shell, 可參考之前的教學 [shell](https://github.com/twtrubiks/odoo-demo-addons-tutorial#shell)\n\n[Youtube Tutorial - odoo shell 基本教學 - CRUD](https://youtu.be/kmbiT54hUkw)\n\n進入 shell 後, 隨便執行一個 orm 指令, 就可以看到對應的 RAW SQL 了:smile:\n\n![alt tag](https://i.imgur.com/15JCkZx.png)\n\n更進一步的, 你可以把這些 sql 拿去任何地方執行, 像是 pgadmin4, 輸出的結果會是一樣的.\n\n## 後記\n\n這次的 Odoo 介紹是很基礎的帶大家稍微了解一下，還有非常多東西可以講，像是如何撰寫 addons，\n\n如何擴充既有的 addons，Odoo 架構，Odoo 如何搭配 Nginx 等等......\n\n幾乎都可以單獨拍一支影片和大家做介紹。\n\n## 延伸閱讀\n\n[如何建立 odoo 開發環境 - odoo13 - 從無到有](https://github.com/twtrubiks/odoo-development-environment-tutorial)\n\n[手把手教大家撰寫 odoo 的 addons - 進階篇](https://github.com/twtrubiks/odoo-demo-addons-tutorial)\n\n## Reference\n\n* [Odoo](https://www.odoo.com/)\n* [odoo docker](https://hub.docker.com/_/odoo)\n\n## Donation\n\n文章都是我自己研究內化後原創，如果有幫助到您，也想鼓勵我的話，歡迎請我喝一杯咖啡:laughing:\n\n綠界科技ECPAY ( 不需註冊會員 )\n\n![alt tag](https://payment.ecpay.com.tw/Upload/QRCode/201906/QRCode_672351b8-5ab3-42dd-9c7c-c24c3e6a10a0.png)\n\n[贊助者付款](http://bit.ly/2F7Jrha)\n\n歐付寶 ( 需註冊會員 )\n\n![alt tag](https://i.imgur.com/LRct9xa.png)\n\n[贊助者付款](https://payment.opay.tw/Broadcaster/Donate/9E47FDEF85ABE383A0F5FC6A218606F8)\n\n## 贊助名單\n\n[贊助名單](https://github.com/twtrubiks/Thank-you-for-donate)\n\n## License\n\nMIT license","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwtrubiks%2Fodoo-docker-tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwtrubiks%2Fodoo-docker-tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwtrubiks%2Fodoo-docker-tutorial/lists"}