Skip to content

twtrubiks/odoo-docker-tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

odoo-docker-tutorial

該分支是使用 odoo12 為範例, 如需要 odoo15 範例, 請參考 15.0分支

目錄

  1. odoo 簡介 - Youtube Tutorial - 透過 docker 快速建立 odoo 環境 - 從無到有

  2. 利用 docker 快速建立 odoo 環境 - Youtube Tutorial - 透過 docker 快速建立 odoo 環境 - 從無到有

  3. odoo12 如何開啟 odoo developer mode - Youtube Tutorial - odoo12 如何開啟 odoo developer mode

  4. 如何安裝第三方 addons - Youtube Tutorial - odoo 如何安裝 addons

  5. 如何進入 odoo Database 管理界面 - Youtube Tutorial - 如何進入 odoo Database 管理界面

  6. 如何使用 pgadmin4 連接 odoo - Youtube Tutorial - 如何使用 pgadmin4 連接 odoo

  7. Youtube Tutorial - 忘記 admin 密碼該怎麼辦 odoo13

  8. odoo13 如何啟用 odoo 中的 Logging - Youtube Tutorial - odoo13 如何啟用 odoo 中的 Logging

  9. odoo13 如何安裝需要 python package 的 addons - Youtube Tutorial - odoo13 如何安裝需要 python package 的 addons

  10. odoo13 - 如何建立屬於自己的 docker odoo image - Youtube Tutorial - odoo13 - 如何建立屬於自己的 docker odoo image

  11. odoo13 - 如何透過 CLI 還原 odoo db 以及 filestore - Youtube Tutorial - 如何透過 CLI 還原 odoo db 以及 filestore

  12. odoo - 如何透過 log_level 了解 ORM RAW SQL - Youtube Tutorial - 如何透過 log_level 了解 ORM RAW SQL

vscode debug odoo docker

請參考 vscode_debug_docker_odoo17 分支

延伸閱讀

如何建立 odoo 開發環境 - odoo13 - 從無到有

手把手教大家撰寫 odoo 的 addons - 進階篇

簡介

什麼是 Odoo,他可以吃嗎 ❓

Odoo 是一套 ERP 系統,使用 Python 撰寫。

Odoo 有兩種版本,分別是

免費社群版 Odoo-Community,和收費企業版 Odoo-Enterprise。

Odoo-Community 以及 Odoo-Enterprise 的功能差異可以看 HERE

至於為什麼要有 Odoo-Enterprise,原因很簡單,就是要養工程師:smile:

如果大家有興趣,可以去官網看一下 Odoo 的文章,有說會這樣做是因為公司差點 GG。

Odoo Community 的 source code 都在 github 上,可以點這裡 odoo

其實如果你看他的 branch,你會發現他有很多版本,Odoo8,Odoo9,Odoo10,

Odoo11,最新的 Odoo12,以及快要推出的 Odoo13。

先簡單介紹到這邊就好,讓我們先來看看什麼是 Odoo:satisfied:

教學

這邊為了快速建立環境,將使用 docker 來建立,

但是如果你想要開發 addons,我會建議使用 source code 的方式來建立 Odoo,

這部分如果大家有興趣有機會我再拍影片教大家:smirk:

如果你不懂 docker,可參考我之前寫的 Docker 基本教學 - 從無到有 Docker-Beginners-Guide

Odoo 的 docker images 我使用 odoo docker

先來看 docker-compose.yml

version: '3.5'
services:
  web:
    image: odoo:12.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      - odoo-web-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
    # command:
    #   odoo -r odoo -w odoo -i addons -d odoo
  db:
    image: postgres:10.9
    # ports:
    #   - "5432:5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - odoo-db-data:/var/lib/postgresql/data/pgdata

volumes:
  odoo-web-data:
  odoo-db-data:

主要有兩個 services,

先來看 web,這個主要就是 Odoo,這邊我們使用 odoo:12.0,然後這邊順便提一下,

Odoo 每天都會在 Odoo Nightly builds build,

你可以到 odoo-docker-github 這邊去看這個 image 是用幾月幾號的 Odoo Source code build 的,

如果你覺得太舊了,你也可以利用他的 Dockerfile 去 build 更新的 Odoo,這部分一樣有機會再教大家:smirk:

volumes 中的 odoo-web-data:/var/lib/odoo 是儲存 Odoo 中的資料。

volumes 中的 ./config:/etc/odoo 則是 Odoo 的 config 設定 ( 等等會說明 )。

volumes 中的 ./addons:/mnt/extra-addons 則是 Odoo 的第三方 addons,

我在 addons 裡面放了 manay-addons-folder 檔案,代表說這邊就是要放 addons。

( 因為 github 不能傳空的資料夾 😉)

這邊我說明一下,其實 Odoo 是由很多 addons 組成的,

可以看這邊 https://github.com/odoo/odoo/tree/12.0/addons

一個資料夾就是一個 addons,當然,既有的 addons 可能無法滿足需求,

這時候就會有客製化以及第三方 addons 的存在,

這時候你可能會問,除了原生的 addons,哪裡有第三方 addons 呢:question:

我提供幾個地方給大家參考,主要有兩個,首先是 OCA,裡面超多 addons,

再來是 Odoo Apps,裡面有免費和付費的。

這篇文章不會和大家說要如何自己撰寫一個 addons,下次有機會會再拍影片:smirk:

command 中的 odoo -r odoo -w odoo -i addons -d odoo,這段我是註解掉的,

原因是不需要,什麼時候你會需要他 ❓

當你需要透過 command line 安裝或更新 addons 的時候就可以這樣寫,

odoo 中的 command line 說明可參考 Command-line interface:odoo-bin

( 一般的情況是要使用 odoo-bin,不過在 docker 中使用 odoo 即可 )

回頭再來看 odoo.conf

[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo

addons_path 就是 addons 的位置,通常都會有很多,使用逗號隔開即可。

data_dir 保存 odoo 資料夾。

這裡面其實還有超級多的參數設定 ( 暫時跳過 ) 😏

再來看 db,

Odoo 是使用 postgres,ports 的部分我是註解掉的,但這樣本機就無法訪問他,

( 為什麼 ports 註解掉本機就無法連接,這邊如果你不太了解,

可參考 docker-compose ports 和 expose 差異 )

如果你想要用 pgadmin4 之類的軟體連接到 postgres,請將註解取消,這樣你才可以連到資料庫

( pgadmin4 是一套免費的工具,連接 postgres,可參考 利用 docker 快速建立 pgadmin4 )

執行 odoo

docker-compose up

然後可以瀏覽 http://localhost:8069

alt tag

你應該會看到下圖,

alt tag

設定完之後等耐心等候,

alt tag

odoo12 如何開啟 odoo developer mode

在 odoo 中, 開啟 developer mode 是很重要的:thumbsup:

他可以幫助你很多事情, 那要如何開啟呢:question:

點選 Settings

alt tag

你會發現右邊有兩個選項, 分別是,

Activate the developer mode -> 通常我都選這個。

Activate the developer mode (with assets) -> 這個事前端 debug 用的。

alt tag

點選下去之後, 你會發現網址多了 ?debug 的字,

alt tag

其實你後來會發現, 直接將網址的 web 字串後加上 ?debug 就可以進入 debug 了。

如果你還是很懶, 也有瀏覽器擴充可以幫忙,

像是 Odoo Debug - Google Chrome 之類的 , Firefox 也有。

如何安裝第三方 addons

使用 Row Number in tree/list view 這個 addons 做測試,

請記得選對版本, 這邊選擇 odoo12, 下載後, 請解壓縮

alt tag

接著放入 addons 資料夾

alt tag

我會建議這兩步驟也要操作,

將 addons 資料夾給最大權限 ( Linux 用戶 )

sudo chmod -R 777 addons

如果對 Linux 指令不熟 , 可參考 紀錄一些 linux 的指令📝

alt tag

然後重起 server ( 這步驟很重要, 有時候沒重起真的會遇到很怪的問題:joy: )

alt tag

記得開 debug, 點選 Update Apps List

alt tag

找到 addons, addons 的名稱就是資料夾的名稱

alt tag

點選 Install 即可。

如何進入 odoo Database 管理界面

odoo 的登入頁面, 下方會有個 Manage Database,

alt tag

點下去你會看到下圖,

alt tag

網址是 http://0.0.0.0:8069/web/database/manager,你也可以直接輸入網址進入,

在這邊可以管理 odoo db,包含建立, 刪除, 還原, 備份。

alt tag

有注意到 Set Master Password 嗎:question:

(可參考 Master Password)

他其實是算多一層保護:relieved:

當我們如果設定他之後, 在頁面上做任何操作,

都會需要密碼。

這個 Set Master Password 也可以在 odoo.conf 中設定

[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo

admin_passwd = 666666
; list_db = False

(; 代表註解)

重起後就會生效。

舉個例子,如果我要刪除 db,他會要你輸入你的 admin_passwd,

alt tag

你可能會問我, 這樣任何 user 都可以進去, 不會很危險嗎:question:

(當然危險:joy:)

所以這個頁面可以關閉 (將 list_db 設為 False )

[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo

admin_passwd = 666666
list_db = False

這樣就無法進去這個頁面了,

alt tag

但這樣連 admin 也無法進去這頁面了:scream:

所以比較好的方法是搭配 Nginx 把 url block 掉:smile:

( 設定只有特定 ip 可以訪問頁面 )

如何使用 pgadmin4 連接 odoo

如果不知道什麼是 pgadmin4 以及安裝方法, 可參考我之前寫的

利用 docker 快速建立 pgadmin4 以及 Ubuntu 本機如何安裝 pgadmin4

記得把 db 的 port 打開

alt tag

輸入連線資訊 ( 如果你使用我的範例, 都會是 odoo )

alt tag

連進去你會看到很多 db , 像我這邊有建立了 odoo 以及 odoo1

alt tag

找到 table

alt tag

使用 expense 來測試, 修改 name 欄位

alt tag

頁面上的資料也跟著改變

alt tag

如何啟用 odoo 中的 Logging

Youtube Tutorial - odoo13 如何啟用 odoo 中的 Logging

官方文件請參考 odoo logging

一般來說, logging 都會顯示在 stdout (通常就是你的 terminal)

注意, 這邊有同時有 web 和 db 的 log,

alt tag

但如果說今天我想要將 Logging 保存, 可能以後想要搭配 ELK 分析該怎麼辦:question:

首先, 到odoo.conf 中加入

......

logfile = /var/log/odoo/odoo.log
; critical, error, warn, debug
log_level = info

為了方便觀看檔案, 這邊 .yml 也要稍微修改一下

version: '3.5'
services:
  web:
    image: odoo:12.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      - odoo-web-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
      - ./odoo-log-data:/var/log/odoo # <----here

/var/log/odoo 資料夾同步到本機的 ./odoo-log-data.

然後還有一點很重要, 請將你的 ./odoo-log-data 給於權限 ❗❗

不然你會發現你資料一直寫不進去:joy:

方法也很簡單, 使用以下的指令即可

sudo chmod -R 777 odoo-log-data

接著重新啟動, 你會發現你的 terminal 只剩下 db 的 log 而已

alt tag

然後 odoo 的 log 被存到 ./odoo-log-data

alt tag

也可以使用 tail -f odoo-log-data/odoo.log 保持追蹤查看.

odoo13 如何安裝需要 python package 的 addons

準備中-Youtube Tutorial - odoo13 如何安裝需要 python package 的 addons

在 odoo 中, 有超級多的 addons 可以玩, 但我相信大家一定有看過以下這張圖

alt tag

我使用兩個 addons 來說明(預防)這個問題,

狀況一(偶爾).

auto_backup 這個 addons,

在他的 auto_backup/models/db_backup.py 中, 你會看到如下的圖,

alt tag

也就是你缺了 paramiko 這個 package.

這種情況比較難預防, 除非你進去把每個 .py 的檔案都檢查過一次(通常都會放在最上面)

狀況二(常見).

report_xlsx 這個 addons,

在他的 report_xlsx/__manifest__.py 中, 你會看到如下的圖,

alt tag

這種是比較常見的狀況, 就是所需要的 python package 都包含在 external_dependencies,

這樣就比較簡單了, 安裝 addons 前, 只需要檢查 __manifest__.py 即可.

講完兩種狀況了, 接下來說明如何解決:smile:

其實也很簡單, 就把 python package 裝起來即可, 這邊用 docker 當範例, 如果不是用 docker,

直接在環境下 pip3 install xxx 即可.

docker 的方法, 首先, 先確定 docker odoo 已經執行, 然後執行 docker exec -it xxx bash 進入容器,

再執行 pip3 install paramiko 即可.

alt tag

最後重新啟動 odoo 安裝 auto_backup 即可.

溫馨提醒, 不要用 docker-compose down (因為它會重建容器, 這樣你安裝的 package 就消失了),

請使用 docker-compose stop.

如果不懂, 請參考以下

docker-compose up/down 和 restart 的差異

或直接看影片說明

Youtube Tutorial- docker-compose up/down 和 restart 的差異

這邊你可能會問我, 如果我想要建立自己的 odoo images 呢:question: (因為我就是會安裝某些特定 addons)

下面就繼續來介紹這部份:satisfied:

odoo13 - 如何建立屬於自己的 docker odoo image

Youtube Tutorial - odoo13 - 如何建立屬於自己的 docker odoo image

所使用的 docker-odoo repo,

請看 Dockerfile, 主要就是要修改這邊,

alt tag

ARG ODOO_RELEASE=20200121
ARG ODOO_SHA=cb0bcb5d239983468c2e3b3f7cf17f58df820b1c

假設今天有一個 bug 在 20200301 才被修正, 可是官方的 docker images 只到1月該怎辦:question:

這時候肯定就是動手自己來 build 了:laughing:

修改 ODOO_RELEASE=20200301 然後 ODOO_SHA 需要到以下的網站查看 odoo_13.0.20200301_amd64.changes,

http://nightly.odoo.com/13.0/nightly/deb/

alt tag

ARG ODOO_RELEASE=20200301
ARG ODOO_SHA=c72896852e6a6aa730db366a96d2602d91317bfa

這邊是主要的 odoo images 修改, 如果你希望你的 odoo images 預設就包含某些 python package,

你可以自行加入, 舉個例子, 加入 paramiko,

alt tag

最後, 請記得給資料夾權限, sudo chmod -R 777 build-odoo-image.

切換到目錄資料夾底下輸入 build 指令 (這邊要多等一下:smirk:)

docker build -t twtrubiks/odoo13:20200301 .

build 完之後, 如果一定正常, 輸入 docker images 你應該會看到下圖

alt tag

接著把你的 docker-compose.yml 中的 image 修改成你自己的測試看看,

你也可以自己進去 odoo 容器中確認是否有安裝 paramiko.

odoo13 - 如何透過 CLI 還原 odoo db 以及 filestore

Youtube Tutorial - 如何透過 CLI 還原 odoo db 以及 filestore

前面教過大家 如何進入 odoo Database 管理界面,

但有時候會需要使用 CLI 的方式還原, 今天就來教大家這部份:smile:

這邊直接使用 docker 示範,

首先, 因為會還原 filestore, 所以請將 volumes 中的 odoo-web-data 同步到本機中,

也會還原 db, 所以請將 volumes 中的 odoo-db-tmp 也同步到本機中.

建議也給它們權限 sudo chmod -R 777 odoo-web-data odoo-db-tmp

這邊如果不清楚, 請參考 Docker 基本教學 - 從無到有 Docker-Beginners-Guide

docker yaml 修改如下,

version: '3.5'
services:
  web:
    image: odoo:13.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      - ./odoo-web-data:/var/lib/odoo   # <<---------------
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
      - ./odoo-log-data:/var/log/odoo
  db:
    image: postgres:10.9
    ......
    volumes:
      - odoo-db-data:/var/lib/postgresql/data/pgdata
      - ./odoo-db-tmp:/var/tmp # <<---------------

volumes:
  #odoo-web-data:   # <<---------------

使用 CLI 的方式還原會需要兩步驟,

第一, 還原 db.

第二, 還原 filestore (通常圖片都保存在這裡面).

假設今天要還原 twtrubiks 這個 db (直接從 odoo manager 中備份下來)

打開這個 zip, 你會看到這些東西

alt tag

現在先進行第一步, 還原 db, 也就是還原 dump.sql 這個檔案,

dump.sql 丟進去 odoo-db-tmp 資料夾中,

這樣你就可以在 db 容器裡的 /var/tmp 地方看到它

docker exec -it CONTAINER su postgres

alt tag

建立 db

createdb DB_NAME -U odoo -W odoo

alt tag

這時候如果你進去 odoo manager, 你會看到他顯示驚嘆號, 因為裡面還沒有資料

alt tag

還原 db

psql -U odoo -d DB_NAME < dump.sql

alt tag

等他順利跑完, 就代表還原完畢.

-d 代表 dbname.

-U 代表 username.

-W 代表 password.

-h 代表 hostname (可以忽略).

你會發現驚嘆號消失了:smile:

alt tag

雖然順利進去 odoo , 但你會發現圖片都消失了:expressionless:

(有可能你在這邊會看到圖片, 這樣就代表那些圖片是保存在 db 中的)

odoo 可以選擇要保存在 db 中還是 filestore 裡面.

alt tag

第二步, 還原 filestore (通常圖片都保存在這裡面).

alt tag

直接把 zip 內的 filestore 資料夾複製到 odoo-web-data/filestore 裡面,

然後把 filestore 資料夾的名稱改成 db 的名稱,

alt tag

建議給它權限 sudo chmod -R 777 odoo-web-data, 重起 odoo.

alt tag

這樣就可以順利看到圖片了.

(如果還是看不到圖片, 請看看前面是不是有步驟漏掉了, 或是權限, 或是網頁快取)

alt tag

整個流程稍微比較複雜一點點:smirk:

odoo - 如何透過 log_level 了解 ORM RAW SQL

Youtube Tutorial - 如何透過 log_level 了解 ORM RAW SQL

有時候, 總會很好奇某個 ORM 他所實際執行的 RAW SQL 到底是甚麼:question:

那在 odoo 中, 我們應該怎麼看這個值呢:question:

請先到 config/odoo.conf 中修改 log_level

log_level = debug_sql

( log_level 有很多選擇, 詳細可參考官方文件 logging)

接著, 建議不要使用一般執行 odoo 的指令, 因為會跑很久:disappointed_relieved:

請使用 odoo shell, 可參考之前的教學 shell

Youtube Tutorial - odoo shell 基本教學 - CRUD

進入 shell 後, 隨便執行一個 orm 指令, 就可以看到對應的 RAW SQL 了:smile:

alt tag

更進一步的, 你可以把這些 sql 拿去任何地方執行, 像是 pgadmin4, 輸出的結果會是一樣的.

後記

這次的 Odoo 介紹是很基礎的帶大家稍微了解一下,還有非常多東西可以講,像是如何撰寫 addons,

如何擴充既有的 addons,Odoo 架構,Odoo 如何搭配 Nginx 等等......

幾乎都可以單獨拍一支影片和大家做介紹。

延伸閱讀

如何建立 odoo 開發環境 - odoo13 - 從無到有

手把手教大家撰寫 odoo 的 addons - 進階篇

Reference

Donation

文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡:laughing:

綠界科技ECPAY ( 不需註冊會員 )

alt tag

贊助者付款

歐付寶 ( 需註冊會員 )

alt tag

贊助者付款

贊助名單

贊助名單

License

MIT license